Moniteur

Accueil

                                                        #7fff     LRAM    EXT #0a

  LL     OOOOOO  OOOOOO  LLLLLL
  LL     OO  OO  OO      LL  LL
  LL     OO  OO  OO OOO  LL  LL
  LLLLL  OOOOOO  OOOOOO  LLLLLL

| Welcome in Orgams Azerty Edition  08-02-2015
| Overlanders--Vanity--Drill--Bombseb--Camillo
| Press CONTROL-H at any time to invoke Hathor
| Banks used : #7fdf and below.
| No source loaded.

>_

Trace

Commandes clavier.

Trace (exécution Z80 simulée)

On reprend le mapping clavier de Dams, enrichi de celui de gdb (débuggueur unix) :

  1. facilite la bascule de l'un à l'autre.
  2. faute de mieux.
  • SPACE / S : Exécute une unique instruction ('S' comme step -le pas minimal- ou subroutine). Appel : mon_trace_step
  • N : Next (line) Trace rapique jusqu'à la prochaine ligne. Pour la plupart des instructions, identique à S, mais si CALL ou RST, on retrouve la main après le parcourt complet de la sous-routine. Permet de passer rapidement les routines fiables, tout en les exécutant (eg, vecteurs système). Appel : mon_trace_next
  • R : Ret(urn) Trace rapide jusqu'à la fin de routine courante. C'est à dire, rend la main après avoir rencontré un RET au niveau de pile courant. Appel : mon_trace_to_return
  • J (jump) : Repasse en exécution Z80. Appel : mon_jump
    • Question : à partir du PC en cours, ou à partir de ligne sélectionnée (cf 'navigation' plus bas) ? Demander à l'utilisateur quand les 2 diffèrent ?
    • Suggestion : Préférer "CONTROL-J" ou "SHIFT-J", vu que la commande est plus dangereuse (on perd le contrôle).
  • Q : Passe de trace rapide à trace contrôlée (pas de routine à appeler ! C'est détecter par la routine de trace). Passe de trace contrôlée à moniteur.

Navigation sans exécution

On peut en outre naviguer dans le source sans exécuter les opcodes. Cela évite de devoir sortir du mode trace pour observer discrètement le code.

  • Flèches haut et bas : on se balade dans le source.
  • CONTROL-ENTER ou flèche droite : va à sous-routine (quand ligne sélectionner comporte un CALL/Jump). Appel: org_get_callee (paramètre HL=Adr courante)
    • NB : CONTROL-ENTER reproduit le comportement dans l'éditeur, mais flèche droite me semble assez intuitif aussi.
    • NB2 : Si aucun saut à l'adresse courante (on le sait car org_get_callee renvoit NC dans ce cas), et éventuellement, comportement de flèche droite par opposition à CONTROL-ENTER), aller à la sous-routine dans "l'historique de navigation".
  • CONTROL-RETURN ou flèche gauche : retourne à code appelant. A priori pas de routine à appeler, au moniteur de gérer la mémoire de navigation. Cela dit, quand on est déjà au plus haut niveau on peut tenter de retrouver le code appelant, via : org_get_caller.

Cette navigation autorise une commande supplémentaire, très puissante :

  • G : "Goto" Trace rapide jusqu'à la ligne pointée (non incluse). Parfait pour s'extirper d'une boucle ou sauter un bloc peu digne d'intérêt. Appel : mon_trace_to_pc (paramètre : HL = adresse stop PC).

Divers

  • CONTROL E : Bascule ROM haute (utile en mode trace ?!?)
  • CONTROL R : Bascule ROM basse (utile en mode trace ?!?)

TODO (en vrac pour l'instant)

  • Lifting (espace de 4 pixels ? fonte spéciale hex de 5+1 ?)
  • Possibilité de changer un registre, avant appel routine ou retour dans la trace. Syntaxe préconisée :
SP=BFA0

Ce n'est pas une si idée si heureuse de permettre l'hexa sans '#'.

  • On accepte les mêmes expressions que dans le source code (labels + opération mathématiques). Autant rester cohérent. Sous Dams, c'est surprenant car certains calculs qui passe sous le moniteur sont considérer comme trop gros pour des registres 8 bits à l'assemblage, quand bien même la valeur finale est clairement < 256.
  • De toute façon on sera amené à entrer le moins de valeurs numériques possibles, grâce aux labels (c'est le 'S' de D.A.M.S.) et aux facilités de navigation.

Nouvelle idée en échange : Pouvoir changer les registres en naviguant sur le tableau de bord Z80 !

Control (freak) out

Actuellement, les émissions OUT sont collectées, sans être renvoyées sur les ports, à l'exception du FDC et des extensions (Eg FCxx à FFxx).

On peut donc envisager une commande ON/OFF d'activation OUTs (envois effectifs en hard), pour chacun des circuits : VGA mode et palette (*), CRTC, PSG.
Généralement, ça ne fait guère de sens au regard de la lenteur de l'émulation, mais ça peut se révéler utile :

  • bascule dans le bon mode, avec la bonne palette.
  • vérifications rustres.

(*) Ceci ne concerne pas la connection ROM/RAM, qui se voit nécessairement émulée.

A-venir

Disponible très rapidement, à prendre en compte pour les considérations d'affichage.

Suivi code source

Mon module permettra de donner la ligne de source correspondant à une adresse PC.
Cela offrira d'afficher la partie du source. Cf description routine codec_get_line, nommée org_get_line pour Orgams, et oGetLine comme point d'entrée pour Dams !

NB, une ligne de source peut contenir plusieurs opcodes :

       ld (hl),e:inc l
       ld (hl),d:inc l
       ld (hl),c:inc l
       ld (hl),b

Pile d'appel

Liste des CALLs en cours, le plus récent en premier (pour respecter l'ordre de la pile). Par exemple, si on break en plein milieu de la routine merge_pixels, on pourrait obtenir :

merge_pixels
prepare_trame
genere_texture
init
---#9B00 started from orgams---
Sauf mention contraire, le contenu de cette page est protégé par la licence Creative Commons Attribution-ShareAlike 3.0 License