Incompéhension EF9345

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

joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: Incompéhension EF9345

Message par joaopa »

Il est sensé faire quoi ton code?
Avatar de l’utilisateur
rendomizer
Messages : 413
Inscription : 17 juin 2016 21:00
Contact :

Re: Incompéhension EF9345

Message par rendomizer »

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 :roll:
J'aimerai faire la même chose avec le mode multicolor...
Je ne suis qu'un utilisateur pas un pro
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: Incompéhension EF9345

Message par joaopa »

La question était: en quelles coordonnées et avec quelles couleurs veux-tu afficher ton caractère?
Avatar de l’utilisateur
rendomizer
Messages : 413
Inscription : 17 juin 2016 21:00
Contact :

Re: Incompéhension EF9345

Message par rendomizer »

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
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: Incompéhension EF9345

Message par joaopa »

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

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é 110 fois
Avatar de l’utilisateur
rendomizer
Messages : 413
Inscription : 17 juin 2016 21:00
Contact :

Re: Incompéhension EF9345

Message par rendomizer »

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
Avatar de l’utilisateur
rendomizer
Messages : 413
Inscription : 17 juin 2016 21:00
Contact :

Re: Incompéhension EF9345

Message par rendomizer »

c'est formidable, on peut même éditer les setet en basic ! par contre j'ai encore du boulot pour apprendre le code Z80 ... :lol: encore merci joaopa pour ce bel exemple.
Je ne suis qu'un utilisateur pas un pro
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: Incompéhension EF9345

Message par joaopa »

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.
Xavier

Re: Incompéhension EF9345

Message par Xavier »

9 7007 CD 00AD CALL 173 ;initialisation de lef9345
....
:(
Il faut comprendre:
9 7007 CD AD 00 CALL 173 ;[AD$] initialisation de lef9345
(...)
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3047
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: Incompéhension EF9345

Message par Papy.G »

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.
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: Incompéhension EF9345

Message par joaopa »

> 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é :roll:
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: Incompéhension EF9345

Message par joaopa »

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é 114 fois
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3047
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: Incompéhension EF9345

Message par Papy.G »

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.
Avatar de l’utilisateur
rendomizer
Messages : 413
Inscription : 17 juin 2016 21:00
Contact :

Re: Incompéhension EF9345

Message par rendomizer »

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é 102 fois
Je ne suis qu'un utilisateur pas un pro
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3047
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: Incompéhension EF9345

Message par Papy.G »

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?
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Répondre