TUTO: programmation du [ EF-9345 ] ALICE/VG/MINITEL

Cette catégorie traite de développements récents destinés à 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

Avatar de l’utilisateur
Carl
Modérateur
Messages : 13299
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: TUTO: programmation du [ EF-9345 ] ALICE/VG/MINITEL

Message par Carl »

004.jpg
004.jpg (198.26 Kio) Consulté 6010 fois
005.jpg
005.jpg (309.65 Kio) Consulté 6010 fois
006.jpg
006.jpg (291.71 Kio) Consulté 6010 fois
007.jpg
007.jpg (110.35 Kio) Consulté 6010 fois
008.jpg
008.jpg (272.39 Kio) Consulté 6010 fois
009.jpg
009.jpg (333.37 Kio) Consulté 6010 fois
0010.jpg
0010.jpg (175.68 Kio) Consulté 6010 fois
0011.jpg
0011.jpg (251.7 Kio) Consulté 6010 fois
0012.jpg
0012.jpg (292.09 Kio) Consulté 6010 fois
0013.jpg
0013.jpg (297.63 Kio) Consulté 6010 fois
Avatar de l’utilisateur
6502man
Messages : 12332
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: TUTO: programmation du [ EF-9345 ] ALICE/VG/MINITEL

Message par 6502man »

Merci Carl.

Très intéressant on apprend des trucs super, comme le faite que le CPU accède directement à la VRAM :D
Et ma supposition était exacte on accède aux registres et commandes du VDP en envoyant successivement adresse et donnée sur les 2 ports :D

Le fonctionnement du EF-9345 sur VG5000 est vraiment différent de l'Alice :roll:

Du coup pour afficher un caractère sur VG5000 c'est totalement différent et plus simple puisque l'on accède directement a la VRAM :lol:

Par contre pour la redéfinition des caractères des jeux G0',G10'/G11' on peut aussi passer par le BASIC sur VG5000 ?
Et y a t'il le détail de la commande BASIC INIT ?
Car je pense que presque toutes les fonctions du VDP sont accessible au BASIC ???
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Markerror
Messages : 2123
Inscription : 31 oct. 2011 19:21
Localisation : Orléans
Contact :

Re: TUTO: programmation du [ EF-9345 ] ALICE/VG/MINITEL

Message par Markerror »

Bonjour,

Ca veut dire que sur Alice, point de buffer mémoire vidéo ? Sur le VG5000, c'est certes "simple" en utilisant la zone mémoire &4000-&47CF, mais dès qu'on veut faire quelque chose d'animé correctement, il faut quand même se taper la programmation de l'EF9345, car le traitement de la zone ram video par le système n'est pas optimisé (il renvoie tout à l'EF9345, et pas seulement les modifications).
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3054
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: TUTO: programmation du [ EF-9345 ] ALICE/VG/MINITEL

Message par Papy.G »

Merci Carl pour cette doc fort utile pour les non-anglophones.

Phil> Je me suis mal exprimé, en fait seuls les huits bits multiplexés AD0 à AD7 (que j'avais dénommés Q0 à Q7 précédemment, courent sur la carte principale, et sont interceptés par la carte fille d'extension quand elle est présente. Les huits hsb d'adresse ne vont qu'au bus d'extension.
Le VG5000 n'accède pas directement à la VRam, mais à une copie de la page mémoire dans sa Ram, qui doit être envoyée vers le 9345 régulièrement. Ce tampon semble limiter l'utilisateur au mode 40 colonnes, 16bit fixe. Cette "page locale" permet en basic des manipulations plus simples et rapides pour des tests, par exemple, tout le reste n'est accessible qu'en assembleur, auquel cas, on gagne 2ko de ram pour les programmes.

Mark> Bonne analyse, je pense qu'une mémoire d'écran est une bonne idée, mais le plus rapide serait une pile de données modifiée pour n'envoyer que ce qui est utile.
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
6502man
Messages : 12332
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: TUTO: programmation du [ EF-9345 ] ALICE/VG/MINITEL

Message par 6502man »

@markerror: Oui sur Alice pas de buffer vidéo il faut passer par les commandes du VDP en assembleur, En BASIC aucun poke ne permet d’accéder à la VRAM :(
Sur le VG5000 si tu utilise les commandes du VDP pour écrire en VRAM qu'est ce qui ce passe ? (EF-9345 efface et recopie ce qui à en RAM {$4000-$47CF}, ou attend qu'une action BASIC modifie cette RAM) .

La suite du TUTO seras sur la gestion des registres du EF-9345 (toujours en assembleur), et après on pourras passer à la redéfinition des caractères utilisateur G0' G10'/G11' ...
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Markerror
Messages : 2123
Inscription : 31 oct. 2011 19:21
Localisation : Orléans
Contact :

Re: TUTO: programmation du [ EF-9345 ] ALICE/VG/MINITEL

Message par Markerror »

Bonjour,

Sur le VG5000, soit on passe par le buffer VRAM, soit on programme directement le VDP après avoir coupé les interruptions ou désactivé la routine d'envoi des données du buffer au VDP. Mélanger les deux n'est pas possible, le système va écraser ce qui a été envoyé directement au VDP dès qu'il fera un rafraîchissement du buffer VRAM.

Pour moi, l'EF9345 est un boulet pour le VG5000, car il est franchement complexe à programmer (je n'ai pas encore essayé d'ailleurs de faire des routines d'affichage). Je peux comprendre le choix technique (hop, on prend un truc qu'on a sous la main,qu'on connaît et qui possède sa propre ram et ses jeux de caractères), mais du point de vue du programmeur, ça n'a pas dû faciliter les vocations (même remarque pour l'Alice 32 et 90). Et pourtant, quand on voit certaines animations de jeux (le tank de l'intro dans "Le Monstre", la voiture dans l'intro de "U.S.Rallye"), on se dit qu'il y a du potentiel.
Dernière modification par Markerror le 16 oct. 2014 22:38, modifié 1 fois.
Avatar de l’utilisateur
6502man
Messages : 12332
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: TUTO: programmation du [ EF-9345 ] ALICE/VG/MINITEL

