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

Daniel
Messages : 17412
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

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

Message par Daniel »

Je doute que tu puisses avoir une réponse immédiate, car l'EF9345 est tellement imprévisible qu'on ne pourra pas savoir sans tester.

L'essai peut se faire par exemple, sur Alice32 ou VG5000. Le comportement des émulateurs dcalice et dcvg5k ne doit pas être pris comme référence, car j'ai programmé ce que supposais, et l'EF9345 fait rarement ce que l'on suppose. Test impératif sur les vraies machines.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
6502man
Messages : 12312
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

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

Message par 6502man »

L'idée est intéressante il faudrait faire un programme pour la vérifier :D
Phil.

www.6502man.com

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

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

Message par Papy.G »

Bon, réponse à moi-même, il semble que le mode loupe (Mat b7) double vraiment toutes les lignes, contrairement au mode hauteur de caractère doublée. Reste à vérifier les interactions avec les bits d'activation de bloc supérieur/inférieur, il semble que la première ligne affichée soit la même qu'en mode normal (YOR, ROR B4~0).
J'y ai réfléchi plus avant, c'est intéressant pour un scrolling horizontal, mais lors d'un scrolling vertical, on a un pas qui devient double, ce qui pourrait nuire à la fluidité.

Par contre, j'ai besoin de l'aide de personnes ayant déjà désassemblé les Roms de VG5000 et/ou Alice32/90, le processeur attends-il un peu à froid avant de réinitialiser le 9345, dans la datasheet, ils ne parlent que d'envoyer un NOP avant toute info, mais ils ne disent pas combien de temps met le composant à être prêt à la mise sous tension.
J'arrive à rien avec mon programme sur Minitel, j'ai remis mon EEPROM dedans, et un quartz à 6Mhz sur le 8032, toujours rien ne marche, peut-être fais-je l'initialisation du VDP trop tôt.
Ou, connerie de débutant, le fait de mettre un quartz plus lent sur un µC ne baisse pas ses exigences en termes de temps de montée, pour la mémoire programme? :oops:

Peut-être des mauvais contacts, je parviens à voir des choses affichées parfois, mais pas les caractères que je voulais, et pas dans le bon mode, maintenant que j'ai un PC à peu près sur pieds, je vais me pencher sur le simulateur suggéré par Phil, pour contrôler que mon code est vraiment valide, toutefois, et essayer de décoder la Rom d'origine du minitel, notamment pour trouver en quel mode le 9345 est initialisé.
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
network
Messages : 23
Inscription : 04 mai 2015 07:30

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

Message par network »

Bonjour,

Petite précision, le bit7 du registre MAT ne double pas toute les lignes, la ligne de service donc la première en haut de l'écran ne subit aucune modification, et les 24 prochaines sont effectivement en double largeur. Le fait que la ligne de service ne double pas de taille permet ensuite d'afficher correctement les 12 caractères suivant en double hauteur.

Non, il n'y a pas de temps d'attente au regard de la vitesse du micro que tu utilises, si tu n'as pas d'affichage ou des choses incohérentes, alors il est probable que soit tu as un problème d'interface électronique ou bien tes registres d'initialisations sont mauvais. Si cela peut te servir, tu trouveras ci-joint le désassemblage de l'init d'un ALICE90 que j'ai fais via IDA.

Code : Tout sélectionner

