Manuel du débogueur d’Oricutron

Cette version française a été établie d’après le fichier ReadMe.txt du 15/05/2020 (Oricutron version win64-20200515).  La version PDF de cet article est disponible (voir en fin d’article).

English speaking Oricians can directly use the official Oricutron Manual (ReadMe.txt file released with Oricutron).

Au lancement d’Oricutron, il faut presser sur F1 pour accéder au menu principal, qui permet entre autres choses, d’ajouter un clavier Oric virtuel, ce qui peut être utile, voir indispensable.

Touches actives dans les menus en général

Flèches           Se déplacer dans le menu

Return            Exécuter l’option choisie

DEL                 Revenir en arrière

ESC     Quitter le menu (ou touche Backspace ou BACK avec la souris)

Touches actives dans le mode émulateur

F1                   Aller au menu principal (sortie par ESC ou Backspace ou BACK avec la souris).

F2                   Entrer dans le mode Débugueur / Moniteur (sortie par F2).

F3                   Reset soft (NMI)

F4                   Reset hard (reboot)

Shift+F4        Reset Jasmin

F5                   Basculer entre les 3 états de la ligne d’information sous l’écran.

F6                   Basculer entre vitesse normale / vitesse x20

F7                   Enregistrer toutes les disquettes modifiées

Shift+F7        Enregistrer toutes les disquettes modifiées sous un nouveau nom.

F8                   Basculer entre mode fenêtre / mode plein écran

F9                   Sauver le fichier tape

F10                 Démarrer / arrêter la capture vidéo AVI

F11                 Copier l’écran texte dans le presse-papiers.

F12                 Coller le presse-papiers dans l’écran texte.

Help               Aide (pour Amiga, MorphOS and AROS)

AltGr              Modificateur supplémentaire

L’intérêt du couple F11/F12 mérite d’être souligné, car il offre une passerelle intéressante entre Oricutron et le système hôte.

Le débogueur / moniteur d’Oricutron

Pour accéder au mode débogueur / moniteur d’Oricutron, vous devez presser la touche F2 (F2 est en fait une bascule entre le débogueur et l’émulateur qui peut être utilisée à tout moment sans perte, ni dans l’émulateur, ni dans le débogueur / moniteur). Un écran apparaît, structuré comme celui de la  Fig. 1 : Cet écran est composé de 4 fenêtres :

Fig.1 Etat du débogueur apres assemblage de code LM (a $9812) et positionnement du PC (r pc $9812).

1) Ecran de l’Oric

2) Status du 6502 (“6502 Status”)

3) Une zone dans laquelle alternent les 3 fenêtres suivantes : Moniteur (“Monitor”) / Débogueur (“Debug console”) / Dump mémoire (“Memory watch”). On passe d’une fenêtre à l’autre avec la touche F3.

4) Une zone dans laquelle alternent les 2 fenêtres suivantes : Informations VIA (“VIA Status”) et Informations AY (“AY Status”). On passe d’une fenêtre à l’autre grâce à la touche F4.

Touches actives dans le mode Débogueur / Moniteur

Dans ce mode, outre l’écran de l’Oric, les fenêtres suivantes sont visibles :

“6502 Status” (Fig. 1 en haut à droite).

Fig. 2 Fenêtre “Debug console” (vide pour l’instant).

“Monitor” (Fig. 1 en bas à gauche) ou “Debug console” (Fig. 2) ou “Memory watch” (Fig. 3).

Fig. 3 Fenêtre “Memory watch” (ici on voit la page zéro).
Fig. 4 Fenêtre “6502 status” (après réinitialisation de CY par F9).

“VIA Status” (Fig. 1  en bas à droite) ou “AY Status” (Fig. 5).

Fig. 5 Fenêtre “AY status”.

Les touches suivantes sont actives de manière générale, sans qu’il soit nécessaire d’indiquer une fenêtre en particulier.

F1     Aller au menu principal (retour au mode émulateur par ESC ou Backspace ou BACK avec la souris, mais F2 permet de retrouver le  Débogueur / Moniteur au même point).

F2     Passer dans le mode émulateur (retour dans le  Débogueur / Moniteur par la touche F2).

F3     Pour basculer entre les fenêtres Moniteur (“Monitor”) / Débogueur (“Debug console”) / Dump mémoire (“Memory watch”).

F4     Pour basculer entre les fenêtres Informations VIA (“VIA Status”) et Informations AY (“AY Status”).

F9     Pour réinitialiser le compteur de cycles (ligne CY= dans la fenêtre 6502) (Fig. 4).

F10   Pour exécuter la ligne de code marquée > dans la fenêtre 6502 (Fig. 1 en haut à droite).