Message par 6502man »

Tuto Partie 2:

Maintenant nous allons nous intéresser aux registres internes du EF-9345.
On ressort mon petit tableau de vulgarisation :lol:

Tout d'abord il y en a 5 ( MAT, PAT, TGS, DOR , ROR) chacun sert à définir les fonctionnalités du EF-9345 40/80 colonnes, générateur de caractères, marge....

Donc pour commencer un petit programme ASM pour rentrer dans le vif du sujet :

pour ALICE 32/90:

Code : Tout sélectionner

;	DECLARATIONS
;----------------------------------------------------------

POLCA	.EQU	$F883
KDINP	.EQU	$F868
OUTCA	.EQU	$F9C6
OUTTX	.EQU 	$e7a8

;	VDP  32/90
;--------------------------
TECRA	.EQU	$301A
ROLTB	.EQU	$3231
INASS	.EQU	$D42C
R0		.EQU	$BF20
R1		.EQU	$BF21
R2		.EQU	$BF22
R3		.EQU	$BF23
R4		.EQU	$BF24
R5		.EQU	$BF25
R6		.EQU	$BF26
R7		.EQU	$BF27
EXEC	.EQU	$08

VDP_TGS		.EQU	$81		;(mode ecriture)
VDP_MAT		.EQU	$82		;	""
VDP_PAT		.EQU	$83		;	""
VDP_DOR		.EQU	$84		;	""
VDP_ROR		.EQU	$87		;	""


	.ORG $4F00

	
START
		;	on defini MAT
	LDAA #$29			
	STAA R1				
	LDAA #VDP_MAT		;	commande  IND (MAT)
	STAA R0+EXEC
	JSR BUSY			;	saute à la routine BUSY

			;	on defini PAT
	LDAA #$67			
	STAA R1				
	LDAA #VDP_PAT		;	commande  IND (PAT)
	STAA R0+EXEC
	JSR BUSY			;	saute à la routine BUSY
	
		;	on defini TGS
	LDAA #$01			
	STAA R1				
	LDAA #VDP_TGS		;	commande  IND (TGS)
	STAA R0+EXEC	
	JSR BUSY			;	saute à la routine BUSY

		;	on defini DOR
	LDAA #$13			
	STAA R1				
	LDAA #VDP_DOR		;	commande  IND (DOR)
	STAA R0+EXEC	
	JSR BUSY			;	saute à la routine BUSY

		;	on defini ROR
	LDAA #$08			
	STAA R1				
	LDAA #VDP_ROR		;	commande  IND (DOR)
	STAA R0+EXEC	
	JSR BUSY			;	saute à la routine BUSY
	
	RTS					;	fin du programme
	
BUSY					;		attend que le VDP est fini de traiter la commande
	TST R0
	BMI BUSY
	RTS	

		.END	
Le binaire à utiliser avec l'émulateur DCalice :
TUTO-02.zip
(178 octets) Téléchargé 159 fois
(configurer DCalice en mode Alice 32 ou 90) puis taper F9, entrez dans l'adresse de désassemblage 4F00, ensuite cliquez sur charger un binaire, F9 pour fermer la mise au point et sous Basic tapez EXEC 20224)

Explications du code :
Tout d'abord vous aurez remarqué que j'ai rajouté des Equates pour les registres, ATTENTION par facilité j'ai défini des valeurs en mode écriture on peut aussi lire ces registres dans ce cas les valeurs de DOR, PAT... sont différentes il faut rajouter $08 à ces valeurs :wink:

Code : Tout sélectionner

	LDAA #$29			
	STAA R1				
	LDAA #VDP_MAT		;	commande  IND (MAT)
	STAA R0+EXEC
On envoi toujours la valeur du registre en premier dans R1, puis on envoie l'adresse du registre + EXEC dans R0.
Pour MAT : $29 -> 00101001
Ce qui donne curseur clignotant, marge visible, couleur de la marge rouge.

Pour les autres valeurs de registres reportez vous soit à ma fiche soit au Datasheet.

Je vous recommande de vous amuser à modifier ce programme de test pour bien comprendre l'usage de ces registres.

Si vous avez besoin d'explications sur le rôle de ces registres n'hésitez pas à poser vos questions :wink:

je vais regarder du côté du 8052 pour voir le code à produire ....
pour le minitel ca pourrais donner ca :

Code : Tout sélectionner

    VDP_R0   EQU   8020h
    VDP_R1   EQU   8021h
    VDP_R2   EQU   8022h
    VDP_R3   EQU   8023h
    VDP_R4   EQU   8024h
    VDP_R5   EQU   8025h
    VDP_R6   EQU   8026h
    VDP_R7   EQU   8027h
    EXEC   EQU   08h

    VDP_TGS   EQU   81h
    VDP_MAT   EQU   82h
    VDP_PAT   EQU   83h
    VDP_DOR   EQU   84h
    VDP_ROR   EQU   87h

    START:
;MAT
    mov DPH,#80h
    mov DPL,#21h
    mov A,#29h
    movx @DPTR,A
    mov DPH,#80h
    mov DPL,#28h
    mov A,#VDP_MAT
    movx @DPTR,A

;PAT
    mov DPH,#80h
    mov DPL,#21h
    mov A,#67h
    movx @DPTR,A
    mov DPH,#80h
    mov DPL,#28h
    mov A,#VDP_PAT
    movx @DPTR,A

;TGS
    mov DPH,#80h
    mov DPL,#21h
    mov A,#01h
    movx @DPTR,A
    mov DPH,#80h
    mov DPL,#28h
    mov A,#VDP_TGS
    movx @DPTR,A

;DOR
    mov DPH,#80h
    mov DPL,#21h
    mov A,#13h
    movx @DPTR,A
    mov DPH,#80h
    mov DPL,#28h
    mov A,#VDP_DOR
    movx @DPTR,A

;ROR
    mov DPH,#80h
    mov DPL,#21h
    mov A,#08h
    movx @DPTR,A
    mov DPH,#80h
    mov DPL,#28h
    mov A,#VDP_ROR
    movx @DPTR,A
   
    Wait:
    sjmp   Wait

    end
Le fichier BIN et HEX:
Minitel_With_EF9345.zip
(432 octets) Téléchargé 153 fois


PARTIE 3
Dernière modification par 6502man le 16 oct. 2014 16:02, modifié 6 fois.
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
__sam__
Messages : 7987
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: TUTO: programmation du [ EF-9345 ] ALICE/VG/MINITEL

Message par __sam__ »

6502man a écrit :Tout d'abord il y en a 5 ( MAT, PAT, ....
J'ai joué avec ces deux registres. Ce fût un échec :!: :lol: (mat et pat)

Ok je :arrow:
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
6502man
Messages : 12332
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: TUTO: programmation du [ EF-9345 ] ALICE/VG/MINITEL

Message par 6502man »

Tuto Partie 3:

Explications des registres internes du EF-9345.
On ressort mon petit tableau de vulgarisation :lol:

ROR:

Code : Tout sélectionner

BITS: 7 6 5 4 3 2 1 0
      a a a b b b b b
aaa= premier bloc affiché (toujours pair) => emplacement dans la VRAM de début de la page écran :wink:
la valeur peut être donc 0,2,4,6

bbbbb = YOR ligne d'origine 8 à 31 => c'est à dires la première la ligne affiché à l'écran :wink:
0 peut être utilisé (à vérifier).


DOR: en mode 40 colonnes

Code : Tout sélectionner

BITS: 7 6 5 4 3 2 1 0
      a b b b c c c c
a = numéro du bloc des caractères quadrichrome Q0 => emplacement dans la VRAM ou sont stockés les caractères redéfinis en mode quadrichrome.
bbb = numéro du bloc des caractères semi-graphiques G10' et G11' => emplacement dans la VRAM ou sont stockés les caractères redéfinis en mode semi-graphiques.
cccc = numéro du bloc des caractères alphanumériques G0' => emplacement dans la VRAM ou sont stockés les caractères redéfinis en mode alphanumériques


DOR: en mode 80 colonnes

