[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

Bentoc
Messages : 103
Inscription : 14 sept. 2019 13:35
Localisation : Var - France

[DCMOTO] points d'arrêts

Message par Bentoc »

Bonjour,

J'utilise beaucoup le mode de mise au point de DCMOTO (entre 2 et 3 heures par jours :D ).
J'ai une petite proposition pour améliorer l'usage des points d'arrêts :
Ajouter une case à coté de l'adresse qui permettrait de renseigner un numéro de page RAM (optionnel).

En effet quand on utilise bcp de pages de RAM, le point d'arrêt se déclenche sur tous les appels/lecture/écriture de l'adresse spécifiée, peu importe la page montée en zone cartouche ou données. Il faut donc vérifier a chaque appui si on est au bon endroit et ça peut prendre du temps avant d'y arriver.

Ce n'est qu'une proposition, je ne sais pas si d'autres sont intéressés ...
Daniel : bonne ou mauvaise idée ?
Daniel
Messages : 15449
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO] points d'arrêts

Message par Daniel »

Oui, c'est une bonne idée.
Je programme surtout sur MO5, c'est pourquoi je n'en ai jamais eu l'idée, mais sur TO8 ce serait bien. Je vais regarder...
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 6799
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO] points d'arrêts

Message par __sam__ »

Est-ce que cela permettrait de distinguer les accès ram video FOND/FORME ? Idem avec les bank cartouche ? Etant donné la complexité des différentes banks rom/ram, je pense qu'une bonne idée ne serait pas forcément un bouton, mais autoriser une écriture étendue <ADRESSE>@<ESP><BANK>. ESP(ace)=ROM/RAM/VID(eo), et BANK le numéro de la banque ROM ou RAM correspondante (exemple A000@RAM15 ou 1FE0@ROM1 ou 4014@VID1). Par défaut on ne mets pas le @ et ce sont les adresses classiques qui sont utilisées comme avant.
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 : 15449
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO] points d'arrêts

Message par Daniel »

C'est effectivement assez compliqué, avec le MO6 et le TO7/70 qui ont d'autres systèmes de banques. Il y a aussi des contrôleurs (en particulier le CD 90-351) avec plusieurs banques, les MEMO7, la Megarom, les MEMO5, la Multirom MO5, et j'en oublie certainement d'autres.

Il faut trouver un système d'interface simple, comme celui proposé par __sam__, mais qui couvre tous les cas de figure.
On peut aller progressivement, en commençant par la banque RAM, et si c'est satisfaisant ajouter ensuite la ROM, la VRAM, etc.
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 »

Exactement Sam, dans l’idéal il faudrait effectivement traiter tous les espaces qui peuvent commuter: ROM,RAM et Vidéo comme tu l’a indiqué.

[Edit]D'accord avec toi Daniel, l'implémentation peut devenir assez complexe avec toutes les machines. La solution de Sam permet d'implémenter la fonction progressivement et sans surcharger l'interface existante du debugger. La gestion de la RAM est un bon début.
Avatar de l’utilisateur
jb_jb_fr
Messages : 375
Inscription : 29 mars 2010 10:36
Localisation : Essonne (91)
Contact :

Re: [DCMOTO] points d'arrêts

Message par jb_jb_fr »

Bonsoir
Daniel a écrit : 25 mai 2021 20:52Il faut trouver un système d'interface simple, comme celui proposé par __sam__, mais qui couvre tous les cas de figure.
Daniel, voila une solution que j'ai implémenté dans l'emulateur XEmul56.
L'émulateur est capable de géré le MO5,MO5NR, MO5N, MO6, TO7-70, et TO9+
Dans dans tous les cas, la mémoire dans l'émulateur est la même:
J'alloue une grosse plage mémoire que je découpe en plage de 16Ko
Et ensuite, je ne gere que des banques.
Donc que ce soit du MO6, ou du TO7, ou du ..., j'ai tout le temps l'utilisation de la banque 0, et de la banque 1, et de la banque ...
Et les banques sont mappé en fonction de la machine.
Donc si tu decide de mettre un Bkpt dans la banque 0, en fonction de la machine, ce ne sera pas forcement au même endroit.
Il suffit juste apres de savoir, pour l'utilisateur, a quoi correspond un No de banque, et pour toi c'est plus facile à gérer.
Surtout que avec le Gate array MO6/TO8/TO9+, la même banque peut être à plusieurs endroit.

