KRF Repeat

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

Avatar de l’utilisateur
z80¯\_(ツ)_/¯
Messages : 77
Inscription : 06 oct. 2020 13:15
Localisation : Bourgogne

KRF Repeat

Message par z80¯\_(ツ)_/¯ »

Bonjour,
J'essaie de faire marcher la commande KRF sur vg5000 en mode repeat pour ne pas demander au Z80 de calculer toutes des adresses de l'écran. Je voudrais juste remplir l'écran avec le même caractère. Mais ça ne fonctionne pas.

Voici un exemple qui fonctionne correctement avec la commande KRF à 0 -> affiche un A en (0,0).
Quand je passe le KRF à 5 (bit a et i à 1), ça n'affiche rien.
Il doit y avoir une astuce que je ne voie pas ou bien mame émule mal ce mode.
Est-ce que qq'un a déjà réussi à faire fonctionner cette commande ?

Code : Tout sélectionner

    ld d, $21; r1 = car
    ld e, 65; car 65
    call EF9345
    
    ld d, $26 ; r6 = ligne (0 pour 0 et n+7 pour [1 <= n <= 24])
    ld e, 00
    call EF9345

    ld d, $27 ; r7 = colonne entre 0 et 39
    ld e, 00
    call EF9345

    ld d, $28 ; d=40 (registre r0 + 8 execution)
    ld e, $05 ; et e=0 krf repeat (ne marche pas, si $00 affiche un A)
    call EF9345
    
    ; wait -> c'est marque dans la doc
    ld bc, 1000h            ;loads bc with hex 1000
outer:
    ld de, 0010h            ;loads de with hex 1000

inner:
    dec de                  ;decrements de
    ld a, d                 ;copies d into a
    or e                    ;bitwise or of e with a (now, a = d | e)
    jp nz, inner            ;jumps back to inner: label if a is not zero
    dec bc                  ;decrements bc
    ld a, b                 ;copies b into a
    or c                    ;bitwise or of c with a (now, a = b | c)
    jp nz, outer            ;jumps back to outer: label if a is not zero
    
    
    
    ld d, $28 ; d=40 (registre r0 + 8 pour l execution)
    ld e, $91 ; et e=145 nop (pour arrêter le repeat)
    call EF9345
Avatar de l’utilisateur
Dominique
Messages : 828
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: KRF Repeat

Message par Dominique »

Je me demande si ce n'est pas le même problème que j'avais eu ici bien que ce soit la commande MVT.

viewtopic.php?f=25&t=2067&start=165#p142173

Il faut peut être faire des loop pour laisser le temps au EF de faire son travail.

EDIT (AJOUT) de 12h33 :
Je ne sais pas quel manuel tu lis pour le EF9345 - Je te recommande les Astuces d'Alice 32 et 90 que tu trouveras sur le site de Daniel.
http://alice32.free.fr/documentation/index.html
L'ordinateur et le processeurs ne sont pas les mêmes, mais tous deux utilisent le même EF9345 pour l'affichage.
Page 115 tu liras ce texte qui peut passer inaperçu : "L’Arrêt de la commande (KRF) se fait en envoyant une autre commande au 9345 APRES AVOIR ATTENDU SUFFISAMMENT LONGTEMPS (C'est le loop dont je parlais) pour l'opération voulue." C'est peut être là le problème.

Comme je viens de voir que tu as fais un WAIT, essaye de mettre juste avant d'envoyer le NOP.
As tu mis ou essayé de mettre i=1 pour incrementer le pointer ? (il faut peut être le mettre)
Je dis ça comme ça car il faut vraiment se concentrer sur le EF et je sais que c'est un casse tête.
Avatar de l’utilisateur
z80¯\_(ツ)_/¯
Messages : 77
Inscription : 06 oct. 2020 13:15
Localisation : Bourgogne

Re: KRF Repeat

Message par z80¯\_(ツ)_/¯ »

Bonjour.
Merci pour le lien. J'ai pu utiliser la routine "efface_ecran" avec auto incrément KRF (01) du source de forth. Ca rempli l'écran bien plus vite que de le faire car par car.

Pour en revenir au KRF(05), ca ne fonctionne pas malgré le wait avant le nop. J'ai pourtant l'impression d'avoir calquer le code z80 sur le code 6809 de l'Alice ci dessous.

Image
Avatar de l’utilisateur
Dominique
Messages : 828
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: KRF Repeat

Message par Dominique »

Quand tu dis que cela ne marche pas : Est ce sur un émulateur ou un vrai VG ? As tu essayé le DCVG5K ?
Avatar de l’utilisateur
z80¯\_(ツ)_/¯
Messages : 77
Inscription : 06 oct. 2020 13:15
Localisation : Bourgogne

Re: KRF Repeat

Message par z80¯\_(ツ)_/¯ »

J'ai essayé sur Mame et sur DCVG5K.
Même résultat.
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3047
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: KRF Repeat

Message par Papy.G »

Page 36 sur 38 du datasheet de l'EF9345, tu trouveras les timings précis nécessaires à chaque opération, quand elle n'est pas retardée par les lectures de tampons (pour l'affichage).
Attention à l'imprécision des quartz dans les machines où le 9345 et le proc. principal ont des sources d'horloge indépendantes! :?
Pour remplir une page-écran entière du même caractère, tu as la commande CLF, qui s'exécute et s'auto-incrémente toute seule jusqu'à ce que tu envoies un NOP 9345, c'est encore plus rapide, et ça libère totalement le Z80 pendant ce temps. ;)
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: KRF Repeat

