2.7 - Scroll texte - AIDE

Bon, cela semble difficile pour vous vu que 1 seule personne (Xtrabet) a réussi son scroll texte...
Zisquier semble être le dernier sur le coup et Paco et les autres ont abandonné semble t'il...

Alors puisque c'est difficile, je vais vous donner un peu d'aide et illustrer tout ca pour que tout soit clair dans votre tête.

Alors déjà voici une fonte:


Comme suis sympa je vous l'ai mise en .SCR et vous l'ai mise dans un .DSK (regardez en bas de la page.)

Comme vous pouvez le voir, la fonte ne contient que les lettres (parce que j'ai autre chose à foutre que de m'emmerder avec ca).
Pour la palette: 0,0 : 1,3 : 2,15 : 3,24
Le tout en mode 1.

Bon, il faut maintenant capturer cette fonte et on va utiliser le logiciel Font Catcher que vous trouverez en bas de page.

On lance donc le truc avec un run"-catch

on arrive au menu:



Choisissez "D - disk operations"



Choisissez "Load screen" et selectionnez votre .scr de la fonte (car bien entendu bande de glands vous avez pensé à changer de dsk...)



C'est moche mais c'est bien notre fonte :)

vous appuyez sur espace puis choisissez "Back To Main Menu"



on se retrouve donc a nouveau sur le menu de base. Notez la présence de "font type" avec comme choix: "horizontal" ou "vertical". Le type horizontal signifie simplement que le logiciel va capturer les octets les un à la suite des autres dans le sens horizontal. Vertical signifiant qu'il le fait dans le sens vertical... On pourrait donc ce servir de vertical pour notre exemple, mais comme je veux que tout soit bien compris bein on ne va pas le faire !!!

Mettez donc ce que vous voulez: horizontal ou vertical on s'en tape car nous on va capturer des colonnes d'un octet de large (donc que ce soit vertical ou pas, dans tous les cas ca sera des colonnes)

Bref, sélectionnez "S - Set font parameters"



Puis "Size and position"

Avec la flèche du bas, sélectionnez 16 lignes (et restez à 1 octet en large)


Puis validez avec espace.



On se retrouve au menu et choisissez cette fois si "Char grid"

Augmentez la largeur au maximum puis appuyez 1 fois en bas pour couvrir toute la taille de la fonte



Appuyez a nouveau sur espace pour valider et choisissez "Number of chars"

Cette fois appuyez à gauche pour choisir uniquement les gfx de votre fonte.


Ne reste plus qu'à la sauvegarder notre fonte.
"
On retourne dans le menu principal; puis "D- Disk operations" puis "save font" et vous lui donnez un petit nom (perso ca sera "fonte.fnt")

Allons maintenant voir comment tout ca est foutu en RAM.

On reboot et on charge notre fonte en #4000:

Tapez sous basic:

memory &3fff:load"fonte.fnt",&4000

ou si vous avez une rom type utopia:

ùload,"fonte.fnt",&4000

Bien, maintenant allons voir en #4000 ce qu'on y trouve avec le find gfx de winape:


Youpi c'est bien notre fonte.

Notez que j'ai mis: 1 octet de large pour 16 lignes de haut.

La RAM est ici présentée de haut en bas. C'est à dire que pour la colonne de gauche, les octets se suivent de haut en bas puis on passe à la deuxième colonne.

Notre fonte est donc bien découpée en colonnes.

Une lettre fait donc 4 octets de large pour 16 lignes, mais il faut l'afficher en colonne d'un octet.

Pour calculer l'adresse de la lettre dans notre fonte il faudra donc en revanche bien considérer 4*16 octets...

Ainsi, le A est en: #4000+0*(4*16) et le B est en #4000+1*(4*16) et ainsi de suite.

Comme notre table ASCII commence en 65 pour le A majuscule (voir p237 du manuel du 6128+), on pourra faire comme suit:


lit_le_texte        LD        HL,TEXTE        ;HL pointe sur le texte
                       LD        A,(HL)            ;On prend l'octet contenu à l'adresse HL et on le met dans le registre A
                       SUB      65                 ;on enlève 65 à la valeur lue