F11   Comme F10, mais s’il s’agit d’un sous-programme, celui-ci est exécuté en bloc,  sans affichage du détail des lignes de ce sous-programme.

F12   Pour sauter l’instruction marquée > et pointer sur l’instruction suivante. La paire d’écrans “VIA Status” ou “AY Status” affichent des informations en fonction du contexte et ne disposent pas de commandes spécifiques. Par contre, chacune des fenêtres “Monitor”, “Memory watch” et “Debug console”, possède des commandes propres, en plus des commandes listées ci-dessus.

Touches actives dans le mode Console (fenêtre “Debug console”) 

Flèches Haut / Bas     Historique des commandes.

Touches actives dans le mode Dump Mémoire (fenêtre “Memory watch”)

Flèches Haut / Bas                Scrolling Haut / Bas, ligne par ligne.

Shift + Flèches Haut / Bas    Scrolling Haut / Bas, écran par écran.

Page Up/Page Down              Idem.

Fig. 6 Fenêtre “Memory watch” (Splitée par S).

Chiffres hexadécimaux        Pour changer de zone mémoire à visualiser. Exemple $9800 affiche le contenu de la mémoire à partir de $9800 (Fig. 6).

S          Activer / désactiver le mode fractionné (Split). Dans ce mode, deux demi-fenêtres “Memory watch” permettent de visualiser deux zones différentes de la mémoire (Fig. 6).

Tab     Changer de demi-fenêtre “Memory watch” en mode fractionné. La demi-fenêtre active est indiquée par une coche dans la marge gauche. Les commandes ne sont alors effectives que sur cette demi-fenêtre (Fig. 6).

Instructions en mode moniteur (fenêtre “Monitor”)

En entrée les valeurs numériques sont décimales par défaut. Elles peuvent être hexadécimales si elles sont préfixées par $ ou binaires si elles sont préfixées par %. Presque toutes les sorties sont en mode hexadécimal. Là où vous pouvez entrer un nombre ou une adresse, vous pouvez transmettre un registre CPU ou VIA. (Les registres VIA sont préfixés par V, par exemple VDDRA). Là où vous pouvez entrer une adresse, vous pouvez également utiliser un symbole. En plus des commandes décrites au paragraphe “Touches actives dans le mode Débogueur / Moniteur”, voici les commandes spécifiques du mode Moniteur :

?           Affiche toutes les commandes disponibles (RETURN pour avoir l’écran suivant).

Flèches Haut / Bas       Historique des commandes.

a <addr>            Assembler le code à l’adresse <addr> (assemble) (Fig. 1). Au prompt entrer une ligne de code. L’assembleur passe à la ligne suivante, presser RETURN pour finir.

bc <bp id>          Effacer le point d’arrêt indiqué (clear breakpoint).

bcm <bp id>      Effacer le point d’arrêt mémoire indiqué (clear memory breakpoint).

bl                         Lister les points d’arrêt (list breakpoints).

blm                      Lister les points d’arrêt mémoire (list memory breakpoints).

bs <addr> [zc]   Définir un point d’arrêt classique (set breakpoint) (pour les modificateurs zc, voir plus loin dans la partie consacrée aux points d’arrêts).

bsm <addr> [rwc]        Définir un point d’arrêt mémoire (set memory breakpoint) (pour les modificateurs rwc, voir plus loin dans la partie consacrée aux points d’arrêts).

bz                          Supprimer  les points d’arrêt (zap breakpoints).

bzm                      Supprimer  les points d’arrêt mémoire (zap memory breakpoints).

Fig. 7 Fenêtre “Monitor” (désassemblage par la commande d $9812).

d <addr>              Déassembler à partir de l’adresse <addr> (disassemble) (Fig. 7).

fd <addr> <end> <file>  Désassembler dans un fichier, de <addr> à <end> (disassemble to file). Ce fichier <file> est sauvé dans la racine du répertoire Oricutron. Aucune extension, ni entête, n’est ajoutée. Il ne contient que les data bruts, sans informations complémentaires (adresses, type etc.). NB. L’ancienne commande df <addr> <end> <file> n’est plus reconnue.

fw <addr> <len> <file>  Sauver une zone mémoire sur la disquette (bin file write) (Fig. 10). Ce fichier <file> est sauvé dans la racine du répertoire Oricutron. Aucune extension, ni entête, n’est ajoutée. Il ne contient que les data bruts, sans informations complémentaires (adresses, type etc.). NB. L’ancienne commande wm (write memory to disk) n’est plus reconnue.

fr <addr> <file>           Charge un fichier en mémoire à l’adresse <addr> (bin file read) (Fig. 10). Il s’agit d’un fichier brut préalablement sauvé dans la racine du répertoire Oricutron (ou d’un fichier similaire reconstruit). Il faut donc préciser l’adresse cible et le nom exact.