Message par Daniel »

z80¯\_(ツ)_/¯ a écrit : 18 oct. 2020 09:52 J'ai essayé sur Mame et sur DCVG5K.
Même résultat.
Normal, l'émulation de l'EF9345 dans Mame utilise mon programme. Ce n'est pas une garantie de conformité au vrai matériel, loin s'en faut.
Seul un essai avec la machine réelle permet de tester un programme utilisant l'EF9345.
Si quelqu'un trouve une différence avec l'émulateur, il me la signale et je corrige.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
z80¯\_(ツ)_/¯
Messages : 77
Inscription : 06 oct. 2020 13:15
Localisation : Bourgogne

Re: KRF Repeat

Message par z80¯\_(ツ)_/¯ »

Bonjour,

Vous me dites si je me trompe mais d'après ce que je peux lire dans la doc:
- pour le CLF, c'est 5 dans le R0
- ce qui est identique à un KRF avec le a à 1 (bit 2, repeat) et le i à 1 (bit 0, auto increment).
Dans les 2 cas, ça fait 00001001 donc 5.

Il faut lui donner les 3 registres R1, R2, R3 nommés respectivement C B A:
- C correspond au caractère à afficher (65 pour le A par exemple)
- B correspond à la table de caractère et quelques attributs (00000001 = jeu G0, attributs standard et bit incrustation à 1=normal)
- A correspond aux attributs du caractère (par exemple $65-> pour du cyan/magenta)

Dans l'exemple sur Alice, il y a une attente de 15ms avant d'envoyer le NOP. Dans ce que j'ai fait sur le VG5000, il y une attente bien plus longue. Je me suis dit que plus on attend, plus ça doit marcher...

Voilà ma compréhension de débutant sur l'EF9345. J'ai l'impression que ça devrait fonctionner. Je n'ai pas de VG5000 pour tester. Je ne peux donc pas savoir si cela vient de l'émulation ou bien s'il y a un pb de code.

Image

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

Re: KRF Repeat

Message par Daniel »

Le plus simple serait de fournir une version exécutable du programme (avec en annexe le code source) pour que les spécialistes donnent leur avis et puissent éventuellement l'essayer avec un vrai VG5000.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3047
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: KRF Repeat

Message par Papy.G »

Si sur Alice, l'attente est de 15ms, elle ne devrait pas être différente sur VG5000, les instructions sont exécutées par le EF 9345, et à priori, il est cadencé à 12MHz dans les deux machines.
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
z80¯\_(ツ)_/¯
Messages : 77
Inscription : 06 oct. 2020 13:15
Localisation : Bourgogne

Re: KRF Repeat

Message par z80¯\_(ツ)_/¯ »

Pour les motivés, voici une archive contenant le k7, le bin, et l'asm.
Le bin est compilé avec z88dk donc c'est un peu verbeux. La fonction d'effacement est à ligne 629 de l'asm.
Le programme affiche une ligne, attend l'appuie sur une touche et devrait effacer après.

https://onedrive.live.com/embed?cid=3DD ... Hf_mayQg_0
Avatar de l’utilisateur
Dominique
Messages : 828
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: KRF Repeat

Message par Dominique »

Je vais sortir mon VG5000 cette semaine et je te dis. Je vais le tester en Forth, c'est plus facile pour moi.

EDIT
Aurais tu le fichier LST (le TASM le donne) c'est plus facile à suivre ..... Pour le EF il faut vraiment se concentrer dessus et ne pas se disperser en faisant autre chose.
Avatar de l’utilisateur
Mokona
Messages : 1040
Inscription : 17 déc. 2016 22:01
Localisation : Nord Est des Yvelines
Contact :

Re: KRF Repeat

Message par Mokona »

Je devrais avoir un peu de temps pour tester aussi (sur matériel). Ca m'intéresse.
Avatar de l’utilisateur
z80¯\_(ツ)_/¯
Messages : 77
Inscription : 06 oct. 2020 13:15
Localisation : Bourgogne

Re: KRF Repeat

Message par z80¯\_(ツ)_/¯ »

Aurais tu le fichier LST (le TASM le donne) c'est plus facile à suivre ..... Pour le EF il faut vraiment se concentrer dessus et ne pas se disperser en faisant autre chose.
Je vais pas avoir. Je suis sur Linux avec z80asm.
Avatar de l’utilisateur
Dominique
Messages : 828
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: KRF Repeat

Message par Dominique »

Comme il n'y a par d'adresse .ORG J'ai essayé de charger ton fichier BIN adresse $4550 sur l'émulateur DCVG5K.

Ce que j'ai ne correspond pas

Code : Tout sélectionner

4550  AF        XOR     A
4551  320248    LD      (4802H),A
4554  E5        PUSH    HL
4555  ED732250  LD      (5022H),SP
4559  21C0FF    LD      HL,FFC0H
455C  39        ADD     HL,SP
455D  F9        LD      SP,HL
455E  CD4050    CALL    5040H
4561  ED73DC5B  LD      (5BDCH),SP
4565  F3        DI      
4566  CD3E52    CALL    523EH
etc..
Peut être que je n'ai pas tout compris

EDIT : Trouvé adresse $45DB - je vais essayer de calculer la véritable adresse de chargement - Il faut le charger à $5000 et ce qui nous concerne commence à $508B
Répondre