[DCMOTO] points d'arrêts

Couvre tous les domaines de l'émulation ou de la virtualisation ainsi que les discussions sur les divers outils associés.

Modérateurs : Papy.G, fneck, Carl

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

Re: [DCMOTO] points d'arrêts

Message par Daniel »

Quand on commence à y réfléchir, on trouve toujours des idées d'améliorations. J'en ai eu moi aussi deux ou trois autres.
Je retiens la proposition d'un type de point d'arrêt Read/Write.
La trace des points d'arrêt est aussi une idée intéressante, mais je la garde pour plus tard. J'aime mieux avancer par toutes petites étapes.

J'ai une petite crainte : Le test des points d'arrêt se fait à chaque instruction, et s'il est trop compliqué il risque de ralentir l'exécution. Dans un premier temps je vais seulement programmer les nouveaux tests de numéros de banque pour évaluer l'impact sur la vitesse.
Daniel
L'obstacle augmente mon ardeur.
Bentoc
Messages : 103
Inscription : 14 sept. 2019 13:35
Localisation : Var - France

Re: [DCMOTO] points d'arrêts

Message par Bentoc »

A ce propos : quand on fait un point d’arrêt sur write avec la dernière version on s’arrête a l’instruction d’après (logique) mais on n’a pas de trace de l’instruction d’avant, car le tableau a été remplacé par la trace fichier.
Bon c’est pas trop grave, juste pour te faire un feedback.

Je confirme que la vitesse d’exécution en mode debug est chose importante, je voudrais bien pouvoir faire avance rapide des fois !

Pense a mettre une valeur vide dans le type de point d’arrêt, comme ça on peut garder l’adresse et la page du point d’arrêt et de ton côté tu l’ignores lors du test des breakpoints.
Ça peut permettre d’avoir une liste plus grande de points d’arrêt et on active seulement ceux dont on a besoin. Les autres sont désactivés mais on ne perd pas leur conf.
__sam__
Messages : 6800
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO] points d'arrêts

Message par __sam__ »

Bentoc a écrit : 27 mai 2021 16:05 Pense a mettre une valeur vide dans le type de point d’arrêt, comme ça on peut garder l’adresse et la page du point d’arrêt et de ton côté tu l’ignores lors du test des breakpoints.
C'est exactement mon cas d'usage qui faisais que je perdais les anciens point d'arrêt et les effaçant pour ne plus tomber dedans. Si on peut les désactiver sans perdre l'adresse (truc difficile à se rappel), ca aiderait bien.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Daniel
Messages : 15455
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO] points d'arrêts

Message par Daniel »

On peut déjà garder les points d'arrêt inactifs, il suffit de décocher les trois cases Exec, Read, Write.
Dans le nouveau système je garde la même option en prévoyant quatre valeurs dans la table des types d'arrêt : Inactif, Exec, Read, Write.

En cas d'arrêt sur Exec on voit l'instruction en cours dans le désassemblage. Elle n'est pas encore exécutée lors de l'arrêt.
En cas d'arrêt sur Read ou Write il faut exécuter l'instruction pour savoir si elle a accédé à la mémoire, c'est pourquoi on voit l'instruction suivante.

Pendant plusieurs mois dcmoto a affiché aussi les deux instructions précédentes (je gardais en mémoire la trace des deux dernières valeurs de PC). mais c'était source de confusion car c'étaient les deux instructions précédemment exécutées, pas toujours les deux instructions précédentes du listing. Désassembler un programme de haut en bas est facile, de bas en haut c'est difficile et même impossible dans certains cas de figure.
Daniel
L'obstacle augmente mon ardeur.
Daniel
Messages : 15455
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO] points d'arrêts

Message par Daniel »

La programmation des nouveaux points d'arrêt est terminée. Elle est (comme d'habitude) insuffisamment testée et peut contenir des erreurs. Je ne la diffuse pas sur le site dcmoto, j'attends d'avoir des retours positifs.
dcmoto_20210530.zip
(883.14 Kio) Téléchargé 61 fois