ROM:F72E Entry_Point:                            ; CODE XREF: sub_D724+21J
ROM:F72E                                         ; sub_E21E-99CJ
ROM:F72E                 ldaa    #$FF
ROM:F730                 staa    DDRA
ROM:F732                 ldaa    #1
ROM:F734                 staa    DDRB
ROM:F736                 ldaa    #1
ROM:F738                 staa    PORTB
ROM:F73A                 ldaa    byte_EA
ROM:F73C                 cmpa    #$55 ; 'U'      ; Si l'accu A est à $55 alors un RESET à déja eu lieu, on saute
ROM:F73C                                         ; donc les étapes d'initialisations
ROM:F73E                 bne     loc_F74A
ROM:F740                 ldx     byte_3221
ROM:F743                 ldaa    0,x
ROM:F745                 deca
ROM:F746                 bne     loc_F74A
ROM:F748                 jmp     0,x
ROM:F74A ; ---------------------------------------------------------------------------
ROM:F74A
ROM:F74A loc_F74A:                               ; CODE XREF: sub_E21E+1520j
ROM:F74A                                         ; sub_E21E+1528j
ROM:F74A                 jmp     loc_D748
ROM:F74D ; ---------------------------------------------------------------------------
ROM:F74D
ROM:F74D loc_F74D:                               ; CODE XREF: sub_E21E-ACDJ
ROM:F74D                                         ; sub_E21E+1535j
ROM:F74D                 clr     0,x
ROM:F74F                 inx
ROM:F750                 cpx     #$100
ROM:F753                 bne     loc_F74D
ROM:F755                 ldx     #$31FD
ROM:F758
ROM:F758 CalculateUserRAMSize:                   ; CODE XREF: sub_E21E+1545j
ROM:F758                 inx                     ; Calcul de la longueur de la RAM utilisateur
ROM:F759                 ldaa    2,x
ROM:F75B                 com     2,x
ROM:F75D                 ldab    2,x
ROM:F75F                 clr     2,x
ROM:F761                 coma
ROM:F762                 cba
ROM:F763                 beq     CalculateUserRAMSize
ROM:F765                 stx     ENDMM           ; Ecriture de la taille de la RAM utilisateur
ROM:F768                 stx     byte_A1
ROM:F76A                 stx     byte_9D
ROM:F76C                 ldd     byte_9D
ROM:F76E                 subd    #$64 ; 'd'
ROM:F771                 std     byte_9B
ROM:F773                 lds     byte_9B
ROM:F775                 ldx     #$F7CF
ROM:F778                 ldd     #$EB ; 'Ù'
ROM:F77B                 bsr     sub_F7AD
ROM:F77D                 ldx     #$F7DE
ROM:F780                 ldd     #$3200
ROM:F783                 bsr     sub_F7AD
ROM:F785                 ldaa    #$39 ; '9'
ROM:F787                 ldx     #$3285
ROM:F78A
ROM:F78A loc_F78A:                               ; CODE XREF: sub_E21E+1572j
ROM:F78A                 staa    0,x
ROM:F78C                 inx
ROM:F78D                 cpx     #$32AF
ROM:F790                 bne     loc_F78A
ROM:F792                 com     unk_32AF
ROM:F795                 ldx     #$3346
ROM:F798                 stx     TXTAB
ROM:F79A                 jsr     sub_E3CF
ROM:F79D                 jsr     InitMode32or40  ; Initialisation du mode 32 ou 40 colonnes
ROM:F7A0                 ldx     #$F80F          ; Table des caractères de bienvenue à l'écran
ROM:F7A3                 jsr     OUTTX
ROM:F7A6                 ldaa    #$55 ; 'U'
ROM:F7A8                 staa    byte_EA         ; Le RESET materiel est fini, la valeur $55 évitera lors du prochain reset de relancer toutes les phases d'initialisation
ROM:F7AA
ROM:F7AA loc_F7AA:                               ; CODE XREF: ROM:F7CDj
ROM:F7AA                 jmp     loc_E271
ROM:F7AA ; END OF FUNCTION CHUNK FOR sub_E21E
Puis le code de la routine d'initialisation du mode 32/40 de l'EF9345

Code : Tout sélectionner