Donc de cette manière c'est plus facile à gérer pour toi

J'ai fait pareil pour les ROM, car il y a aussi des banques de 16Ko qui sont switché.

Et l'avantage avec cette méthode, c'est que tu n'as pas à savoir si c'est de la vidéo, ou une cartouche ou de la ram interne
Car sur le Gate array, tu peux aussi switcher des banques vidéo

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

Re: [DCMOTO] points d'arrêts

Message par Daniel »

En faisant la synthèse de toutes les idées j'arrive à cette proposition :

debug.png
debug.png (12.68 Kio) Consulté 4066 fois

- Si la banque n'est pas renseignée elle n'est pas testée.
- Si elle est renseignée elle est toujours testée (même si l'adresse du point d'arrêt est en dehors de la banque, pour éviter une vérification en fonction du modèle d'ordinateur).

J'attends vos remarques pour commencer la programmation...
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
jb_jb_fr
Messages : 375
Inscription : 29 mars 2010 10:36
Localisation : Essonne (91)
Contact :

Re: [DCMOTO] points d'arrêts

Message par jb_jb_fr »

Daniel

Merci pour cette proposition, mais j'ai un peu de mal a comprendre les différences:
- Quelle différence y'a t'il entre de la RAM et de la VRam ?
- Quelle différence y'a t'il entre Syst et ROM ?

C'est pas tres clair pour moi :-(

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

Re: [DCMOTO] points d'arrêts

Message par Daniel »

Dans les machines de dernière génération, il y a des mécanismes de commutation de banques différents pour :
- Les n pages de RAM utilisateur
- Les 2 pages de RAM vidéo (Couleur/Forme)
- Les 2 pages de ROM système (Moniteur)
- Les 4 pages de ROM interne (Basic et extra-moniteur)

Le système proposé teste tout simplement chaque commutateur. Mais c'est une simplification (peut-être abusive ?) car il y a aussi des mécanismes de recouvrement de la ROM par la RAM, de la RAM vidéo par la RAM utilisateur, de la ROM interne par la ROM cartouche. Sans compter les commutations de pages RAM en mode "compatibilité" TO9-TO7/70, la MegaROM, et j'oublie peut-être d'autres subtilités.

Je suis partisan de simplifier, car sinon le test rigoureux à chaque instruction, en fonction de l'adresse, du modèle d'ordinateur, du matériel connecté, est d'une complexité incroyable. Il ralentirait beaucoup l'exécution en mode mise au point.
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 »

En renseignant une page dans la nouvelle case "ram" du point d'arrêt, tu vas tester la commutation actuelle (celle qu'on peut voir dans le second écran de l'outil de mise au point dans "Commutation pages mémoire", "Ram paginée") ?

Sur TO8, si je veux mettre un point d'arrêt sur l'exécution d'une instruction sur une page de RAM montée en zone cartouche du coup ça ne fonctionnera pas ... et c'est ce que je cherche à faire :D

Sur le principe la solution me semble bonne, mais il faudrait plutôt avoir une seule case pour le numéro de page (de toute façon on ne saisira jamais qu'une seule valeur), et à coté une liste déroulante avec tous les points de commutation possibles, c'est à dire ceux qu'on voit en seconde page de l'outil de mise au point ... en ajoutant "Ram cartouche" pour le TO8 si possible ? :mrgreen:

Ce principe me semble pas mal effectivement, ça revient à faire un breakpoint conditionnel avec une liste prédéfinie de variables (ici les points de commutation).

D'ailleurs c'est une autre piste à explorer ... peut être plus simple à implémenter ?
Je ne me souviens plus si tous les états de commutation peuvent être lus en mémoire.
Si c'est le cas, au lieu de faire ce qui est proposé au dessus, on aurait deux cases supplémentaires : "adresse" et "valeur" et le point d'arrêt ne se déclencherait que si l'adresse contient la valeur indiquée.
Bon ce n'est pas si simple car le numéro de page n'est en général qu'une partie de la valeur, ça veut dire qu'il faudrait avoir une case "masque" en plus ...

C'est une autre idée ... peut être moins facile à utiliser, mais qui pourrait rendre plus de services ?
Daniel
Messages : 15449
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO] points d'arrêts

Message par Daniel »

Je cherche à trouver la solution la plus simple pour l'utilisateur sans trop compliquer la programmation. La suggestion de Bentoc (une case pour le numéro de page suivie du nom du commutateur choisi dans une liste) me plaît bien. Les numéros de pages et le nom du commutateur seraient exactement les mêmes que dans la deuxième fenêtre de l'outil de mise au point (y compris Rom cartouche et Rom contrôleur, que j'avais ignorés dans la première proposition).

La deuxième suggestion est trop compliquée. Le commutateur n'est pas toujours accessible en mémoire, ou il est la combinaison de quelques bits d'un octet et de quelques bits d'un autre octet. De plus les adresses varient selon le modèle d'ordinateur.

Je vais préparer un nouveau projet de disposition de l'écran de choix du point d'arrêt...
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
6502man
Messages : 11571
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [DCMOTO] points d'arrêts

Message par 6502man »

Daniel si il est possible d'avoir le choix du type de breakpoint (Exec, Read, Write) par breakpoint ?

Si évidemment ca ne ralenti pas trop l'émulation ou si ca ne te fait pas trop de travail ;)

Ca pourrait donner ceci :
DCdebug.jpg
DCdebug.jpg (23.86 Kio) Consulté 4002 fois
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Daniel
Messages : 15449
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO] points d'arrêts

Message par Daniel »

Tu as raison, c'est très logique de pouvoir faire un choix différent pour chaque point d'arrêt.

Ça amène une autre question : Pour un même point d'arrêt, utilisez-vous parfois plusieurs options parmi Exec, Write et Read ?
Personnellement j'en sélectionne une, mais jamais plus. D'où ma nouvelle proposition :

debug.png
debug.png (7.34 Kio) Consulté 3978 fois

On pourrait quand même tester à la fois Write et Read, par exemple, mais il faudrait utiliser deux points d'arrêt avec la même adresse.
Qu'en pensez-vous ?
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 »

De mon point de vue c’est parfait.
__sam__
Messages : 6799
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO] points d'arrêts