m <addr>                       Dumper les 128 octets présents en mémoire à partir de l’adresse <addr> tout en restant dans la fenêtre Moniteur (memory) (Fig. 9). Presser la touche RETURN pour afficher la demi-page suivante. Cette commande est moins puissante que la commande mw ci-après.

mm <addr> <valeur>  Modifier la mémoire (modify memory) (Fig. 8).

Fig. 8 Fenêtre “Monitor” (mm modify memory).

mw <addr>             Afficher la fenêtre Dump Mémoire et dumper à partir de l’adresse <addr> (memory watch at addr) (Fig. 3). Cette commande est plus puissante que la commande m ci-dessus (Fig. 9) (voir les nombreuses touches actives dans ce mode Dump Mémoire).

Fig. 9 Fenêtre “Monitor” (m dump memory).

nl <fichier>             Charger une recopie d’écran (load snapshot) (pas d’extension par défaut).

ns <file>                 Enregistrer une recopie d’écran (save snapshot) (pas d’extension par défaut).

r <reg> <val>         Initialiser le registre <reg> avec la valeur <val> (set register). Exemple “r pc $9812” positionne le Program Compter en $9812 (Fig. 1, fenêtre 6502 status en bas à gauche). Les touches F10 et F11 permettent d’exécuter le code qui se trouve à cette adresse.

Fig. 10 Fenêtre “Monitor” (commandes fw et fr).

q, x ou qm               Quitter le moniteur et retourner à l’émulateur (quit, exit, quit moniteur)

qe                            Quitter l’émulateur (quit emulator)

sa <nom> <addr>  Ajouter ou déplacer un symbole utilisateur (add symbol)

sk <nom>        Supprimer un symbole utilisateur (kill symbol)

sc                      Symboles non sensibles à la casse (symbols not case-sensitive)

sC                      Symboles sensibles à la casse (symbols Case-sensitive)

sl <file>            Charger les symboles utilisateur (symbols load) (pas d’extension par défaut)

sx <file>           Exporter les symboles utilisateur (export symbols) (pas d’extension par défaut)

sz        Supprimer les symboles utilisateur (zap symbols).

Points d’arrêt

Parmi les commandes listées ci-dessus, 8 sont consacrées aux points d’arrêt. C’est dire l’importance qu’ils occupent dans le débogueur / moniteur d’Oricutron. Voici quelques précisions.

Il existe deux types de points d’arrêt. Les points d’arrêt normaux ou “classiques” se déclenchent lorsque le processeur est sur le point d’exécuter l’instruction à l’adresse du point d’arrêt. Les points d’arrêt “mémoire” se déclenchent lors de l’accès ou de la modification de l’adresse du point d’arrêt.

Les points d’arrêt “classiques” peuvent utiliser les modificateurs z et / ou c.

bs $0C00        Arrêt lorsque le processeur est sur le point d’exécuter du code à l’adresse $0C00

bs $0C00 z     Idem et met le compteur de cycles à zéro

bs $0C00 zc   Met le compteur de cycles à zéro et continue (pas d’arrêt)

bs $0C00 c     Continue l’exécution (le point d’arrêt est désactivé)

L’objectif principal des modificateurs z et / ou c est de faciliter le comptage des cycles.

Si des symboles sont chargés, ils peuvent être utilisés à la place des adresses absolues.

Les points d’arrêt “mémoire” peuvent être déclenchés de trois manières: lorsque le processeur est sur le point de lire (r pour read), ou d’écrire (w pour write) à l’adresse ou lorsque la valeur à l’adresse change pour une raison quelconque (c pour change). Le choix du modificateur c  (c pour change) n’est pas très heureux, car pour les points d’arrêt normaux, c est déjà utilisé pour continue. Voici quelques exemples d’utilisation :

bsm $0C00 r       Arrêt lorsque le processeur est sur le point de lire à l’adresse $0C00

bsm $0C00 rw     Arrêt lorsque le processeur est sur le point de lire ou d’écrire à l’adresse $0C00

bsm $0C00 c       Déclenche une pause après le changement du contenu de $0C00

bsm $0C00 rwc          Déclenche une pause juste avant que le processeur ne lise ou n’écrive à l’adresse $0C00 ou juste après le changement, pour une raison quelconque, du contenu de $0C00.

Fig. Fenêtre “Ecran Oric” (résultat de l’exécution).

Conclusion

Ce manuel est certes très succinct et de nombreuses explications pourraient encore être ajoutées. Néanmoins, j’espère qu’il vous sera utile, comme il l’est pour moi. N’hésitez pas à me faire connaître les manques et les erreurs, afin que je puisse l’améliorer.

Laisser un commentaire