Page 6 sur 8

Re: Incompéhension EF9345

Publié : 11 avr. 2017 19:59
par Papy.G
De rien, mes connaissances ne sont que théoriques, je ne suis pour l'instant parvenu à afficher sur mon minitel que des caractères erronés. :oops:
Par contre, je n'avais pas répondu complètement à ta question, pour les quadrichromes, il semblerait qu'il faille accéder directement à l'EF9345, écrire avec la commande OCT pour les jeux de caractères, pour le reste, KRF ou peut-être les routines de la Rom, si elles le supportent. (J'ai peur que le basic utilise le mode 16 bits fixe, auquel cas il faudra tout faire en assembleur, les caractères Q ne pouvant être utilisés dans ce mode.) :?
Vu la richesse graphique de space invaders, tu pourrais presque te contenter des mozaïques, voire, au pire, un jeu de caractères monochromes. :lol:

Re: Incompéhension EF9345

Publié : 11 avr. 2017 21:08
par rendomizer
je veux faire quelque chose de plus qu'un simple space invader biensur Papy G je comprend bien. j'ai déjà commencer a faire le deplacement et le tir maintenant il me faut travailler le graphisme improbable que le vg5000 n'a jamais exploité et redorer son blason j'ai un ami qui lui aussi s'y attelle de son coté on pense y arriver pour cet été.dans le datasheet on voit qu'il y a 8x100 caracteres de disponible en quadrichrome je travail essencielement en asm et c'est un vrai régale je me demande d'ailleur pourquoi il n'on pas intergré un assembleur dans la rom du VG5000 car c pour moi le meilleur ordinateur 8bit en qualité d'ecrant( pas de bavure ntsc ou pal comme avec les serie cbm ou atari ou les couleurs son ternes) Le VG500 merite son heure de gloire je pense. :D

comment lit on dans l'EF9345 ?

Publié : 15 juil. 2017 08:38
par rendomizer
J'aimerai savoir si quelqu'un sait comment on lit dans l'EF9345. J'ai besoin de lire dans la mémoire video pour faire un générateur de sprites qui restituer l’arrière plan quand le sprite passe sur un décor.

Re: comment lit on dans l'EF9345 ?

Publié : 15 juil. 2017 09:13
par Daniel
La commande OCT permet de transférer un octet de mémoire vidéo dans un registre, que l'on peut lire ensuite.

Mais ce n'est pas la bonne méthode, car beaucoup trop long. En général on gère une image de l'écran dans la RAM accessible directement par le microprocesseur, et on transmet uniquement ce qui change au processeur graphique.

Re: comment lit on dans l'EF9345 ?

Publié : 15 juil. 2017 10:59
par rendomizer
Peux tu me donner un petit exemple Daniel ? Comme lire le code caractère a une position x y... :D

Re: comment lit on dans l'EF9345 ?

Publié : 15 juil. 2017 11:06
par Daniel
Je ne pratique plus l'EF9345 depuis de nombreuses années et j'ai tout oublié. Je laisse les spécialistes répondre.

Re: comment lit on dans l'EF9345 ?

Publié : 17 juil. 2017 12:00
par Papy.G
Le goulot d'étranglement causé par l'utilisation de VRam propre au VDP, et le transfert de données par boîtes aux lettres et envoi de commande fait que la lecture dans la VRam ralentira considérablement un jeu utilisant des sprites avec survol de décor. :cry:
Il faut calculer les caractères à redéfinir pendant le balayage en mémoire processeur, et y gérer les sprites, masques et mozaïques d'arrière-plan pour n'avoir qu'à envoyer les données nécessaires pendant le blanking, période où l'exécution des instructions envoyées au VDP ne subiront pas de délai. :o

Pour lire un caractère à la position X, Y, il faut déjà savoir la position de la page-écran dans la zone d'affichage, si tu utilises le mode "rouleau" pour faire un scrolling ligne par ligne. Cette position te permet de calculer le Y relatif de la lignes que tu vises.
Tu charges en R6 et R7 le pointeur principal,
Tu envoies la commande KRF, KRG, KRC, KRL, ou encore OCT, selon le mode d'affichage utilisé, avec la variante lecture (bit 3 en R0 à 0), tu attends l'exécution de la commande, via le Bit "Busy" en R0, ensuite, tu peux lire les registres 1 à 3, selon le mode d'affichage, toujours.
Si c'est pour du bitmap, il va te falloir ensuite recalculer où se trouve le sprite que tu veux lire, pour ensuite aller le lire ligne par ligne dans le bloc mémoire où tu auras mis tes sprites. :mrgreen:

C'est à la louche, j'ai peu de temps, là, les pages 33 à 36 de la doc du EF9345 t'en apprendront plus, voir aussi la structure de positionnement X-Y des caractères, il y a un sujet de Phil pour l'écriture d'un caractère à une position donnée, son mémo, ainsi que les notes de Carl, sont de précieuses aides. :wink:

Dans un système sans Ram à double ports, l'utilisation de VDP à mémoire privée pour certains jeux est un vrai défi. :?

Re: comment lit on dans l'EF9345 ?

Publié : 17 juil. 2017 15:13
par rendomizer
ça vaut le coup d'essayer Papy G ! :lol: car j'ai finalisé un générateur de sprites pour le basic mais il efface seulement les caractères derrière eux pour l'instant. J'ai bon espoir avec ton aide merci !
Je posterai le programme ce soir.

Re: comment lit on dans l'EF9345 ?

Publié : 20 juil. 2017 11:53
par rendomizer
J'aimerais avoir un petit exemple de lecture d'un caractère dans une position x et y car là c'est un peu compliqué :mrgreen:

Re: comment lit on dans l'EF9345 ?

Publié : 21 juil. 2017 01:33
par Papy.G
Figures 9, 23, et tableau 4. :wink:

Admettons que tu veux lire le numéro de caractère avec l'instruction OCT en pointeur principal:
Ta page est localisée dans le bloc dont l'adresse est, en binaire, d1, d0, b1, b0 (le EF9345 peut adresser 15 blocs, mais le VG5000 n'a que 8ko de Ram, donc, huit blocs seulement)

Tu mets en R6 bit 0 à 4 la valeur de Y (0, 1, ou 8 à 31), en bit 5 la valeur d0, en bit 6 la valeur d'1 (pointeur secondaire), et en bit 7 la valeur d1, les deux à Zéro de toute façons sur VG5000
Tu mets en R7 bit 0 à 5 la valeur de X, en bit 6 la valeur b1, en bit 7 la valeur b0

Tu mets en R0 bit 0-0 pour lecture unique (1 pour lectures séquentielles avec incrémentation automatique), bit1-0, bit 2-0 pour utiliser le pointeur principal, bit 3-1 pour lecture, bits 7 à 4, 0011 code de l'instruction OCT, lecture d'octet. Sans oublier de mettre le bit 3 de l'adresse à 1, pour requérir l'exécution (tu ajoutes 8 à l'adresse habituelle de R0).

Tu teste l'octet de statut jusqu'à ce que busy libéré, et tu peux lire en R1 le code du caractère que tu voulais pointer.


Pour un "Space invaders", le VDP offre des fonctions qui peuvent être utiles, il ne faut plus voir les vaisseaux envahissants comme des sprites, mais comme un arrière-plan, alors, tu peux faire un scrolling sur la masse avec les fonctions de copie-déplacement intégrées, cela limite par contre à un pas minimum de l'ordre d'une colonne ou ligne. :?

Re: comment lit on dans l'EF9345 ?

Publié : 21 juil. 2017 08:37
par joaopa
Tu fais comment un déplacement horizontal? Je pensais que le scrolling ne pouvait se faire que verticalement sur l'EF9345.

Re: comment lit on dans l'EF9345 ?

Publié : 21 juil. 2017 11:44
par Papy.G
Tu as des instructions (Move buffer) de copie de position à position, utilisant les pointeurs principal et secondaire, pour scroller d'autant que tu veux, si tu ne veux pas faire de double buffering, c'est possible, mais il faudra, pour scroller dans un des sens, faire une copie de -39, et sauter une ligne à l'envers. A la suite de l'opération, il faut remettre les bouts de lignes qui ont "fait le tour", dans un "space invaders", on s'en fiche car le groupe laisse du vide, si c'est gênant, on peut faire masquer la première et dernière colonne si l'on peut se passer de scroller certains attributs. :wink:

Re: comment lit on dans l'EF9345 ?

Publié : 29 juil. 2017 19:56
par rendomizer
Personne ne l'a pas déja fait sur VG5000µ ? IL n'y a pas moyen. Je crois que ce n'est pas possible sur VG5000µ :shock:

Re: comment lit on dans l'EF9345 ?

Publié : 29 juil. 2017 20:50
par Papy.G
Je ne sais pas si cela a déjà été fait, mais ce sont des instructions documentées dans la Datasheet du 9345, il n'y a pas de raison que ça ne soit pas possible. :roll:

Re: comment lit on dans l'EF9345 ?

Publié : 29 juil. 2017 21:01
par rendomizer
Oui mais il n'y a pour l'adressage qu'une seul routine qui entre les codes dans l'ef9345 mais pas l'inverse !