Message par __sam__ »

Il faudrait que la dernière colonne ne soit pas PC, mais le plus générique: "ADR(esse)".

Une possibilité de type "Lec(ture)/Ecr(iture)" (ou L/E, R/W) éviterait de gaspiller un breakpoint car il y en a que 3.

D'ailleurs est-ce que 3 points d'arrêt suffisent ? Perso sans doute que oui, mais j'aimerais avoir une notion d'historique des points d'arrêts pour pouvoir retrouver les anciens que j'ai posé lors de la progression dans l'analyse du code d'un jeu par exemple. Ok je pourrais utiliser un crayon et un papier, c'est vrai, mais peut-être qu'une trace des changements de point d'arrêt à l'écran quelque part pourrait être utile ?

Ca ferait presque penser à ce qu'il ya eu à un moment au niveau des traces visibles à l'écran. Peut-être qu'une petite liste texte de N lignes (pas beaucoup) contenant les derniers changements et infos de point d'arrêts serait utiles. Dans les infos, on peut indiquer "arrêt sur Exec Ram paginée#15 ADR=$XXXX". :idea: Hum... en fait ceci pourrait figurer dans le fichier TRACE directement et la petite liste n'afficher que les N dernières lignes du fichier (c'est pratique d'avoir sous les yeux, sans sortir l'artillerie, les 1-2 dernières instructions juste avant un arrêt dans le débugger).
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
Répondre