Bug EF9345 sur VG5000?

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

Répondre
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Bug EF9345 sur VG5000?

Message par joaopa »

Bonjour,

essayant de corriger le problème de caractères manquants sur mon jeu Tetris pour VG5000, je me suis rendu compte qu'ils étaient bien présents mais cachés.

Explication: la couleur de l’écran est noir. Mes caractères sont noirs sur un fond blanc (permis en mode 40 colonnes). Mais l'EF9345 ne prend pas en compte le fond blanc. Du coup je me retrouve avec des caractères noirs sur fond noir (le fond d'ecran).

J'ai testé ma théorie sur cet exemple minimal: marge bleue, ecran noir, affichage d'un A blanc sur fond rouge
WRITE "essai.bin"
org &5000

main:
DI
PUSH HL
PUSH IX

LD D, &21
LD E, &01
CALL EF9345
LD D, &28
LD E, &81
CALL EF9345; ecrire dans le registre TGS (commandes longues)

LD D, &21
LD E, &47
CALL EF9345
LD D, &28
LD E, &83
CALL EF9345; ecrire dans le registre PAT

LD D, &21
LD E, &04
CALL EF9345
LD D, &28
LD E, &82
CALL EF9345; ecrire dans le registre MAT

LD D, &22
LD E, &01
CALL EF9345

LD D, &23
LD E, &71
CALL EF9345

LD D, &21
LD E, 65
CALL EF9345

LD D, &26
LD E, 10
CALL EF9345

LD D, &27
LD E, 10
CALL EF9345

LD D, &28
LD E, &00
CALL EF9345

boucle_sans_fin:
JP boucle_sans_fin

POP IX
POP HL
EI

EF9345:
CALL &0286; teste si EF935 est pret
CALL &0D7C; ecrit dans EF9345
RET



Sur l'émulateur DCVG5K, on a bien ce que l'on espérait. Sur ma vraie machine, j'obtiens la marge bleue, le fond d'écran noir, le A blanc mais pas le fond rouge du A.

Quelqu'un peut-il confirmer sur une vraie machine? Mieux encore si quelqu'un pouvait adapter ce programme sur une vraie machine Alice.

Ou alors quelqu'un voit-il une erreur dans mon programme qui empeche l'affichage du fond rouge?
Dernière modification par joaopa le 20 déc. 2013 18:42, modifié 3 fois.
Markerror
Messages : 2121
Inscription : 31 oct. 2011 19:21
Localisation : Orléans
Contact :

Re: Bug EF9345 sur VG5000?

Message par Markerror »

Bonsoir,

J'avoue que l'EF9345 reste un grand mystère pour moi. A chaque fois que je regarde un source, je n'y comprend rien :-(. Je veux bien tester sur une vraie machine mais je ne vois pas pourquoi cela fonctionnerait mieux que sur ton VG5000 (à ce propos, ta machine est dans le recensement des numéros de série de VG5000 ?) Si ce n'est pas le cas, je suis preneur de cette info.

Pour ton exemple, ça serait peut-être pas mal d'expliquer chaque paramètre. Ca permettrait peut-être de mettre le doigt sur le problème.

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

Re: Bug EF9345 sur VG5000?

Message par Daniel »

Même après l'avoir émulé deux fois (Alice 32/90 et VG5000), je ne maîtrise toujours pas parfaitement l'EF9345.
C'est pourquoi je peux dire qu'en cas de différence entre dcvg5k et le VG5000, ce n'est pas dans ce dernier qu'il faut chercher le bug :wink:
Sauf si c'est une panne matérielle. On doit pouvoir tester le bon fonctionnement de la couleur de fond avec quelques lignes de Basic.
Daniel
L'obstacle augmente mon ardeur.
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: Bug EF9345 sur VG5000?

Message par joaopa »

Bon, j'ai fixé le problème. Il est dans le registre PAT. Il faut mettre &67 au lieu de &47. L'inconvénient c'est que je ne sais toujours pas pourquoi. La doc de l'EF9345 est incompréhensible sur ce sujet.

Toujours est-il que l'émulateur s'en contente très bien.

Autrement, en passant, je suis content. JPar pur hasard, j'ai réussi à corriger l'image sur une télé 60Hz. C'est dans le registre TGS que cela se passe. Ca serait cool si j'arrivais a trouver la routine a modifier pour pouvoir utiliser mon VG5000 sur cette télé.
Markerror
Messages : 2121
Inscription : 31 oct. 2011 19:21
Localisation : Orléans
Contact :

Re: Bug EF9345 sur VG5000?

Message par Markerror »

Bon, je sais pas si cela peut t'aider, mais dans Glouton, on trouve ça. Ca ressemble à une séquence d'initialisation de l'EF9345 non ?

