VG5000/Alice -> EF9345

Cette catégorie traite de développements récents pour nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

VG5000/Alice -> EF9345

Message par joaopa »

J'essaie de faire du double buffering avec l'EF9345, mais je n'y arrive pas. Lorsque je change la page (avec ROR), l'EF9345 affiche la nouvelle page. Je n'arrive pas à écrire dans cette nouvelle page sans qu'elle ne s'affiche. Y'a t-il un moyen de faire ça?

Merci d'avance
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: VG5000/Alice -> EF9345

Message par 6502man »

L'EF9345 est très loin dans ma mémoire mais normalement tu peux écrire n'importe ou dans le VRAM, que ca soit la page affichée ou non.
Si tu positionne correctement le pointeur d’écriture et que le EF9345 est libre ca doit fonctionner !

Par contre il peut y avoir un délai à respecter entre le moment ou tu écrit en VRAM et ou tu change de page mais à vérifier dans le datasheet, en ce moment je n'ai pas le temps pour ca ...
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
Carl
Modérateur
Messages : 13253
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: VG5000/Alice -> EF9345

Message par Carl »

Je crois que le sujet avait été évoqué ici : https://forum.system-cfg.com/viewtopic. ... 5&start=45

carl
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3047
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: VG5000/Alice -> EF9345

Message par Papy.G »

ROR ne sert qu'à indiquer où se trouve la page mémoire que tu veux afficher, il ne faut pas y toucher dans un premier temps.
Tu utilises les commandes d'écriture de caractères, ou les commandes d'écriture de données, avec leurs pointeurs en fonction de où tu veux les mettre, et quand ta page est prête à afficher, tu modifies le pointeur en ROR.
Cela suppose probablement de ne pas utiliser les routines de la rom. :wink:
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Avatar de l’utilisateur
Dominique
Messages : 828
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: VG5000/Alice -> EF9345

Message par Dominique »

Bonjour à tous,

Je déterre ce sujet pour ne pas avoir à en créer un autre (OBS je pense qu'il y a une typo et que par EF3945 il faut entendre EF9345)

Alice et VG5000 utilisant le même EF9345 je m'amuse à reproduire les listings des "Astuces d'Alice" avec le VG5K

Page 117 ligne 72 du programme je rencontre STAB R1+EXEC

Il s'agit donc d'envoyer la valeur contenue dans B dans le registre R1 puis d'effectuer l'Execution.
Or je pensais que l'exécution se faisait toujours dans R0

Pour mettre B dans R1 (sans EXEC) on fait

Code : Tout sélectionner

0E CF       	LD      C, $CF
3E 21       	LD      A,$21		; Registre R1
D3 8F       	OUT	($8F), A	; Port R1
ED 41       	OUT     (C),B		; B dans R1
 
Mais qu'en est-il du EXEC ? Puis je faire

Code : Tout sélectionner

0E CF       	LD      C, $CF
3E 29       	LD      A,$21+$08	; Registre R1 + EXEC; Est ce OK ???
D3 8F       	OUT	($8F), A	; Port R1
ED 41       	OUT     (C),B		; B dans R1

Ou dois-je faire deux opérations ?
Mettre B dans R1 et faire ensuite KRF dans R0+EXEC

Merci
Dernière modification par Dominique le 03 nov. 2022 12:44, modifié 1 fois.
Avatar de l’utilisateur
fneck
Site Admin
Messages : 17423
Inscription : 01 avr. 2007 12:03
Localisation : Drôme Provençale (26)
Contact :

Re: VG5000/Alice -> EF9345

Message par fneck »

Dominique a écrit : 03 nov. 2022 08:30 (OBS je pense qu'il y a une typo et que par EF3945 il faut entendre EF9345)
Oui Dominique, j'ai modifié tous les 3945 en 9345 :roll:
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Avatar de l’utilisateur
Mokona
Messages : 1040
Inscription : 17 déc. 2016 22:01
Localisation : Nord Est des Yvelines
Contact :

Re: VG5000/Alice -> EF9345

Message par Mokona »

Oui, tu peux tout à fait « préparer » le KRF (dans R0) sans l'exécuter, puis mettre le flag d'EXEC lorsque tu charges R1.

C'est d'ailleurs comme cela que c'est imaginé. L'idée étant de pouvoir envoyer une série de commandes identiques avec des arguments différents, sans avoir à spécifier à nouveau la commande.

Pour KRF, typiquement, on place le flag d'incrémentation automatique, puis on exécute cette commande à chaque changement de nouveau caractère (dans R1, donc en mettant le flag d'execution lors du chargement de R1)
Avatar de l’utilisateur
Dominique
Messages : 828
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: VG5000/Alice -> EF9345

Message par Dominique »

Tout d'abord merci fneck pour la correction.

@Mokona,

Egalement merci pour ta réponse qui est complète et répond bien à ma question.

Daniel nous a toujours prévenu que sur le DCVG5K l'émulation du EF9345 devait être vérifiée sur la machine réelle; J'avais eu un comportement négatif la semaine dernière pour la manip que tu viens de confirmer. Mais la programmation du EF9345 est tellement délicate que je vais revoir mon programme; ce doit être lui le fautif.

Merci
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3047
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: VG5000/Alice -> EF9345

Message par Papy.G »

Je me suis repenché dans la Doc, et j'ai vu que ce mode de fonctionnement était prévu pour les instructions à auto-incrémentation, notament, mais, étais-je trop fatigué, je n'ai pas vu précisé s'il faut remettre le bit "exec" à zéro à chaque fois, ou est-il suffisant de re-charger le registre avec le bit à 1?
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Avatar de l’utilisateur
Mokona
Messages : 1040
Inscription : 17 déc. 2016 22:01
Localisation : Nord Est des Yvelines
Contact :

Re: VG5000/Alice -> EF9345

Message par Mokona »

Dès que le bit exec est mis lors d'un envoi de données, alors la commande actuellement dans R0 est exécutée avec les paramètres actuellement dans les registres. Peu importe quel registre est touché par cet envoi de donnée. Cela provoque en quelque sorte un "instantané" des registres.

S'il n'y a pas d'envoi de donnée, il n'y a pas de nouvelle commande exécutée. Par contre, si une nouvelle donnée est envoyée avec le flag d'exécution et que le VDP n'a pas terminer la commande précédente, cette dernière est interrompue en l'état et la nouvelle est exécutée.

C'est une des partie où les deux émulateurs actuels (dcvg5k et mame) ne sont pas fiables : la commande sera effectivement interrompue, mais la vitesse d'exécution du VDP n'étant pas correct (trop rapide), il y aura des différences avec le vrai matériel. Généralement, on n'a pas de problème avec l''émulateur, mais une fois passé sur le vrai matériel, plein de petits artefacts graphiques apparaissent, où bien certaines commandes semblent ignorées. Le mieux est encore d'attendre systématiquement que le VDP signal être prêt. Même si ça on doit pouvoir pousser la performance en évitant cette requête dans certains cas (la ROM du VG5000 n'attend pas systématiquement le VDP, mais tout de même dans la majorité des cas).