A noter :
- Il n'y a pas de contrôle de compatibilité entre le type de banque, le numéro de banque et l'adresse. A vous de ne pas vous tromper.
- Les numéros de banque sont en hexadécimal
- Pendant l'exécution jusqu'au point d'arrêt, seul le registre PC et le nombre de cycles exécutés sont mis à jour en temps réel. Les autres registres ne sont rafraîchis qu'à l'arrêt suivant. C'est un gain de temps qui permet d'accélérer la vitesse d'exécution.
- En cas d'arrêt sur Read ou Write, l'instruction provoquant l'arrêt est maintenant affichée dans le désassemblage (elle ne l'était pas dans les versions précédentes). Cette instruction a déjà été exécutée et le registre PC pointe sur l'instruction suivante.
- En cas d'arrêt sur Exec, rien de changé : l'instruction à l'adresse d'arrêt est affichée, elle n'a pas encore été exécutée et PC contient l'adresse d'arrêt.
Daniel
L'obstacle augmente mon ardeur.
Bentoc
Messages : 103
Inscription : 14 sept. 2019 13:35
Localisation : Var - France

Re: [DCMOTO] points d'arrêts

Message par Bentoc »

Merci Daniel, je commencerai a l’utiliser ce soir.
Bentoc
Messages : 103
Inscription : 14 sept. 2019 13:35
Localisation : Var - France

Re: [DCMOTO] points d'arrêts

Message par Bentoc »

Un grand merci Daniel pour cette version encore une fois développée à la vitesse de l'éclair.

Bonne idée de ne mettre à jour que le pc et le nb de cycles lors de l'exécution jusqu'à un point d'arrêt.
Le gain de vitesse saute aux yeux en mode debug :shock: !!! ça va me faire gagner beaucoup de temps.

Sur le point d'arrêt "write", le fait de pouvoir voir l'instruction concernée fonctionne bien, merci d'avoir pris en compte la remarque.

Pour la gestion des banques pour les points d'arrêt ça a l'air de bien fonctionner, par contre je ne peux pas choisir de la ram montée en zone cartouche (E7E6 sur TO8).
J'imagine que ce n'est pas assez commun à toutes les machines émulées par DCMOTO et que c'est pour cela que ce n'est pas présenté dans la zone "commutation pages mémoire" (et donc pas retenu dans la liste de bank pour les points d'arrêts).
Dans mon cas je fais un gros usage de la ram paginée en zone cartouche et donc c'est un peu dommage :cry:
Daniel
Messages : 15455
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO] points d'arrêts

Message par Daniel »

C'est sûrement possible, mais un peu plus compliqué car il n'y a pas (encore) d'indicateur prévu pour ça dans dcmoto. J'ai utilisé seulement les numéros de banques déjà présents dans la deuxième fenêtre de l'outil de mise au point. Je vais regarder s'il est possible d'en ajouter un, mais je ne promets rien.

Avec la version actuelle, je ne sais pas ce qui se passe quand la rom est recouverte par la ram et qu'on choisit un point d'arrêt au-dessous de $4000 avec un numéro de banque de rom ? Ou un numéro de banque cartouche ? Ou un numéro de banque de ram ? L'un des trois fonctionne peut-être...
Daniel
L'obstacle augmente mon ardeur.
Bentoc
Messages : 103
Inscription : 14 sept. 2019 13:35
Localisation : Var - France

Re: [DCMOTO] points d'arrêts

Message par Bentoc »

Avec la version actuelle, je ne sais pas ce qui se passe quand la rom est recouverte par la ram et qu'on choisit un point d'arrêt au-dessous de $4000 avec un numéro de banque de rom ? Ou un numéro de banque cartouche ? Ou un numéro de banque de ram ? L'un des trois fonctionne peut-être...
J'ai essayé mais sans succès.
Daniel
Messages : 15455
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO] points d'arrêts

Message par Daniel »

Je viens de regarder, c'est effectivement plus compliqué que l'on pense à cause d'une subtilité diabolique : la page RAM qui se substitue à la ROM superpose sa première moitié à la deuxième moitié de la page ROM, et sa deuxième moitié à la première. Il faut donc, dans ce cas, recalculer les adresses en RAM selon qu'elles sont dans la première ou la deuxième moitié.

Par exemple, pour le TO8, si le point d'arrêt est $1000, il correspond à l'adresse $D000 en RAM. S'il est à l'adresse $3000 il correspond à l'adresse $B000.
Pour le MO6 les adresses sont différentes, la ROM est en $B000-$EFFF et la RAM paginée en $6000-$9FFF.

J'ai vu aussi qu'en cas de recouvrement de la ROM par la RAM, dcmoto utilise la banque ROM numéro 7.
Il faudrait essayer, dans ce cas, de mettre un point d'arrêt entre $0000 et $3FFF en spécifiant "ROM interne banque 7" ou "ROM cartouche banque 7". Avec un peu de chance l'un des deux fonctionne peut-être avec la version 20210530 de dcmoto. Sinon je chercherai une autre solution.
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 6800
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO] points d'arrêts

