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
6502man
Messages : 12327
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

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

Message par 6502man »

Suite à plusieurs questions pour savoir comment afficher ou définir des caractères avec l' EF-9345 je vous propose un tuto comment programmer l'EF-9345 (pour ce que je sais).

Pour commencer voici un tableau récapitulatif condensé pour bien comprendre l'EF-9345: VULGARISATION DU EF-9345

PARTIE 1
PARTIE 2
PARTIE 3


En premier lieu il faut bien comprendre (et c'est le plus dur avec l'EF9345) le système de blocs mémoire géré par ce VDP.
Avec l'Alice tu as 8K de VRAM découpé en 8 blocs d'1K de 25 tampons de 40 octets + 24 octets "fantome" soit :

Code : Tout sélectionner

    |          EF9345                     VRAM  8ko                                            |
    |-----------------------------------------|   ~~ |-----------------------------------------|
    |         bloc 1   1024octets             |   ~~ |          bloc 8 1024octets              |
    |-----------------------------------------|   ~~ |-----------------------------------------|
    |TAMPON1|24octets| .....|TAMPON25|TAMPON26|   ~~ |TAMPON1|24octets| .....|TAMPON25|TAMPON26|
    |$0000                               $0400|   ~~ |                                    $2000|
Ensuite attention car la numérotation des tampons est bizaroid :lol: :lol:
Les numéros de tampons sont adressé par Y (du Ef9345) :

Code : Tout sélectionner

    |             détail d'un BLOC de 1 Ko  (1024 octets)                    |
    |------------------------------------------------------------------------|
    | TAMPON1  | TAMPON2  | TAMPON3  | TAMPON4  | ~~ | TAMPON25  | TAMPON26  |
    | Y=0      | Y=1      | Y=8      | Y=9      | ~~ | Y=30      | Y=31      |
    | 40 octets| 24 octets| 40 octets| 40 octets| ~~ |  40 octets|  40 octets|

Code : Tout sélectionner

Tampon : 1 2 3 4 5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
     Y : 0 1 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31


En résumé Z=BLOC Y=TAMPON X=OCTET dans le TAMPON :roll:

Par exemple si tu veux accéder à l'octet 10 stocké dans le 3eme tampon du 2eme bloc :
Attend je calcul Z=1 Y=8 X=09 :wink:

Avec tous ces éléments nous pouvons commencer à faire un premier programme en assembleur:
Nous allons faire au plus simple pour bien comprendre le fonctionnement du VDP.
Nous n'allons pas initialiser les registre DOR, MAT,PAT,TGS pour l'instant, pour pouvoir rester le plus simple possible, évidement pour faire un programme correcte il faudrait initialiser ces registres en premier. :wink:
AFFICHER UN CARACTERE en mode 40 colonnes bichrome:
Le code pour ALICE 32/90:

Code : Tout sélectionner

;déclarations :
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

;Programme:
AFFICHE_1_CARA
	LDD #$6501 			;	selectionne le caractère et le jeu
	STD R1
	LDAA #$34			;	attribut du caractère
	STAA R3	
	LDAA #18			;	ligne
	STAA R6
	LDAA #20			;	colonne
	STAA R7
	
	LDAA #$00			;	commande  KRF
	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	
pour le Minitel à base de 8032/8052

Code : Tout sélectionner

    
    ;déclarations :
    9345_R0      .EQU   $8020
    9345_R1      .EQU   $8021
    9345_R2      .EQU   $8022
    9345_R3      .EQU   $8023
    9345_R4      .EQU   $8024
    9345_R5      .EQU   $8025
    9345_R6      .EQU   $8026
    9345_R7      .EQU   $8027
    9345_EXEC    .EQU   $08  ($8028 à $802F)
Assembler le programme et vous aurez un beau 'e' jaune dans un carré bleu au milieu de l'écran :lol:

Explications: (aidez vous du tableau que je vous ai fournis) :wink:

Code : Tout sélectionner