Exception sur la continuité des commandes : les commandes MVB, MVD et MVT peuvent être paramétrés dans un mode qui ne s'arrête que si une nouvelle commande arrive (d'après la documentation en tout cas... je ne les ai pas utilisées dans ce mode là pour le moment).
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: VG5000/Alice -> EF9345

Message par Daniel »

Mokona a écrit : 05 nov. 2022 21:40 les deux émulateurs actuels (dcvg5k et mame) ne sont pas fiables
Et tout est de ma faute, car mame utilise une ancienne version de mon programme pour émuler le 9345. Depuis j'ai fait des corrections, par contre je ne sais pas si la version de mame a évolué.

Pour simuler le temps d'exécution d'une commande, il suffirait peut-être d'ajouter une temporisation de quelques cycles. Dans dcvg5k l'EF9345 est toujours prêt (comme les scouts :wink: ). Il faudrait prévoir un laps de temps où il est occupé et refuser alors les nouvelles commandes tant que le délai n'est pas écoulé. Je ne sais pas trop comment calculer précisément ce délai.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3047
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: VG5000/Alice -> EF9345

Message par Papy.G »

Mokona a écrit : 05 nov. 2022 21:40...
C'est vrai, j'avais oublié que ce bit est dans l'adresse, pas dans la donnée. :oops:

Intéressant, je pensais que la nouvelle aurait été ignorée.

Peut-être que la majorité des routines sur le vg5k sont assez longues pour permettre le temps nécessaire à l'exécution.

Ces commandes Mov avec itération systématique seront très utiles pour faire des scrollings rapides. 8)
Daniel a écrit : 06 nov. 2022 08:29Pour simuler le temps d'exécution d'une commande, il suffirait peut-être d'ajouter une temporisation de quelques cycles. Dans dcvg5k l'EF9345 est toujours prêt (comme les scouts :wink: ). Il faudrait prévoir un laps de temps où il est occupé et refuser alors les nouvelles commandes tant que le délai n'est pas écoulé. Je ne sais pas trop comment calculer précisément ce délai.
Tous les timings sont dans la doc, pour les sync affichage, fig7 page 9, pour la dispo pendant l'affichage, fig10 page 12, et pour les timings d'exécution, table 4 page 36.
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Avatar de l’utilisateur
Mokona
Messages : 1040
Inscription : 17 déc. 2016 22:01
Localisation : Nord Est des Yvelines
Contact :