;751E: LD C,&CF
;7520: LD A,&20
;7522: OUT (&8F),A
;7524: IN A,(C)
;7526: JP M,&7524

;7529: LD A,&21
;752B: OUT (&8F),A
;752D: LD C,&CF
;752F: OUT (C),D
;7531: LD A,E
;7532: OR &80
;7534: LD E,A
;7535: CALL &750C
;7538: RET

; Envoi d'une chaine de datas a l'EF9345, a valider.

;7573: LD HL,&7582
;7676: LD B,&5
go_51_01:
;7578: LD E,(HL)
;7579: INC HL
;757A: LD D,(HL)
;757B: CALL &751E
;757E: INC HL
;757F: DJNZ go_51_01
;7581: RET
;7582: DB &01,&00,&02,&10,&03,&F6,&04,&13,&07,&08
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Bug EF9345 sur VG5000?

Message par Daniel »

joaopa a écrit :Ca serait cool si j'arrivais a trouver la routine a modifier pour pouvoir utiliser mon VG5000 sur cette télé.
C'est très facile : la routine d'initialisation de l'EF9345 est en 1052h. Elle envoie la chaine de commandes qui se trouve à l'adresse 1179h sur une longueur 1Ah. Il suffit de modifier cette chaîne. Après, je ne sais pas si la ROM est sur support et si on peut la remplacer par une EPROM (tous mes VG5000 sont bien rangés et pas facilement accessibles). Mais les spécialistes vont nous le dire :wink:

Code : Tout sélectionner

104f 217911    ld      hl,1179h       sequence de commandes EF9345 (long=1A)
1052 cdef02    call    02efh          envoi commandes EF9345

Code : Tout sélectionner

1170 4f 34 43 4f 33 47 45 43 22 1a 28 81 29 00 20 82   O4CO3GEC".(.). .
1180 29 6e 20 83 29 f7 20 84 29 13 20 87 29 08 26 08   )n .). .). .).&.
1190 27 00 28 02 c3 3f 11 c3 67 25 d6 00 6f 7c de 00   '.(..?..g%..o|..
11a0 67 78 de 00 47 3e 00 c9 00 00 00 35 4a ca 99 39   gx..G>.....5J..9
11b0 1c 76 98 22 95 b3 98 0a dd 47 98 53 d1 99 99 0a   .v.".....G.S....
11c0 1a 9f 98 65 bc cd 98 d6 77 3e 98 52 c7 4f 80 db   ...e....w>.R.O..
11d0 00 c9 00 00 00 00 00 00 00 00 d3 11 45 18 17 18   ............E...
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
Carl
Modérateur
Messages : 13253
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: Bug EF9345 sur VG5000?

Message par Carl »

sur sur les miens, il y a un support...

Image
Markerror
Messages : 2121
Inscription : 31 oct. 2011 19:21
Localisation : Orléans
Contact :

Re: Bug EF9345 sur VG5000?

Message par Markerror »

Ah la la, vous n'allez pas sur mon site ou quoi :-).

Les 800 premiers VG5000 produits avaient une EPROM contenant le système et le Basic.

Carte mère Basic 1.0
EPROM 16ko : Intel D27128 L4263649S
puce vidéo : Thomson EFX9345P

En jetant un oeil rapide sur E-bay, j'avais même retrouvé ce modèle. Seul test que je n'ai pas fait, c'est mettre cette eprom sur une carte mère 1.1, mais je ne vois pas pourquoi cela ne fonctionnerait pas. Le plus dur, ça va être de trouver un programmateur d'eprom, mais mon petit doigt me dit qu'il y a pas mal de gars ici qui en ont :wink: .
Avatar de l’utilisateur
fneck
Site Admin
Messages : 17424
Inscription : 01 avr. 2007 12:03
Localisation : Drôme Provençale (26)
Contact :

Re: Bug EF9345 sur VG5000?

Message par fneck »

Et s'il s'agit de faire avancer la science, on est toujours prêt à participer :D
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Avatar de l’utilisateur
Carl
Modérateur
Messages : 13253
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: Bug EF9345 sur VG5000?

Message par Carl »

Surtout la science du VG5000 :wink:

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

Re: Bug EF9345 sur VG5000?

Message par Daniel »

J'ai bien une EPROM et un programmateur, mais pas de téléviseur 60Hz pour tester :cry:
Daniel
L'obstacle augmente mon ardeur.
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: Bug EF9345 sur VG5000?

Message par joaopa »

Markerror, quel desassembleur utilises-tu? Il a l'air de reconnaitre l'entrée de données.


;757F: DJNZ go_51_01
;7581: RET
;7582: DB &01,&00,&02,&10,&03,&F6,&04,&13,&07,&08