LDD #$6500   =>  01100101 00000001
  si on regarde mon petit tableau  on voit que l'on accède au tampon 25 (01101) caractère 1 (01)
  ensuite pour R2 = 00000001 ce qui donne caractère standard, mono, jeu G0, taille normale, incrustation normale. 
STD R1          =>  stocke D dans R1 et R2  (D est un registre 16 bits)  ;)

Code : Tout sélectionner

LDAA #$34			;	attribut du caractère
  Pour les attributs du caractère  $34  -> 00110100 
  ce qui donne  normal, couleur de forme jaune(011), normal, couleur de fond bleu(100)
STAA R3
  les attributs toujours en R3

Code : Tout sélectionner

	LDAA #18			;	ligne
	STAA R6
	LDAA #20			;	colonne
	STAA R7
coordonnées ligne et colonne ou afficher le caractère 
ATTENTION pour la numérotation des lignes c'est très particulier: la ligne 0 est adressable par 0  mais pour les lignes 1 à 24 l'adressage se fait en additionnant 7 au numéro de ligne (par exemple ligne 11 : 11 +7  = 18).

Code : Tout sélectionner

LDAA #$00			;	commande  KRF
STAA R0+EXEC
  pour finir on envoi la commande et comme il n'y a qu'une commande on demande en même temps son exécution  (+EXEC).
  KRF est court et rapide dans le cas présent  écriture, affiche un caractère seulement, pas d’incrémentation
JSR BUSY			;	saute à la routine BUSY
  on attend que la commande soit fini d'être exécuté par le VDP
Voila j’espère que les explications sont claires :roll:
N'hésitez pas a faire des commentaires si cela est encore trop absconse :wink:

Pour voir si tout le monde à bien compris ( oui même toi qui te cache au fond de la classe :lol: ):
Donnez moi la valeur de R1, R2, R3 R6 et R7 pour afficher le caractère 3 du tampon 5 du jeu G0 en double hauteur double largeur, écriture cyan fond rouge, clignotant, affiché a la ligne 1 colonne 23 !

A vos cahiers
:lol:

PARTIE 2
Dernière modification par 6502man le 11 févr. 2015 23:00, modifié 11 fois.
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 topic dédié. ;)

Cependant, j'insiste, si le tampon 3 est en Y8, le tampon en Y31 est le 26°, ou alors, il y a discontinuité quelque part.

Tu risques d'embrouiller des gens avec tes listings de logiciels assembleurs.

Je vais donc tenter l'exercice, en me basant sur la doc du VDP:

On n'utilise pas Y1 pour les sets de caractères perso (j'imagines que tu parlais de G'0), donc le tampon 5 sera Y=11 soit commençant par le caractère 44d, donc le 3 est le quatrième, soit caractère 47d (2Fh), on suppose que l'on utilise le mode 24 bit avec une page-écran au début de la VRam et avec une page non scrollée (ligne 1 en Y8).

R1=2F R2=8A R3=69 R6=08 R7=17
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
PcKid
Messages : 538
Inscription : 17 sept. 2011 19:00

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

Message par PcKid »

Merci pour ce tuto , c'est très utile , le ton est très sympa , ca fait plaisir.

Recherche : Jeux et livres pour Alice Matra
* * * * * * Contactez - moi !* * * * * * *

Avatar de l’utilisateur
6502man
Messages : 12327
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

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

Message par 6502man »

Papy.G a écrit :Cependant, j'insiste, si le tampon 3 est en Y8, le tampon en Y31 est le 26°, ou alors, il y a discontinuité quelque part.
Oups j'ai commis une erreur sur le tableau ci dessus il y a bien 25 tampon et le 25ème est bien 31 mais il est incomplet (24 octets) :oops:
J'ai rectifé :roll:

NON J'AI REMIS COMME C'ETAIT AU DEPART, C'ETAIT EXACTE.
j'ai rajouté un tableau pour la correspondance des tampon et Y.
Papy.G a écrit :Tu risques d'embrouiller des gens avec tes listings de logiciels assembleurs.
Si tu veux que de la théorie alors il faut lire le DATASHEET ;)
Dans le cas présent j'essaie de répondre aux questions que l'on m'a posées comme (comment afficher un caractère en assembleur sur ALice32/90, comment redéfinir un caractère, comment est organiser la VRAM,...) :wink:
Et donc les exemples concrets pour bien comprendre comment implémenter les spécification du VDP sur la machine cible (Alice dans l'exemple).

Papy.G a écrit :On n'utilise pas Y1 pour les sets de caractères perso (j'imagines que tu parlais de G'0),
Le jeu de caractère est bien le G0 (le générateur standard du EF-9345), on verra après pour les caractères redefinis par l'utilisateur :wink:


La correction de l'exercice plus tard si d'autres personnes veulent ce prêter au jeu :wink:
Dernière modification par 6502man le 25 sept. 2014 20:55, modifié 1 fois.
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 »

Donc, si le 25° est en Y31, le 3 ne peut pas être en Y8, il suffit d'observer la parité pour s'en convaincre (je m'embrouille dans les calculs pour déterminer... :oops:)
Comme l'on peut utiliser Y0 ou Y1 que pour la ligne d'état, il faut 24 autres buffers, donc bien 26 en tout. :wink:

A lire le datasheet, il me semblait que c'était Y1, qui ne ferait que 24 octets, du coup, il est partiellement invisible dans les blocs impairs, pour apparaître complet et utilisable dans les blocs pairs. :?

Extrait du datasheet Thomson et traduit par moi-même un peu à l'arrache:
"Evidemment, 1k=2^10=1024 ne peut pas être divisé exactement par 40. Par conséquent, chaque bloc contient 25 buffers complets et un reste de 24 octets. Pourvu que la mémoire physique soit un multiple de 2koctets, les restes sont appairés de façon à rendre disponible:
Un buffer complet (Y=1) dans chaque bloc pair
Un buffer partiel (Y=1; X=32 à 39) dans chaque bloc impair" (les huits octets restants de la jonction des 2x24)

Je pense que comme on ne peut se servir de Y1 que pour la ligne d'état, autant ignorer ce buffer, sauf dans des cas de bidouillages extrêmes.

Il y a un assembleur intégré dans le Alice, pour saisir directement comme tu le fais, ou c'est uniquement un programme sur cassette/compilateur sous Windows?

Du coup, si l'on est en Standard, on ne se pose plus la question de savoir si le caractère que l'on veut est le caractère 3 du tampon 5, on regarde dans la table des caractères pour avoir son code directement, non? :mrgreen:

Faut que j'arrête de rouziner, et que je tente le coup sur un EEprom sur Minitel. :oops:
En même temps, dans l'immédiat, ma seule manière de programmer serait un breadboard et du fil... :lol:
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
PcKid
Messages : 538
Inscription : 17 sept. 2011 19:00

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

Message par PcKid »

Salut Papy

Tu as un assembleur incorporé dans alice, et tu peux utiliser l'emulateur de daniel pour faire des tests direct de ce que tu dis :

http://alice32.free.fr/index.html

Recherche : Jeux et livres pour Alice Matra
* * * * * * Contactez - moi !* * * * * * *

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 »

Oui, mais mon but est d'apprendre pour le Minitel, et passer sous Windows me gonfle (ma partoche Bootcamp est vérolée... :roll:).
Quoique, porter la rom Alice sur 8052 pourrait être un challenge intéressant.
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 : 12327
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

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

Message par 6502man »

Oui tu as raison c'est bien le TAMPON 2 ( Y=1) qui est 'fantom' OUPS :oops:
Je fais la modif, désolé pour t'avoir embrouillé sur ce coup là :twisted:

On va y arriver.
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
6502man
Messages : 12327
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

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

Message par 6502man »

Concernant le VG5000: quelles sont les adresses d'entrées du EF-9345 ?

@papy.G:Pour le minitel est ce que tu connais le mappage mémoire et les adresses d'entrées ou vecteurs du EF-9345 ?
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 »

Pas de problème, c'est l'intérêt même de ce forum, partager et corriger mutuellement nos erreurs.

Dans celui avec 8032 et carte-fille Rom, il y a des circuits logiques (74LS373N, 74LS244N, 74LS00N), pour le demux des adresses pour la rom (accès Code) et la réorientation non demux de Q0 à Q7 de retour vers la carte-mère pour les périphériques (accès Xram) j'imagine, c'est A15 qui donne le CE du 9345, sur celui avec 8052, il y a des shunts directs vers Q0 à Q7, et le CE est shunté toujours activé pour L' EF9345.
J'en suis pas au matériel, mais je pense oublier A15 pour activer le 9345, mettre le CE actif dès que l'on réoriente vers les périphériques sur la carte-mère. Ca n'a pas l'air de gêner dans l'autre, et je ne veux pas sacrifier 32ko d'adressage juste pour ça.
Donc, dans celui où je vais faire mes premiers tests, ce sera typiquement 8020 à 802F dans la pratique, bien qu'en fait, c'est plutôt 1xxxxxxxxx1xyzzz en binaire où x est indifférent, y la commande d'exécution, et z l'adresse du registre. Je mettrais un peu de logique s'il y a nécessité de limiter les périphériques à la page 0, notamment si je ne fais pas de "switch" Ram/Périphs.
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
Carl
Modérateur
Messages : 13297
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

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

Message par Carl »

Phil, merci merci le Tuto

>> VG5000
vg1.jpg
vg1.jpg (158.57 Kio) Consulté 7687 fois
Avatar de l’utilisateur
Carl
Modérateur
Messages : 13297
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

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

Message par Carl »

>> VG5000
vg2.jpg
vg2.jpg (248.11 Kio) Consulté 7686 fois
Avatar de l’utilisateur
6502man
Messages : 12327
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

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

Message par 6502man »

@Papy.G: si je comprends bien le mappage mémoire serait:
Q0 à Q7 donc de $0000 à $FFFF mais certainement limité à certaines plages pour les programmes Q0 à Q3 certainement puisque l'accès au VDP est en $8020 à $802F qui est en Q4 (corrige moi si c'est inexacte car je ne connais ni le minitel ni le 8032/8052) ?

Donc on peut déjà mettre les equates .

Code : Tout sélectionner

pour le Minitel à base de 8032/8052
;déclarations :
R0      .EQU   $8020
R1      .EQU   $8021
R2      .EQU   $8022
R3      .EQU   $8023
R4      .EQU   $8024
R5      .EQU   $8025
R6      .EQU   $8026
R7      .EQU   $8027
EXEC    .EQU   $08  ($8028 à $802F)
pour le code c'est pas la peine il faut absolument définir les registres DOR, MAT, PAT,... en premier pour le minitel je pense.
Donc on verra après...


--------------------------------------------------------------------
@Carl: Merci pour les infos.

Donc pour le VG5000 on accéder au VDP par 2 port $8F et $CF, et je suppose que $8F pour le numéro de registre et $CF pour la données (grosse supposition) A VALIDER
à ton des docs sur la programmation du VG5000 en assembleur pour vérifier ce point ou un spécialiste du VG5000 aurait la réponse ?
Phil.

www.6502man.com

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

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

Message par Carl »

>> VG5000
01.jpg
01.jpg (298.39 Kio) Consulté 7674 fois
02.jpg
02.jpg (268.13 Kio) Consulté 7674 fois
03.jpg
03.jpg (303.51 Kio) Consulté 7674 fois
04.jpg
04.jpg (315.58 Kio) Consulté 7674 fois
05.jpg
05.jpg (71.67 Kio) Consulté 7674 fois
Avatar de l’utilisateur
Carl
Modérateur
Messages : 13297
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

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

Message par Carl »

>> VG5000
001.jpg
001.jpg (263.42 Kio) Consulté 7674 fois
002.jpg
002.jpg (234.45 Kio) Consulté 7674 fois
Répondre