ROM:D465 ; =============== S U B R O U T I N E =======================================
ROM:D465
ROM:D465
ROM:D465 Init_Register_Mode32:                   ; CODE XREF: j_Init_Register_Mode32J
ROM:D465                 ldx     #$D4A4          ; Adresse table register mode 32
ROM:D468                 bsr     Init_Register
ROM:D46A                 clra
ROM:D46B                 clrb
ROM:D46C                 staa    R1
ROM:D46F                 staa    R3
ROM:D472                 std     R6
ROM:D475                 inca
ROM:D476                 staa    R2
ROM:D479                 staa    R0_EXEC
ROM:D47C
ROM:D47C loc_D47C:                               ; CODE XREF: Init_Register_Mode80+29J
ROM:D47C                 bsr     BUSY
ROM:D47E                 clra
ROM:D47F                 std     R6
ROM:D482                 incb
ROM:D483                 std     R4
ROM:D486                 ldaa    #$F5 ; '§'
ROM:D488                 staa    R0_EXEC
ROM:D48B                 bsr     BUSY
ROM:D48D                 ldd     #$800
ROM:D490                 std     R6
ROM:D493                 ldaa    #$FA ; '·'
ROM:D495                 staa    R0_EXEC
ROM:D498                 ldx     #$A00
ROM:D49B
ROM:D49B Tempo:                                  ; CODE XREF: Init_Register_Mode32+37j
ROM:D49B                 dex
ROM:D49C                 bne     Tempo
ROM:D49C ; End of function Init_Register_Mode32

ROM:D4A3 ; ---------------------------------------------------------------------------
ROM:D4A4                 fcb $10, $81            ; Initialisation du registre TGS
ROM:D4A6                 fcb $28, $82            ; Initialisation du registre MAT
ROM:D4A8                 fcb $67, $83            ; Initialisation du registre PAT
ROM:D4AA                 fcb $13, $84            ; Initialisation du registre DOR
ROM:D4AC                 fcb 8, $87              ; Initialisation du registre ROR
ROM:D4AE ; ---------------------------------------------------------------------------
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3051
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, Je me suis repenché sur mon programme à l'aide de nouveaux outils, et si à la lumière de ces éclaircissements, rien ne marche encore, je me pencherais sur le code Z80 qui m'est totalement étranger actuellement.
Par ailleurs, ce mode 32 colonnes non documenté dans les datasheets m'intrigue, je suis assez curieux de voir de quoi il s'agit.
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
network
Messages : 23
Inscription : 04 mai 2015 07:30

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

Message par network »

Tu ne trouveras pas le mode 32 colonnes dans la datasheet parce qu’il n'existe pas. En fait ce mode est propre au fonctionnement des alices, c'est tout simplement un bornage de l'affichage réalisé logiciellement et qui est de 32 caractères par 16. Cet affichage découle du mode 40, qui lui est constitué de 40 caractères par 25, et qui est documenté dans la datasheet, puis l'autre mode documenté est l'affichage en 80 caractères par 25.
Avatar de l’utilisateur
David.G
Messages : 298
Inscription : 16 janv. 2024 00:02

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

Message par David.G »

@6502man : Merci pour ce tutoriel EF-9345 Phil, je viens de terminer la partie 1 et j'ai réussi à afficher le e minuscule jaune sur fond bleu.

Je vais faire l'exercice que tu proposes en partie 1, je pense y arriver. J'ai pu afficher en mode 32/40 cols un caractère double hauteur, double largeur, vidéo inversée et souligné. Mais pas en mode 80 cols...

Est-il possible d'afficher un caractère texte en vidéo inversée en mode 80 colonnes sur Alice ?
Je n'y parviens pas. La lettre s'affiche bien en vidéo inversée mais il y a toujours un caractère parasite à droite.
J'arrive à afficher ABC, mais un caractère parasite se mets entre les lettres, toujours à droite.

Si la vidéo inversée est impossible en mode 80 colonnes, puis-redefinir la lettre A ? Comme ça, j'inverse les points sur la matrice et cela donne de la vidéo inversée.