Message par __sam__ »

Ne vaudrait-il pas mieux d'utiliser l'adressage physique des RAM pour les points d'arrêt dans de la mémoire mappée ?

Les adresses logiques seraient utilisés pour les points d'arrêts classiques (bref on change pas le fonctionnement standard). En revanche on utiliserait l'adresse physique sur (5 + 14 bit = 512ko) pour les RAM paginées ? $00000 serait mappé à l'adresse 0 de la page 0 (toujours mappée $6000-$9FFF dans l'espace logique sur les TO), $04000 correspond à l'adresse 0 de la page 1 (mappée ou pas dans l'espace logique), $08123 correspond à $0123 de la page 2 (mappée ou pas, c'est à dire accessible au processeur peu importe), etc. En utilisant l'adresse physique il n'y a pas d'ambiguïté même si la ram est mappée ailleurs ou en double dans l'espace logique. Si elle n'est pas mappée, le point d'arrêt ne pourra pas être déclenché puisque le processeur ne peut y accéder.

C'est certes plus complexe pour l'utilisateur, mais l'utilisateur en question n'est certainement pas le 1er venu puisqu'il joue avec le mapping des pages. A la limite pour rendre cela plus "user-friendly" on peut imaginer une notation d'adresse segmentée façon "PC" $pp:nnnn, avec pp=numéro de page (0 à $1F, 32 pages) et nn=adresse dans la page (0 à $3FFF, 16ko). A la simple lecture d'un point d'arrêt affiché avec le ":" au milieu on sait qu'on utilise les pages physiques du thomson.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Bentoc
Messages : 103
Inscription : 14 sept. 2019 13:35
Localisation : Var - France

Re: [DCMOTO] points d'arrêts

Message par Bentoc »

J'ai vu aussi qu'en cas de recouvrement de la ROM par la RAM, dcmoto utilise la banque ROM numéro 7.
Il faudrait essayer, dans ce cas, de mettre un point d'arrêt entre $0000 et $3FFF en spécifiant "ROM interne banque 7" ou "ROM cartouche banque 7". Avec un peu de chance l'un des deux fonctionne peut-être avec la version 20210530 de dcmoto. Sinon je chercherai une autre solution.
Comme je cherche a positionner un point d'arrêt dans une page de la RAM exécutée depuis l'espace cartouche, spécifier la page 7 sur le point d'arrêt ne permettra pas de distinguer les pages de RAM entres elles.
Ex: je veux un arrêt sur un appel de la page $0D montée dans l'espace cartouche, mais ne veut pas les arrêts sur les pages $08, $14, lorsqu'elles sont montées en espace cartouche ...
Spécifier la page 7 reviendrait à la même chose que ne rien spécifier (sauf a faire la distinction avec la ROM).
Bentoc
Messages : 103
Inscription : 14 sept. 2019 13:35
Localisation : Var - France

Re: [DCMOTO] points d'arrêts

Message par Bentoc »

Premier problème rencontré :
Un breakpoint en Read, Write ou R/W sur $7CEC avec un accès en LDD, STD ou SUBD ne s'arrête pas ...

C'est ok, si on met un breakpoint en $7CED :
2021-05-31 14_44_44-DCMOTO  - Mise au point.png
2021-05-31 14_44_44-DCMOTO - Mise au point.png (29.04 Kio) Consulté 3376 fois
Daniel
Messages : 15455
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO] points d'arrêts

Message par Daniel »

Bien vu pour le bug. Je n'avais pas pensé au Read ou Write de deux octets par la même instruction, je ne traite que le dernier :oops:
C'était déjà le cas dans les versions précédentes. La prochaine version sera corrigée.

J'ai bien compris la demande en cas de recouvrement de ROM par la RAM. Il faut s'arrêter uniquement si la banque de RAM spécifiée est bien celle utilisée. Finalement il n'y a pas de calcul d'adresse, il suffit de tester le numéro de banque spécifié dans $E7E6 si le bit 5 est positionné ($A7E6 avec le MO6). Je vais ajouter un nouveau cas : "Ram recouvrant la rom" avec un numéro de banque à renseigner.
Daniel
L'obstacle augmente mon ardeur.
Bentoc
Messages : 103
Inscription : 14 sept. 2019 13:35
Localisation : Var - France

Re: [DCMOTO] points d'arrêts

Message par Bentoc »

Super !
Répondre