Code : Tout sélectionner

BITS: 7 6 5 4 3 2 1 0
      a b b b c d d d
a = incrustation de la couleur 2 ou transparence => la couleur 2 est active ou transparente
bbb = code BVR de la couleur 2
c = incrstation de la couleur 1 ou transparence => la couleur 1 est active ou transparente
ddd = code BVR de la couleur 1


TGS:

Code : Tout sélectionner

BITS: 7 6 5 4 3 2 1 0
      a a b c d e f g
aa = K1 et K0 => en relation avec PAT pour définir le mode de commande avec l'EF-9345
b = rangée de service =>
c = synchro => active la synchro par H/V ou par COMPOSITE
d = verticale resynch => synchro verticale
e = horizontale resynch => synchro horizontale
f = entrelacement => entrelacement de l'image oui ou non
g = 525/625 lignes => défini le nombre de lignes de la sortie vidéo de l'EF-9345


PAT:

Code : Tout sélectionner

BITS: 7 6 5 4 3 2 1 0
      a b c c d e f g
a = K2 => en relation avec TGS pour définir le mode de commande avec l'EF-9345
b = curseur fixe ou clignotant
cc = incrustation vidéo => mode incrustation vidéo activé ou non
d = masquage => masquage ou non ( il faut que je relise la doc pour donner plus de détail .... )
e = marge du bas => affiche ou non la marge du haut
f= marge du haut => affiche ou non la marge du bas
g= rangé de service => affiche ou non la rangé de service


MAT:

Code : Tout sélectionner

BITS: 7 6 5 4 3 2 1 0
      a b c c d e e e
a = double hauteur => 0 mode normal 1 mode double hauteur des caractères
b = curseur actif => défini si le curseur est actif ou non
cc= forme du curseur => défini la forme du curseur
d = marge => défini si la marge est visible ou non
eee = code BVR de la marge => défini la couleur de marge


code BVR :

- 000>noir
- 111>blanc
- 001>rouge
- 010>vert
- 100>bleu
- 011>jaune
- 110>cyan
- 101>magenta


mode de commande de l'EF-9345 K2K1K0 :
- 000> 40colonnes mode long
- 001> 40colonnes mode variable
- 100> 40colonnes mode court
- 011> 80colonnes mode long
- 010> 80colonnes mode court

Voila j’espère que ces explications sont claires !!!
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3054
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: TUTO: programmation du [ EF-9345 ] ALICE/VG/MINITEL

Message par Papy.G »

Merci beaucoup pour ce détail plus concis que la doc, par endroits soporifique.

Pour TGS b, choix du buffer Y0 ou 1 pour l'afficher, Y1 n'est utilisable qu'en 40 colonnes variable (avec un attribut de 8 octets me dit la doc)

YOR inférieur à 8 pourrait causer un plantage, l'incrémentation ne se fait que de 8 à 31, puis revient à 8, selon la doc, dont le schéma est clair à ce sujet, Y0 et 1 ne servent que pour la ligne d'état.
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: TUTO: programmation du [ EF-9345 ] ALICE/VG/MINITEL

Message par joaopa »

Il faudrait préciser que pour le registre ROR, les trois bits de poids forts ne sont pas donnés dans l'ordre habituel mais dans celui-ci
(inversion des deux bits de poids faibles)
Par exemple pour mettre 4 dans aaa, il faut charger

ROR7 ROR6 ROR5 = 0 0 1 et non 0 1 0

De plus, pour la deuxième page, ne pas oublier d'ajouter 32 au numéro de colonne souhaitée.
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3054
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: TUTO: programmation du [ EF-9345 ] ALICE/VG/MINITEL

Message par Papy.G »

Non, le plus 32 vient du fait du déplacement du bit, tu enlèves 32 et tu ajoutes 64.
Attention, ROR ne contient que les adresses de blocs pairs, bit 1, 2, et 3, le bit 0 est ailleurs.
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: TUTO: programmation du [ EF-9345 ] ALICE/VG/MINITEL

Message par joaopa »

Papy.G a écrit :Non, le plus 32 vient du fait du déplacement du bit, tu enlèves 32 et tu ajoutes 64.
Que veux-tu dire?
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3054
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: TUTO: programmation du [ EF-9345 ] ALICE/VG/MINITEL

Message par Papy.G »

Bien, dans ton adressage, en inversant les bits, tu passes le 1 du bit 5 au 6 (pour pointer la page 2), donc, de 32 à 64, la valeur de l'octet se trouve augmentée de 32, le plus 32 vient de là.
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: TUTO: programmation du [ EF-9345 ] ALICE/VG/MINITEL

Message par joaopa »

Mais pourquoi cela justifie-t-il d'ajouter 32 au registre R6 (en commande longues) pour afficher quelque chose?
Répondre