C'est pour mon éditeur Hexa ASCII afin de faire ressortir les octets actifs. Merci Phil :wink:
Daniel
Messages : 17412
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

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

Message par Daniel »

Remarque : Il faut tester avec un vrai EF9345. L'émulation de l'EF9345 dans dcalice est très approximative.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
David.G
Messages : 298
Inscription : 16 janv. 2024 00:02

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

Message par David.G »

Bonjour Daniel, je m'exprime mal en disant "parasite". C'est mon niveau qui est vraiment nul, je viens juste de commencer l'EF-9345 aujourd'hui. :)

Oui j'ai lu que tu disais que l'EF-9345 était très difficile à émuler. Bravo et merci pour ton émulateur en tous cas, je le trouve incroyable. :wink:

Je testerai sur la vraie machine autant que possible, d'accord. Je me demandais juste si on pouvais écrire en vidéo inversée (au lieu des minuscules
en mode 80 colonnes, CLS80 ou CLS81) et sinon comment redéfinir un caractère en mode 80 colonnes pour inverser les points de la matrice 8x10 du caractère.

Voici ce que j'obtiens : Je vois le caractère apparaître en vidéo inversée en mode 80 colonnes donc je me dis que c'est possible ?

- j'ai mis comme indiqué le bit 7 de $BF23 à 1 et ça fonctionne bien en mode 32 et 40 colonnes mais en mode 80 colonnes,
une petite lettre E accentuée se colle à droite. Ce que j'appelle "caractère parasite" faute de connaissance sur le sujet.

EDIT : je viens de me rendre compte que j'ai réussi à afficher 3 couleurs au lieu de 2 en mode 80 colonnes ! Du vert, du noir et du blanc.
Dernière modification par David.G le 04 avr. 2024 21:15, modifié 1 fois.
Duruti
Messages : 117
Inscription : 26 janv. 2024 19:43
Localisation : Haute-Loire
Contact :

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

Message par Duruti »

Salut
Si c'est possible en mode80 mais c'est pas les même commande que pour le mode40
Faut lire Les Astuces d'Alice à la page 105, c'est expliqué
Avatar de l’utilisateur
David.G
Messages : 298
Inscription : 16 janv. 2024 00:02

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

Message par David.G »

@Duruti : Je viens de relire le chapitre et j'ai réussi. Merci beaucoup. 3 couleurs au lieu de 2 en mode 80 colonnes, sympa. :)

Pas de la tarte cet EF-9345 ! Un peu alambiqué le truc, mais une fois qu'on a pigé le principe, ça va.

Tout du moins pour afficher les couleurs et les minuscules accentuées même en 40 colonnes, je suis bon.
La redef des cars on verra plus tard. :wink:
Avatar de l’utilisateur
6502man
Messages : 12312
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

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

Message par 6502man »

Oui en mode 80 colonnes il faut procéder autrement,
j'ai plus EN mémoire mais ca doit être dans le bouquin
les astuces d'alice comme l'indique Duruti.
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
David.G
Messages : 298
Inscription : 16 janv. 2024 00:02

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

Message par David.G »

@6502man : Oui j'ai trouvé comment faire. C'est cocasse le mode 80 colonnes,
je suis content d'avoir compris le truc, hier soir ça me rendait fou. :shock:
Ton exemple de programme en assembleur m'a bien aidé, merci, car le livre est bien mais très technique, un peu abstrait.

Je vais pouvoir créer un joli mode d'affichage et de navigation intuitif au clavier pour mon éditeur de secteurs,
en jouant sur la vidéo inversée pour passer d'une option à l'autre.
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3051
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

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

Message par Papy.G »

David.G a écrit : 04 avr. 2024 17:52La redef des cars on verra plus tard. :wink:
C'est tout vu: en 80col, c'est mort. :wink:
Tu ne peux utiliser que le jeu de caractères de base, et un mode "bitmap" (mosaïque).
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Répondre