Re: VG5000/Alice -> EF9345

Message par Mokona »

J'ai fais une correction dans la version MAME du VDP (qui était déjà faite dans dcvg5k). Le reste, je ne sais pas.

Pour les timings, ils sont en effet dans le manuel. Ce qu'il y a aussi dans le manuel qui n'est pas vraiment correct dans les émulateurs, ce sont les restrictions d'accès au VDP. Le VDP multiplexe son bus interne, et donc n'est pas en mesure de s'intéresser en continue à ce qui arrive de l'extérieur.

Et ce multiplexage implique des timings différents suivant où en est le VDP dans son retraçage de l'image. C'est documenté, mais côté MAME pas implémenté. Tant qu'on laisse la ROM faire, ça passe sur émulateur. Si on chronomètre un logiciel, on voit qu'il y a une divergence progressive, mais globalement, ça passe.

Il y a autre chose que MAME fait mal pour le moment : le driver retrace ligne de caractères par ligne de caractères (donc 10 lignes par 10 lignes de pixels). Ce n'est pas ce que fait le VDP, qui retrace ligne par ligne avec transfert des informations de la VRAM pendant la première ligne d'un bloc de 10 (moment où le VDP est très occupé à ça, et n'ira pas lire ce qu'il se passe à l'extérieur).

Ça se voit bien, mon test de "raster", sur MAME, est quantifié sur 10 lignes. Pas sur dcvg5k, qui a l'air de gérer l'affichage ligne par ligne.

J'ai commencé au début de l'été un programme de batteries de tests pour pouvoir lancer sur matériel réel et servir d'étalonnage aux émulateurs. J'ai mis de côté le temps de faire mon petit jeu, je vais m'y remettre.
Avatar de l’utilisateur
Dominique
Messages : 828
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: VG5000/Alice -> EF9345

Message par Dominique »

Mokona a écrit : 05 nov. 2022 21:40 Exception sur la continuité des commandes : les commandes MVB, MVD et MVT peuvent être paramétrés dans un mode qui ne s'arrête que si une nouvelle commande arrive (d'après la documentation en tout cas... je ne les ai pas utilisées dans ce mode là pour le moment).
Sur la machine réelle je n'ai réussi un MVT STOP ($F9 dans R0+EXEC) et MVT NOSTOP ($FA dans R0+EXEC)
qu'après avoir fait un loop (WAIT) de $0 à $FF avant de faire le NOP.
Avatar de l’utilisateur
Dominique
Messages : 828
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: VG5000/Alice -> EF9345

Message par Dominique »

Bonjour à tous

Afin de dynamiser un peu le VG5000 , j'ai voulu voir ce que donnerait la traduction des programmes des "Astuces d'Alice" pour le VG5000.



1 - Le programme le plus amusant est le Bit Map de la page 109 qui m'a supris par sa fluidité sur le VG5000.
En plus du passage à 80 colonnes, j'ai un peu galéré avec le registre TGS.
Suivant votre moniteur il faudra peut être modifier ce registre qui paramètre la sortie video.(Voir Ligne 0522 du *.lst)

Les touches sont documentées dans le fichier source VG_Aff_semigrap880_v2.lst



Vous trouverez dans le zip :
VGbitMapAlice.zip
(16.88 Kio) Téléchargé 34 fois
-Le fichier source *.lst (Si vous voulez le *.asm demandez le moi)
-Le programme sur K7 (lancer par CALL&"4E00")
-Le DISKA.sd pour l'exellent VY5040 de l'ami Fredéric (Fred_72), il se nomme HRBM2 et se lance par DISK RUN "HRBM2"


Crédits à C. Muset et J-F Gallet pour le programme Alice et Daniel pour son plus que parfait DCVG5K.

2 - Pour l'exercice de traduction au plus près des ASM d'Alice je me suis amusé (ne jamais oublier l'aspect ludique) à recréer des instructions 6803 que j'aime bien:
a)
STAA Rn et LDA Rn
STAB Rn et LDA Rn
STD Rn et LDD Rn
TST Rn
INC Rn
b)
Les registres A et B du 6803 étant 2 accumulateurs (Z80 n'en a qu'un), j'ai fait de DE du Z80 le D du 6803.
BC est trop utile pour d'éventuels DJNZ et HL est le seul à faire LD r,(HL) , DEC (HL) etc

je n'ai pas encore testé les autres programmes sur un vrai VG.

A suivre
Répondre