Le mien ne sait pas le faire. Pour analyser le code c'est lourdingue....
Markerror
Messages : 2121
Inscription : 31 oct. 2011 19:21
Localisation : Orléans
Contact :

Re: Bug EF9345 sur VG5000?

Message par Markerror »

Hum, J'ai dû faire ça avec avec Winape, mais je n'en suis pas sûr. Il permet de définir des zones de données, mais
je ne crois pas que c'est super pratique en fait.
J'avais retapé sérieusement le source de toute façon, ça ne te donnera probablement pas quelque chose de propre.
Lorsque j'avais fait des désassemblages de quelques jeux VG5000, je n'avais pas trouvé LE désassembleur parfait...
Avatar de l’utilisateur
Dominique
Messages : 828
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: Bug EF9345 sur VG5000?

Message par Dominique »

Pour le Forth du VG5000 on pouvait choisir les scripts de cette façon :

Code : Tout sélectionner

0061   5287             script_40col_copie:
0062   5287 1E                 	db 1Eh                                 	;  'Longueur Script'
0063   5288 28 81 29    	db  $28, $81, $29 
0064   528B             data_tgs40:
0065   528B 00          	db  $00, 
0066   528C 20 82 29    	db  $20, $82, $29 
0067   528F             data_mat40:
0068   528F 2E          	db  $2E, 
0069   5290 20 83 29    	db  $20, $83, $29 
0070   5293             data_pat40:
0071   5293 77          	db  $77 
0072   5294 20 84 29    	db  $20, $84, $29 
0073   5297             data_dor40:
0074   5297 13          	db  $13, 
0075   5298 20 87 29    	db  $20, $87, $29 
0076   529B             data_ror40:
0077   529B 08          	db  $08
0078   529C 22          	db  $22 
0079   529D             data_r240:
0080   529D 01          	db  $01
0081   529E 23          	db  $23 
0082   529F             data_r340:
0083   529F 06          	db  $06
0084   52A0 26          	db  $26 
0085   52A1             data_r640:
0086   52A1 08          	db  $08 
0087   52A2 27          	db  $27 
0088   52A3             data_r740:
0089   52A3 00          	db  $00
0090   52A4 28          	db  $28 
0091   52A5             data_krf40:
0092   52A5 00          	db  $00
0093   52A6             
0094   52A6             script_80col_copie:
0095   52A6 1E                 	db 1Eh                                 	;  'Longueur Script'
0096   52A7 28 81 29    	db  $28, $81, $29 
0097   52AA             data_tgs80:
0098   52AA C0          	db  $c0, 
0099   52AB 20 82 29    	db  $20, $82, $29 
0100   52AE             data_mat80:
0101   52AE 2E          	db  $2E, 
0102   52AF 20 83 29    	db  $20, $83, $29 
0103   52B2             data_pat80:
0104   52B2 77          	db  $77 
0105   52B3 20 84 29    	db  $20, $84, $29 
0106   52B6             data_dor80:
0107   52B6 FA          	db  $FA, 
0108   52B7 20 87 29    	db  $20, $87, $29 
0109   52BA             data_ror80:
0110   52BA 08          	db  $08
0111   52BB 22          	db  $22 
0112   52BC             data_r280:
0113   52BC 01          	db  $01
0114   52BD 23          	db  $23 
0115   52BE             data_r380:
0116   52BE 06          	db  $06
0117   52BF 26          	db  $26 
0118   52C0             data_r680:
0119   52C0 08          	db  $08 
0120   52C1 27          	db  $27 
0121   52C2             data_r780:
0122   52C2 00          	db  $00
0123   52C3 28          	db  $28 
0124   52C4             data_krf80:
0125   52C4 00          	db  $00
0126   52C5             
0127   52C5             
0128   52C5             
0129   52C5             lire_script:				; Adresse dans HL
0130   52C5             
0131   52C5 E5          	push	hl
0132   52C6 11 16 00    	ld	de, $0016
0133   52C9 19          	add	hl, de
0134   52CA 7E          	ld	a,(hl)
0135   52CB 32 32 52    	ld	(copie_R2),a
0136   52CE 11 02 00    	ld	de,$0002
0137   52D1 19          	add	hl,de
0138   52D2 7E          	ld	a,(hl)
0139   52D3 32 33 52    	ld	(copie_R3),a
0140   52D6 E1          	pop	hl
0141   52D7 C5          	PUSH	BC
0142   52D8 CD EF 02    	CALL	$02ef
0143   52DB C1          	POP	BC
0144   52DC C9          	RET
Les adresses copie_R2 et _R3 étaient utilisées par la routine d'impression car l'un représentait la couleur du caractère et l'autre sa couleur de fond. Dans ton cas tu n'en as pas besoin et tu peux éliminer de 0131 à 0140
Répondre