KRF Repeat
Modérateurs : Papy.G, fneck, Carl
- z80¯\_(ツ)_/¯
- Messages : 77
- Inscription : 06 oct. 2020 13:15
- Localisation : Bourgogne
Re: KRF Repeat
Oui c'est en $5000. J'avais oublié de préciser.
Pour être très précis, c'est compilé avec Z88dk avec l'option zorg 20480.
Pour être très précis, c'est compilé avec Z88dk avec l'option zorg 20480.
Re: KRF Repeat
J'ai repris le fichier et de cette façon pour moi c'est plus clair.
C'est en $50C2 que tu entres et que tu organises to KRF Repeat ?
Je regarderai plus tard - La seule chose qu m'a interpellée c'est que pour l'instruction NOP j'avais fait :
J'ai l'impression que tu fais différent. Mais c'est peut être rien.
C'est en $50C2 que tu entres et que tu organises to KRF Repeat ?
Je regarderai plus tard - La seule chose qu m'a interpellée c'est que pour l'instruction NOP j'avais fait :
Code : Tout sélectionner
3E 28 LD A, $28
D3 8F OUT ($8F), A
3E 91 LD A, $91
D3 CF OUT ($CF), A
Code : Tout sélectionner
508B F3 DI
; Ecriture registre ef9345 (d=numero du registre)
EF9345:
508C F5 PUSH AF
508D C5 PUSH BC
508E CD8602 CALL 0286H ; teste si EF935 est pret
5091 CD7C0D CALL 0D7CH ; ecrit dans EF9345 (D=numero du registre, E=valeur du registre)
5094 CD8602 CALL 0286H
5097 C1 POP BC
5098 F1 POP AF
5099 C9 RET
; Lecture registre ef9345 (d=numero du registre)
; la valeur est placee dans h
EF9345_READ:
509A CD8602 CALL 0286H
509D 7A LD A,D
509E D38F OUTA (8FH)
50A0 DBCF INA (CFH)
50A2 67 LD H,A
50A3 C9 RET
50A4 C9 RET
._get_ef9345_register
50A5 E5 PUSH HL
; hl = r param -> commande + registre (__z88dk_fastcall)
; ex : $8921 = Commande indirection r=0-> TGS READ & lecture R1
50A6 1628 LD D,28H ; R0 exec
50A8 5C LD E,H ; Commande indirection r=0-> TGS READ
50A9 CD8C50 CALL 508CH ; CALL EF9345 Après il faut lire R1 qui contient le TGS courant
50AC 55 LD D,L ; l contient le registre a lire (ex 21 = r1)
50AD CD9A50 CALL 509AH ;call EF9345_READ ; d contient le registre à lire (ex 21 = r1)
50B0 6C LD L,H ; R1 dans l pour le retour (__z88dk_fastcall)
50B1 C1 POP BC
50B2 C9 RET
._set_ef9345_register
50B3 E5 PUSH HL
; hl = r param -> commande + valeur registre
; ex : $8101 = Commande indirection r=0-> TGS WRITE avec 01
50B4 1621 LD D,21H ; dans R1
50B6 5D LD E,L ; valeur a placer dans le registre indirect
50B7 CD8C50 CALL 508CH ; call EF9345 ;
50BA 1628 LD D,28H ; R0 exec
50BC 5C LD E,H ; commande indirect
50BD CD8C50 CALL 508CH ; call EF9345 ;
50C0 C1 POP BC
50C1 C9 RET
; Function fill_screen_repeat flags 0x00000208 __smallc __z88dk_fastcall
; void fill_screen_repeat(unsigned char car)
; parameter 'unsigned char car' at sp+2 size(1)
._fill_screen_repeat
50C2 E5 PUSH HL
; C
50C3 1621 LD D,21H ; r1 = car
50C5 1E41 LD E,41H ; car 65
50C7 CD8C50 CALL 508CH ; call EF9345
; B
50CA 1622 LD D,22H ; r2 = car
50CC 1E01 LD E,01H
50CE CD8C50 CALL 508CH ; call EF9345
; A
50D1 1623 LD D,23H ; R3
50D3 1E65 LD E,65H ; cyan/magenta dans R3 01110001 -> Bits de poids fort = 7
50D5 CD8C50 CALL 508CH ;call EF9345
50D8 1626 LD D,26H ; r6 = ligne (0 pour 0 et n+7 pour [1 <= n <= 24])
50DA 1E00 LD E,00H
50DC CD8C50 CALL 508CH ; call EF9345
50DF 1627 LD D,27H ; r7 = colonne entre 0 et 39
50E1 1E00 LD E,00H
50E3 CD8C50 CALL 508CH ; call EF9345
50E6 1628 LD D,28H ; d=40 (registre r0 + 8 execution)
50E8 1E05 LD E,05H ; et e=0 krf repeat
50EA CD8C50 CALL 508CH ; call EF9345
; wait
50ED 010010 LD BC,1000H ;loads bc with hex 1000
outer:
50F0 111000 LD DE,0010H ;loads de with hex 1000
inner:
50F3 1B DEC DE ;decrements de
50F4 7A LD A,D ;copies d into a
50F5 B3 OR E ;bitwise or of e with a (now, a = d | e)
50F6 C2F350 JP NZ,50F3H ;jp nz, inner-jumps back to inner: label if a is not zero
50F9 0B DEC BC ;decrements bc
50FA 78 LD A,B ;copies b into a
50FB B1 OR C ;bitwise or of c with a (now, a = b | c)
50FC C2F050 JP NZ,50F0H ;jp nz, outer-jumps back to outer: label if a is not zero
50FF 1628 LD D,28H ; d=40 (registre r0 + 8 pour l execution)
5101 1E91 LD E,91H ; et e=145 nop
5103 CD8C50 CALL 508CH ;call EF9345
5106 C1 POP BC
5107 C9 RET
- z80¯\_(ツ)_/¯
- Messages : 77
- Inscription : 06 oct. 2020 13:15
- Localisation : Bourgogne
Re: KRF Repeat
oui c'est ça.
Code : Tout sélectionner
3E 28 LD A, $28
D3 8F OUT ($8F), A
3E 91 LD A, $91
D3 CF OUT ($CF), A
- $0286 : Attente que l'EF9345 soit prêt
- $0D7C : Routine d'écriture EF9345 à l'aide des registres D et E du Z80
Si on regarde dans la rom du vg5000, on trouve ça à l'adresse 0D7C:
Code : Tout sélectionner
0d7c 0e8f ld c,8fh
0d7e ed51 out (c),d
0d80 0ecf ld c,0cfh
0d82 ed59 out (c),e
0d84 c9 ret
Code : Tout sélectionner
0286 3e20 ld a,20h 20=Command register
0288 d38f out (8fh),a
028a dbcf in a,(0cfh) <-
028c b7 or a |
028d fa8a02 jp m,028ah ---
0290 c9 ret
Re: KRF Repeat
Sur l'émulateur il semble bien qu'elle soit inopérante.
- KRF et KRF avec incrément marchent bien (avec incrément le registre R7 pointe bien sur la colonne suivante)
- Pour la commande KRF avec répétition ( 5 dans R0 + EXEC - J'ai même essayé 4) rien ne se passe.
- Le programme Forth veut dire : REG! = écrire dans le registre qui a été déclaré précédemment et j'ai utilisé le NOP et WAIT de l'instruction MVT-NOSTOP qui elle marche bien.
- Le programme ne s'est pas mis en échec puisqu'il est en train d'attendre par lecture du clavier comme le demande la commande KEY (CALL $32B7 dans le Forth).
D'ailleurs la pile SP en $FAF2 a la bonne adresse retour.
- Les registres R6 et R7 ont gardé les valeurs d'avant l'envoi de la commande.
Reste à essayer du l'ordinateur, je vais tenter ce soir ou demain soir; On sera fixé
- KRF et KRF avec incrément marchent bien (avec incrément le registre R7 pointe bien sur la colonne suivante)
- Pour la commande KRF avec répétition ( 5 dans R0 + EXEC - J'ai même essayé 4) rien ne se passe.
- Le programme Forth veut dire : REG! = écrire dans le registre qui a été déclaré précédemment et j'ai utilisé le NOP et WAIT de l'instruction MVT-NOSTOP qui elle marche bien.
- Le programme ne s'est pas mis en échec puisqu'il est en train d'attendre par lecture du clavier comme le demande la commande KEY (CALL $32B7 dans le Forth).
D'ailleurs la pile SP en $FAF2 a la bonne adresse retour.
- Les registres R6 et R7 ont gardé les valeurs d'avant l'envoi de la commande.
Reste à essayer du l'ordinateur, je vais tenter ce soir ou demain soir; On sera fixé
Re: KRF Repeat
Ne cherchez pas plus longtemps : je viens de vérifier dans dcvg5k, les commandes CLG et CLF ne sont pas programmées.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: KRF Repeat
OK,
De mon coté je n'arrive pas à charger les programmes. Peut être un problème de Jack - Il me donne : Opérande mal adapté et parfois il dit qu'il a trouvé MLLOGO (le correct c'est LOGO) J'ai tenté à peu près tous les volumes de son mais rien n'y fait
Edit : trouvé : il fallait désactiver les "Améliorations audio" qui semble-t-il font tout le contraire d'améliorer
De mon coté je n'arrive pas à charger les programmes. Peut être un problème de Jack - Il me donne : Opérande mal adapté et parfois il dit qu'il a trouvé MLLOGO (le correct c'est LOGO) J'ai tenté à peu près tous les volumes de son mais rien n'y fait
Edit : trouvé : il fallait désactiver les "Améliorations audio" qui semble-t-il font tout le contraire d'améliorer
- Carl
- Modérateur
- Messages : 13253
- Inscription : 08 avr. 2007 13:21
- Localisation : http://www.doledujura.fr
- Contact :
Re: KRF Repeat
A priori, ça fonctionne sur un vrai VG5000 (ne pas tenir compte des reflets ) L'écran devient noir...
Suite à un CTRL Delta, l'écran reste noir ...
Suite à un CTRL Delta, l'écran reste noir ...
Re: KRF Repeat
Est ce que tu as un prompt ? ou est il figé ?
Re: KRF Repeat
J'ai eu ça en mettant la lettre E et les paramètres couleur que z80¯\_(ツ)_/¯ avait mis.
Mais l'écran est figé et comme je n'avais fait que la ligne $0B il est étrange qu'il m'ait fait tout l'écran
Mais l'écran est figé et comme je n'avais fait que la ligne $0B il est étrange qu'il m'ait fait tout l'écran
- Mokona
- Messages : 1040
- Inscription : 17 déc. 2016 22:01
- Localisation : Nord Est des Yvelines
- Contact :
Re: KRF Repeat
Ctrl-Delta fait un reset à chaud.
La ROM ne repasse pas par l'initialisation de l'EF9345, et donc ne revient pas au mode "fixed short" (les réinitialisations à chaud sont faites sur les variables systèmes qui servent à mettre à jour l'écran à chaque IRQ, plus la redéfinition de deux caractères spéciaux).
La ROM ne repasse pas par l'initialisation de l'EF9345, et donc ne revient pas au mode "fixed short" (les réinitialisations à chaud sont faites sur les variables systèmes qui servent à mettre à jour l'écran à chaque IRQ, plus la redéfinition de deux caractères spéciaux).
- z80¯\_(ツ)_/¯
- Messages : 77
- Inscription : 06 oct. 2020 13:15
- Localisation : Bourgogne
Re: KRF Repeat
Merci pour votre aide.
Si je comprend bien, le CLF marche sur un VG5000 mais l'écran reste figé après la commande.
Et le registres R6 et R7 ne sont pas pris en compte pour cette commande. Ils sont ignorés puisque l’effacement commence en (0,0) de toute façon.
Si je comprend bien, le CLF marche sur un VG5000 mais l'écran reste figé après la commande.
Et le registres R6 et R7 ne sont pas pris en compte pour cette commande. Ils sont ignorés puisque l’effacement commence en (0,0) de toute façon.
- Carl
- Modérateur
- Messages : 13253
- Inscription : 08 avr. 2007 13:21
- Localisation : http://www.doledujura.fr
- Contact :
Re: KRF Repeat
Dominique, pas de prompt...
Merci Mokona.
oui, Z80, l'écran est figé.
Carl
Merci Mokona.
oui, Z80, l'écran est figé.
Carl
Re: KRF Repeat
L'émulation EF8345 a été programmée en 2005. D'après mes (vieux) souvenirs, je n'ai pas programmé les commandes CLF et CLG car je n'avais pas bien compris ce qu'elles faisaient exactement. En particulier je ne savais pas quelles valeurs avaient R6 et R7 au départ et à la fin de l'exécution.
En relisant la documentation aujourd'hui, je crois comprendre que l'exécution s'arrête si une autre commande est envoyée ou si la dernière ligne de l'écran est atteinte. Est-ce juste ?
Par contre la valeur initiale de R6 et R7 est-elle prise en compte ? Ou alors R6 et R7 sont-ils remis à zéro ? Là j'ai encore un doute.
Si ces points peuvent être précisés par des essais sur la vraie machine je peux corriger dcvg5k pour en tenir compte.
En relisant la documentation aujourd'hui, je crois comprendre que l'exécution s'arrête si une autre commande est envoyée ou si la dernière ligne de l'écran est atteinte. Est-ce juste ?
Par contre la valeur initiale de R6 et R7 est-elle prise en compte ? Ou alors R6 et R7 sont-ils remis à zéro ? Là j'ai encore un doute.
Si ces points peuvent être précisés par des essais sur la vraie machine je peux corriger dcvg5k pour en tenir compte.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
- Papy.G
- Modérateur
- Messages : 3047
- Inscription : 10 juin 2014 13:40
- Localisation : Haute-Garonne/Gers
Re: KRF Repeat
Une fois la commande lancée, l'EF9345 fait son job de son coôté, et ne s'arrête que lors de l'envoi d'un NOP, ou potentiellement d'une autre commande quelconque, qui pourrait être ignorée (comme le NOP à l'initialisation du 9345, par lequel la notice indique de toujours commencer).
Vu la nature de la commande, je pense que le remplissage commence à l'endroit pointé par R6 et R7, et doit reboucler en fin de page-écran. Cela peut être vérifié en ne laissant pas assez de temps au VDP pour remplir toute la page, et en lisant R6 et R7 immédiatement après.z80¯\_(ツ)_/¯ a écrit : ↑20 oct. 2020 07:05Si je comprend bien, le CLF marche sur un VG5000 mais l'écran reste figé après la commande.
Et le registres R6 et R7 ne sont pas pris en compte pour cette commande. Ils sont ignorés puisque l’effacement commence en (0,0) de toute façon.
Peut-être qu'en utilisant CLG en laissant la location de la page-écran du BASIC, on peut voir se réafficher le prompt au retour.
Ces commandes sont très intéressantes, s'il s'avéraient qu'elles commencent là où les pointeurs R6 et R7 pointent, car elle permettrait de remplir un écran très rapidement (à condition de bien maîtiser le timing du CPU de la machine, et parer aux éventuelles déviances si le VDP et le CPU ne partagent pas la même base de temps).
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: KRF Repeat
Merci Daniel, on va essayer de se coller à ça
Ce qu'on voit sur ma photo est le résultat de KRF Repeat avec 5 dans R0+exec (ligne) 0B dans R6 et (colonne) 0 dans R7. Mais je n'ai pas fait de loop lui demandant de parcourir toute les lignes.
- Comme on le voit il n'a pas touché à la ligne 0 mais a touché à ligne 8 et, ÉTRANGE, ne s'est pas arrêté à la fin de la ligne, il a continué jusqu'à la fin de l'écran. Je ne sais pas si Carl peut reprendre le listing de Z80 en arrêtant le programme avant qu'il ne fasse la ligne suivante (je ne me souviens plus si c'est $50F6 ou $50FC ?)
- J'ai tenté en mettant 04 dans R0+exec afin de ne pas mettre l'incrément (bit i de la p115 de Alice), il a bien écrit la lettre E sur fond cyan mais l'ordi était figé.
Je me pose la question : Cette commande est-elle officiellement valide pour le EF ? car le livre parle de repeat mais sauf erreur de ma part ne donne pas d'exemples. Si je lis bien le listing efface écran de la page 116 c'est un KRF avec incrément et pas de repeat puisqu'il met $01 dans R0 ligne 57 du listing.
Ce qu'on voit sur ma photo est le résultat de KRF Repeat avec 5 dans R0+exec (ligne) 0B dans R6 et (colonne) 0 dans R7. Mais je n'ai pas fait de loop lui demandant de parcourir toute les lignes.
- Comme on le voit il n'a pas touché à la ligne 0 mais a touché à ligne 8 et, ÉTRANGE, ne s'est pas arrêté à la fin de la ligne, il a continué jusqu'à la fin de l'écran. Je ne sais pas si Carl peut reprendre le listing de Z80 en arrêtant le programme avant qu'il ne fasse la ligne suivante (je ne me souviens plus si c'est $50F6 ou $50FC ?)
- J'ai tenté en mettant 04 dans R0+exec afin de ne pas mettre l'incrément (bit i de la p115 de Alice), il a bien écrit la lettre E sur fond cyan mais l'ordi était figé.
Je me pose la question : Cette commande est-elle officiellement valide pour le EF ? car le livre parle de repeat mais sauf erreur de ma part ne donne pas d'exemples. Si je lis bien le listing efface écran de la page 116 c'est un KRF avec incrément et pas de repeat puisqu'il met $01 dans R0 ligne 57 du listing.