Ainsi, si c'est un A qui est lu, après le LD A,(HL), le registre A contient 65. En enlevant 65 à cette valeur on obtient bien 0 ce qui nous arrange bien pour trouver la lettre dans la fonte !!!
Et ca marche aussi avec toutes les lettres... On Prend la lettre "C" par exemple. Sa valeur ASCII est 67. Si on enlève 65 à cette valeur, alors on obtient 2... Hors notre lettre C est bien en 2 :) (oubliez pas le 0).

Nous avons donc dit que nos lettres dans la fonte font 4*16 octets. Ce qui nous fait 64 octets de longueur pour une lettre. Il faut donc multiplier la valeur calculée précédemment par 64.
Pour cela comme nous l'avons vu il suffit de faire des additions.

Notre valeur est dans A. Mais si on la multiplie par 64 on risque de dépasser très rapidement 256 ce qui est la valeur max pour un reg 8 bits... Mettons donc notre valeur dans un reg 16bits:

                       LD        L,A                ;on recopie A dans L
                       LD        H,0                ;on met 0 dans H

HL contient donc bient notre valeur 8 bits de base. Sauf que la on va pouvoir la multiplier sans soucis.

                        ADD    HL,HL               ;*2
                        ADD    HL,HL               ;*4
                        ADD    HL,HL               ;*8
                        ADD    HL,HL               ;*16
                        ADD    HL,HL               ;*32
                        ADD    HL,HL               ;*64

Ouf on y est. (si vous en vous rappelez plus pourquoi multiplier revient à additionner, revenez en arrière dans les cours).

Plus qu'à additionner cette valeur à l'adresse de la fonte.

                        LD        DE,#4000
                        ADD      HL,DE

Hop c'est fini.

Regardons voir.

Imaginons qu'on lit la lettre "S"

"S" c'est la lettre de valeur 83. On lui retire donc 65. On obtient 18. 18*64=1152. #4000+1152(décimal 1152 notez bien). On obtient: #4480.

Allons donc voir ce qu'on trouve en RAM à cette adresse...


Fantastique c'est bien la lettre "S" :)

Pour faire un scroll texte nous avons donc besoin d'afficher la première colonne a droite. Nous pour l'exemple on va partir de #C04F (Ce qui est l'octet le plus en haut à droite de l'écran standard).

Affichons donc une colonne (la demerdez vous, vous savez afficher un sprite normalement. A noter quand même qu'ici un simple LDI suffit plutôt qu'un LDIR dans votre routine. Encore mieux: donnez les adresses direct plutôt que de les calculer. Vous gagnerez du cpu... Mais ca on verra ca prochainement ^^)

Voici donc la première colonne affichée:


Le but est donc de combiner l'affichage des lettres par colonne avec un scroll soft.

Scrollons les 16 premières lignes (ca aussi vous savez faire):


Parfait notre Lettre c'est décalée d'un octet à gauche. Nous pouvons donc afficher la colonne suivante et ainsi de suite. Notez qu'on affiche donc toujours au même endroit !!!

1 colonne en plus:


Puis on scroll; on réaffiche une colonne etc etc jusqu'à ce qu'une lettre soit bien affichée en entier. Ensuite on lit a lettre suivante etc etc.

Voici en gros comment commencer puis continuer.

Etape 1:


-Scroll
-Lecture du texte
-Calcul de la lettre dans la fonte
-Affichage d'une colonne


C'est ce qu'on vient de faire quoi.

Etape 2:


           -Scroll
compteur_lettre                                                ; si lettre pas finie alors on saute en affichage_lettre
            -Lecture du texte
            -Calcul de la lettre dans la fonte


affichage_lettre
            -Affichage d'une colonne
 
            JP        compteur_lettre

Voila, rien de plus simple.

N'oubliez pas après avoir affiché une colonne de sauvegarder HL pour la colonne suivante !!!
Suggestion de Madram: Il vaut mieux scroller avant d'afficher afin d'éviter une double colonne à droite !!! Merci Yves pour cette remarque :)

Si vous n'y arrivez toujours pas, alors maillez moi à: bdciron(at)gmail(dot)com    (vous n'êtes pas stupides, je n'ai pas besoin de vous préciser de remplacer le (at) par @ et (dot) par un point...*

Bon courage et j'attends vos résultats dans ma boite mail !!!


ċ
0-Font Catcher.dsk
(200k)
amaury durand,
7 août 2016 à 02:54
ċ
fonte.DSK
(190k)
amaury durand,
7 août 2016 à 02:46
Comments