Incompéhension EF9345
Modérateurs : Papy.G, fneck, Carl
Re: Incompéhension EF9345
Il est sensé faire quoi ton code?
- rendomizer
- Messages : 413
- Inscription : 17 juin 2016 21:00
- Contact :
Re: Incompéhension EF9345
Juste a afficher un setet défini en basic pour ensuite l'afficher avec les commandes tgs, pat, mat, dor et ror c'est tout
J'aimerai faire la même chose avec le mode multicolor...
J'aimerai faire la même chose avec le mode multicolor...
Je ne suis qu'un utilisateur pas un pro
Re: Incompéhension EF9345
La question était: en quelles coordonnées et avec quelles couleurs veux-tu afficher ton caractère?
- rendomizer
- Messages : 413
- Inscription : 17 juin 2016 21:00
- Contact :
Re: Incompéhension EF9345
Je voudrais afficher un caractère quelconque, défini avec setet, avec quatre couleurs, par exemple : jaune,rouge,bleu,blanc aux coordonnées x 39 et y 0.
Je ne suis qu'un utilisateur pas un pro
Re: Incompéhension EF9345
Voici ce que tu veux obtenir.
Par contre, tu ne peux utiliser la fonction setet en basic pour utiliser en quadrichrome. Il faut appeler la routine Z80 du VG5000 ui fait le boulot. C'est la routine placée à &001B
Ensuite, la routine tampon ne sert que pour l'initialisation de l'ef9345. Il ne faut pas l'utiliser pour remplir un registre EF9345. Pour cela, il y a d'autres routines (voir mon code)
J'ai même utilisé ton programme Basic (preuve de ma bonne volonté, pas comme toi)
Si tu comprends pas, là j'abandonne....
Il faut que tu joues sur les differentes valeurs données dans le codes pour voir ce qu'il se passe.
Essaie de changer les coordonnees d'affichage du caractere, ses couleurs
essaie de creer un deuxieme caractere et de l'afficher etc etc...
Et dernière chose, arrêtes de compresser avec ton format rar pourri et non libre.
Je détaille
Par contre, tu ne peux utiliser la fonction setet en basic pour utiliser en quadrichrome. Il faut appeler la routine Z80 du VG5000 ui fait le boulot. C'est la routine placée à &001B
Ensuite, la routine tampon ne sert que pour l'initialisation de l'ef9345. Il ne faut pas l'utiliser pour remplir un registre EF9345. Pour cela, il y a d'autres routines (voir mon code)
J'ai même utilisé ton programme Basic (preuve de ma bonne volonté, pas comme toi)
Si tu comprends pas, là j'abandonne....
Il faut que tu joues sur les differentes valeurs données dans le codes pour voir ce qu'il se passe.
Essaie de changer les coordonnees d'affichage du caractere, ses couleurs
essaie de creer un deuxieme caractere et de l'afficher etc etc...
Et dernière chose, arrêtes de compresser avec ton format rar pourri et non libre.
Je détaille
Code : Tout sélectionner
1 7000 ORG 7000H
2
3 7000 debut:
4 7000 F3 DI; desactiver les interruptions (pour evitement le rafraichissement de l'ecran par le z80)
5 7001 E5 PUSH HL ;sauvegarde des registres HL et IX necessaire pour un retour propre au basic
6 7002 DD E5 PUSH IX
7
8 7004 21 7049 LD HL,config_ef9345
9 7007 CD 00AD CALL 173 ;initialisation de lef9345
10
11 700A 16 24 LD D,36 ;choix du jeu et tampon pour le caractere, ici acb=110=6
12 700C 1E 20 LD E,32
13 700E CD 705A CALL ef9345
14
15 7011 3E 41 LD A,65 ;numero du caractere
16 7013 21 7065 LD HL,caractere ;adresse du caractere
17 7016 CD 001B CALL 1BH ;creation du caractere par setet
18
19 7019 16 22 LD D,34 ;D=38 pour dire quel type de caractere afficher
20 701B 1E D8 LD E,0D8H ;E=11 110 000 : 11 pour caractere quadrichrome 110 =6 pour dire quel bloc chercher le caractere
21 701D CD 705A CALL ef9345
22
23 7020 16 23 LD D,35; puisque dans R2 on a dit qu'on a un caractere quadrichrome, dans R3 on met les quatre couleurs
24 7022 1E 9A LD E,9AH ;code couleur dans l'ordre blanc cyan magenta bleu jaune vert rouge noir:
25 ; tu veux jaune rouge bleu blanc, donc dans E tu mets 10011010=9A
26 7024 CD 705A CALL ef9345
27
28 7027 16 26 LD D,38
29 7029 1E 00 LD E,0
30 702B CD 705A CALL ef9345 ; D=38 (registre R6) pour dire qu'on va donner le numero de ligne, E numero de la ligne
31 702E 16 27 LD D,39
32 7030 1E 27 LD E,39
33 7032 CD 705A CALL ef9345 ; D=39 (registre R7) pour dire qu'on va donner le numero de colonne, E numero de la colonne
34
35
36
37 7035 16 21 LD D,33
38 7037 1E 41 LD E,65
39 7039 CD 705A CALL ef9345 ;D=33(registre R1) pour dire qu'on va donner le numero du caractere a afficher
40 ;E le numero du caractere a afficher
41
42 703C 16 28 LD D,40
43 703E 1E 00 LD E,0
44 7040 CD 705A CALL ef9345 ;D=40 (Registre R0 + 8 pour l'execution) et E=0 dit
45 ;a l'ef9345 d'executer les commandes qu'on a definies plus tot
46
47 7043 sans_fin:
48 7043 18 FE jr sans_fin
49
50 7045 DD E1 POP IX ;reaffection des registres HL et IX
51 7047 E1 POP HL
52 7048 FB EI ;reactivation des interruptions
53
54 7049 config_ef9345:
55 7049 10 DB 16; longueur de l'initialisation
56 704A 21 00 28 81 DB 33,0,40,129 ;TGS on utilise ici le mode commande longue comme dans le livre Astuce pour Alice
57 704E 21 7F 28 83 DB 33,127,40,131 ;PAT
58 7052 21 02 28 82 DB 33,2,40,130 ;MAT couleur de la marge verte pas de curseur caracteres fixes
Z80ASM SuperFast Relocating Macro Assembler Z80ASM 1.30 Page 2
CARACT Z80
59 7056 21 23 28 84 DB 33,35,40,132;DOR partage de le memoire video comme preconise dans le livre pour utiliser des caracteres quadrichromes
60
61 705A ef9345:
62 705A C5 PUSH BC ;sauvegarde des registres BC et AF puisqu'ils vont être alteres par les deux routines ci-dessous
63 705B F5 PUSH AF
64 705C CD 0286 CALL 646 ;routine d'attente pour l'ef9345 doit pret a recevoir des donnees
65 705F CD 0D7C CALL 3452; routine d'envoie de donnees a l'ef9345 D=numero du registre, E=valeur du registre
66 7062 F1 POP AF ;reaffection des registres BC et AF
67 7063 C1 POP BC
68 7064 C9 RET
69
70 7065 caractere:
71 7065 18 6F 6D B4 DB 18H, 6FH, 6DH, 0B4H, 0D1H, 47H, 1EH, 79H, 0F9H, 24H
- Pièces jointes
-
- test.k7.zip
- (517 octets) Téléchargé 116 fois
- rendomizer
- Messages : 413
- Inscription : 17 juin 2016 21:00
- Contact :
Re: Incompéhension EF9345
merci beaucoup joaopa.Je pouvais pas espérer mieux.Si avec ça je ne comprends pas c'est que je suis un boulet...
Je ne suis qu'un utilisateur pas un pro
- rendomizer
- Messages : 413
- Inscription : 17 juin 2016 21:00
- Contact :
Re: Incompéhension EF9345
c'est formidable, on peut même éditer les setet en basic ! par contre j'ai encore du boulot pour apprendre le code Z80 ... encore merci joaopa pour ce bel exemple.
Je ne suis qu'un utilisateur pas un pro
Re: Incompéhension EF9345
En fait, je me suis planté. On ne peut pas utiliser setet pour definir des caracteres sur des blocs choisis. J'ai testé et quanbd on lit bien la routine &001B on se rend compte qu'on ne peut choisir qu'entre deux jeux de caractères. Ce n'est pas grave si on contente de deux jeux. Mais si on veut plus, c'est rédibitoire. Demain, je donnerai le code qui facilite la création de caractères.
Re: Incompéhension EF9345
9 7007 CD 00AD CALL 173 ;initialisation de lef9345
....
Il faut comprendre:
9 7007 CD AD 00 CALL 173 ;[AD$] initialisation de lef9345
(...)
- Papy.G
- Modérateur
- Messages : 3054
- Inscription : 10 juin 2014 13:40
- Localisation : Haute-Garonne/Gers
Re: Incompéhension EF9345
Si tu modifies les pointeurs et que tu appelles la routine au bon endroit, ça doit pouvoir se faire, mais le plus simple, à ce stade, serait peut-être d'écrire ta propre routine utilisant la commande OCT.
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Demandez-en plus, ou faites-le vous-même.
Re: Incompéhension EF9345
> PapyG Si tu lis la routine, tu verras que c'est impossible de definir ses propres blocs. C'est du au fait que le bloc utilise est calculer en fonction de la valeur du caractere souhaité
Re: Incompéhension EF9345
Voici comme promis la routine pour creer un caractere dans un bloc souhaité en utilisant la notation setet
Code : Tout sélectionner
Z80ASM SuperFast Relocating Macro Assembler Z80ASM 1.30 Page 1
CARACT Z80
1 7000 ORG 7000H
2
3 7000 debut:
4 7000 F3 DI; desactiver les interruptions (pour evitement le rafraichissement de l'ecran par le z80)
5 7001 E5 PUSH HL ;sauvegarde des registres HL et IX necessaire pour un retour propre au basic
6 7002 DD E5 PUSH IX
7
8 7004 21 7078 LD HL,config_ef9345
9 7007 CD 00AD CALL 173 ;initialisation de lef9345
10
11 700A 16 06 LD D,6 ;choix du bloc le caractere, ici acb=110=6
12 700C 1E 41 LD E,65
13
14 700E 21 7094 LD HL,caractere ;adresse du caractere
15 7011 CD 70A8 CALL construit_caractere ;creation du caractere par setet
16
17 7014 16 22 LD D,34 ;D=38 pour dire quel type de caractere afficher
18 7016 1E D8 LD E,0D8H ;E=11 110 000 : 11 pour caractere quadrichrome 110 =6 pour dire quel bloc chercher le caractere
19 7018 CD 7089 CALL ef9345
20
21 701B 16 23 LD D,35; puisque dans R2 on a dit qu'on a un caractere quadrichrome, dans R3 on met les quatre couleurs
22 701D 1E 9A LD E,9AH ;code couleur dans l'ordre blanc cyan magenta bleu jaune vert rouge noir:
23 ; tu veux jaune rouge bleu blanc, donc dans E tu mets 10011010=9A
24 701F CD 7089 CALL ef9345
25
26 7022 16 26 LD D,38
27 7024 1E 00 LD E,0
28 7026 CD 7089 CALL ef9345 ; D=38 (registre R6) pour dire qu'on va donner le numero de ligne, E numero de la ligne
29 7029 16 27 LD D,39
30 702B 1E 27 LD E,39
31 702D CD 7089 CALL ef9345 ; D=39 (registre R7) pour dire qu'on va donner le numero de colonne, E numero de la colonne
32
33 7030 16 21 LD D,33
34 7032 1E 41 LD E,65
35 7034 CD 7089 CALL ef9345 ;D=33(registre R1) pour dire qu'on va donner le numero du caractere a afficher
36 ;E le numero du caractere a afficher
37
38 7037 16 28 LD D,40
39 7039 1E 00 LD E,0
40 703B CD 7089 CALL ef9345 ;D=40 (Registre R0 + 8 pour l'execution) et E=0 dit
41 ;a l'ef9345 d'executer les commandes qu'on a definies plus tot
42
43 703E 16 03 LD D,3; caractere dans 3eme bloc, acb=011
44 7040 1E 41 LD E,65; numero du caractere
45
46 7042 21 709E LD HL,carac_alice
47 7045 CD 70A8 CALL construit_caractere
48
49 7048 16 22 LD D,34
50 704A 1E 81 LD E,81H
51 704C CD 7089 CALL ef9345
52
53 704F 16 23 LD D,35
54 7051 1E 34 LD E,34H
55 7053 CD 7089 CALL ef9345
56
57 7056 16 21 LD D,33
58 7058 1E 41 LD E,65
Z80ASM SuperFast Relocating Macro Assembler Z80ASM 1.30 Page 2
CARACT Z80
59 705A CD 7089 CALL ef9345
60
61 705D 16 26 LD D,38
62 705F 1E 14 LD E,20
63 7061 CD 7089 CALL ef9345
64
65 7064 16 27 LD D,39
66 7066 1E 0A LD E,10
67 7068 CD 7089 CALL ef9345
68
69 706B 16 28 LD D,40
70 706D 1E 00 LD E,0
71 706F CD 7089 CALL ef9345
72
73 7072 sans_fin:
74 7072 18 FE JR sans_fin
75
76 7074 DD E1 POP IX ;reaffection des registres HL et IX
77 7076 E1 POP HL
78 7077 FB EI ;reactivation des interruptions
79
80 7078 config_ef9345:
81 7078 10 DB 16; longueur de l'initialisation
82 7079 21 00 28 81 DB 33,0,40,129 ;TGS on utilise ici le mode commande longue comme dans le livre Astuce pour Alice
83 707D 21 7F 28 83 DB 33,127,40,131 ;PAT
84 7081 21 02 28 82 DB 33,2,40,130 ;MAT couleur de la marge verte pas de curseur caracteres fixes
85 7085 21 23 28 84 DB 33,35,40,132;DOR partage de le memoire video comme preconise dans le livre pour utiliser des caracteres quadrichromes
86
87 7089 ef9345:
88 7089 C5 PUSH BC ;sauvegarde des registres BC et AF puisqu'ils vont être alteres par les deux routines ci-dessous
89 708A F5 PUSH AF
90 708B CD 0286 CALL 646 ;routine d'attente pour l'ef9345 doit pret a recevoir des donnees
91 708E CD 0D7C CALL 3452; routine d'envoie de donnees a l'ef9345 D=numero du registre, E=valeur du registre
92 7091 F1 POP AF ;reaffection des registres BC et AF
93 7092 C1 POP BC
94 7093 C9 RET
95
96 7094 caractere:
97 7094 18 6F 6D B4 DB 18H, 6FH, 6DH, 0B4H, 0D1H, 47H, 1EH, 79H, 0F9H, 24H
98
99 709E carac_alice:
100 709E C0 80 6C FE DB 0C0H, 80H, 6CH, 0FEH, 7CH, 38H, 10H, 10H, 28H, 44H
101
102 70A8 construit_caractere: ;numero du caractere dans E, numero du bloc dans D
103 70A8 D5 PUSH DE
104 70A9 CB 3B SRL E
105 70AB CB 3B SRL E
106 70AD 7A LD A,D
107 70AE E6 04 AND 4
108 70B0 87 ADD A
109 70B1 87 ADD A
110 70B2 87 ADD A
111 70B3 83 ADD E
112 70B4 16 24 LD D,36
113 70B6 5F LD E,A
114 70B7 CD 7089 CALL ef9345
115 70BA D1 POP DE
116 70BB 7B LD A,E
Z80ASM SuperFast Relocating Macro Assembler Z80ASM 1.30 Page 3
CARACT Z80
117 70BC 87 ADD A
118 70BD 87 ADD A
119 70BE 42 LD B,D
120 70BF CB 0A RRC D
121 70C1 CB 0A RRC D
122 70C3 CB 1F RR A
123 70C5 CB 08 RRC B
124 70C7 CB 1F RR A
125
126 70C9 06 0A LD B,10
127 70CB boucle2_brique:
128 70CB 16 25 LD D,37
129 70CD 5F LD E,A
130 70CE CD 7089 CALL ef9345; R5
131 70D1 C5 PUSH BC
132 70D2 4E LD C,(HL)
133 70D3 06 08 LD B,8
134 70D5 conversion_caractere:
135 70D5 CB 01 RLC C
136 70D7 CB 1B RR E
137 70D9 10 FA DJNZ conversion_caractere
138 70DB C1 POP BC
139 70DC 16 21 LD D,33
140 70DE CD 7089 CALL ef9345; R1
141 70E1 16 28 LD D,40
142 70E3 1E 34 LD E,52
143 70E5 CD 7089 CALL ef9345; R0+exec
144 70E8 23 INC HL
145 70E9 C6 04 ADD 4
146 70EB 10 DE DJNZ boucle2_brique
147 70ED C9 RET
- Pièces jointes
-
- test.k7.zip
- (659 octets) Téléchargé 118 fois
- Papy.G
- Modérateur
- Messages : 3054
- Inscription : 10 juin 2014 13:40
- Localisation : Haute-Garonne/Gers
Re: Incompéhension EF9345
Joaopa> Je pensais qu'il y aurait eu moyen de forcer les index définissant dans quel bloc se trouve le jeu de caractères. Pareil pour le caractère individuel qui est modifié, en se branchant dans la routine assez loin.
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Demandez-en plus, ou faites-le vous-même.
- rendomizer
- Messages : 413
- Inscription : 17 juin 2016 21:00
- Contact :
Re: Incompéhension EF9345
Voila un exemple de sprite qui peut se déplacer avec les fleches de curseur.
Code : Tout sélectionner
0 SETET 65,"FF5F9FA7A7A96959D5C7"
1 SETET 66,"F3F3F3CFCFF3030343D0"
2 SETET 67,"3F3F3FCFCF3F0101051F"
3 SETET 68,"FFD7DB6B6BABA7975F7F"
4 SETET 69,"3F3F3F3F3F3F3FCFCFF3"
5 SETET 70,"D0F4C5CF3F3F3FCFFFFF"
6 SETET 71,"1F7F4FCFF3F3F3CFFFFF"
7 SETET 72,"F3F3F3F3F3F3F3CFCF3F"
8 SETET 73,"FFFFFFFFFFFFFFFFFFFF"
10 CLEAR 200:A=&"7000"
20 REM MACHINE CODE
21P$="220E70211470CDEF022A0E70C9000000000000202100288121062882216728832113288400000000214122D8235A26082727280000"
30 REM EXE BASIC
31 FORI=1TOLEN(P$)STEP2
32 POKEA,N:A=A+1
90 REM HEX TO DEC
91 N1=ASC(MID$(P$,I,1))-48
92 IF N1>9 THEN N1=N1-7
93 N2=ASC(MID$(P$,I+1,1))-48
94 IF N2>9 THEN N2=N2-7
95 N=16*N1+N2
96 NEXT I
98 FORX=0TO39:IFY>0ANDY<8THENY=8
99 CALL&"7000"
104 POKE&"702A",73:POKE&"7030",Y
105 POKE&"7032",X:NEXTX:Y=Y+1:IFY>31THENY=0
110 IFY<31THENGOTO 98
120 DIM A(20):DIM B(20):DIM C(20)
130 DATA 73,12,20,73,12,21,73,12,22,73,12,23
200 DATA 73,13,19,65,13,20,66,13,21,67,13,22,68,13,23,73,13,24
201 DATA 73,14,19,69,14,20,70,14,21,71,14,22,72,14,23,73,14,24
203 DATA 73,15,20,73,15,21,73,15,22,73,15,23
205 X=0:Y=0
210 FORI=1TO20:READ A(I),B(I),C(I)
230 POKE&"702A",A(I)
232 POKE&"7030",B(I)+Y
234 POKE&"7032",C(I)+X
235 CALL&"7000"
300 NEXTI
310 IFKEY(0)=7THENX=X+1
311 IFKEY(0)=8THENX=X-1
312 IFKEY(0)=9THENY=Y-1
313 IFKEY(0)=10THENY=Y+1
314 IFX<-19THENX=-19
315 IFX>16THENX=16
316 IFY<-5THENY=-5
317 IFY>14THENY=14
320 RESTORE
330 GOTO 210
- Pièces jointes
-
- test sprite multicolore.rar
- (906 octets) Téléchargé 105 fois
Je ne suis qu'un utilisateur pas un pro
- Papy.G
- Modérateur
- Messages : 3054
- Inscription : 10 juin 2014 13:40
- Localisation : Haute-Garonne/Gers
Re: Incompéhension EF9345
Dès que j'ai le temps, je me met les émulateurs DCVG5k et DC Alice sur mon PC, je suis curieux de voir ça.
Tu fais des transitions inter-caractères, à cheval sur deux cases, ou tu fais des sauts directs de case en case?
Tu fais des transitions inter-caractères, à cheval sur deux cases, ou tu fais des sauts directs de case en case?
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Demandez-en plus, ou faites-le vous-même.