D.A.M.S

Produit Micro Application pour AMSTRAD CPC 464, 664 et 6128

D.A.M.S est un logiciel intégrant un assembleur, un moniteur et un désassembleur symbolique pour développer et mettre au point facilement des programmes en langage machine sur les micro ordinateurs AMSTRAD. Les trois modules sont co-résidents en mémoire ce qui assure une grande souplesse d'utilisation. Vous pouvez notamment utiliser un éditeur plein écran, un assembleur immédiat, un désassembleur symbolique, une trace et beaucoup d'autres fonctions très puissantes. D.A.M.S est entièrement relogeable et est bien évidemment écrit en langage machine.

  • L'éditeur est du type plein écran et sans numéro de ligne. Des commandes spéciales permettent la recherche ou la substitution de mots ou de phrases, l'effacement, la duplication et le déplacement de blocs de textes.
  • L'assembleur Z80 est doté de pseudos instructions d'assemblage telles que IF, THEN, ELSE, et DEFB, DEFW etc… Il permet l'assemblage de source en plusieurs fichiers. La table des labels générée peut être ensuite utilisée par le moniteur, le désassembleur et le mode trace.
  • Le moniteur comprend plus de 15 commandes pour utiliser trace, dump, affichage et modification des registres, exécution d'un programme…
  • Le désassembleur peut créer du texte source à partir d'un programme en langage machine avec génération automatique de labels et DEFB.. Le source peut être modifié à partir de l'éditeur et réassemblé.
  • La trace comprend un mode rapide pour mettre au point des routines importantes. Chaque instruction est analysée avant son exécution pour éviter tout blocage système.



LOGICIEL DEPOSE A L'APP

© Micro Application 1985
13, Rue Sainte Cécile, 75009 PARIS - Tél. : (1) 47 70 32 44

Téléchargements

Sans accord de l'APP :)

Structure

DAMS occupe 10485 octets. Il contient sa propre pile machine et sa propre routine d'affichage, ce qui lui garantit son immunité lors d'exécution de routines par la trace. Il fait néanmoins directement appel à deux routines en ROM qui permettent de saisir les touches du clavier.

Les autres appels de routines extérieures se font lors d'exécutions de commandes utilisant un périphérique et toujours par les vecteurs du système d'exploitation de manière à pouvoir dévier ces routines. Par exemple, ceci permet d'utiliser un lecteur de cassette ou de disquette lors d'exécution des commandes P ou G.

A la suite de DAMS se trouve le fichier texte et une éventuelle table de symboles. Entre ces 2 zones se trouve une plage de 256 octets qui est toujours dans la ram centrale de 32 K et qui contient la pile machine et quelques routines. L'adresse de fin de cette zone est donnée par la valeur de Hmem (commande X).

Chargement

DAMS est entièrement relogeable et peut-être chargé de l'adresse 1000 à 28000 de plusieurs façons:

RUN "DAMS"

Ceci va charger un programme basic qui va charger DAMS à l'adresse #4000. Si pendant le chargement du programme basic vous laissez la touche espace enfoncée jusqu'à l'exécution, alors le programme va vous demander à quelle adresse vous voulez charger DAMS. Cette méthode de chargement présente l'inconvénient d'effacer un éventuel programme basic déjà existant.

Pour éviter cela, il suffit de charger directement le binaire de DAMS à l'adresse nn que vous choisissez :

MEMORY nn-l:LOAD "DAMS.BIN", nn:CALL nn

Dans tous les cas, pour réaccèder à DAMS, il suffira de faire CALL nn (nn étant l'adresse où vous l'avez chargé).

De même, un programme exécuté par DAMS grâce à la commande J, peut se terminer non pas par un RET mais par un JP nn.

Ce point d'entrée, nn, sauve le contenu des registres du processeur.
Un autre point d'entrée qui peut être utilisé est l'adresse du moniteur équivalente à nn+2354. Ce point d'entrée ne mémorise cependant pas le contenu des registres.

Le Moniteur

Lorsque DAMS est appelé, il se lance en mode moniteur et attend qu'une commande soit entrée par l'utilisateur. Celles-ci peuvent être tapées en majuscule ou en minuscule.

<CAPS LOCK>

Passe de majuscule à minuscule et inversement.
DAMS accepte indifféremment les majuscules et les minuscules. L'assembleur accepte aussi les minuscules.

<CTRL> R

Fait basculer l'indicateur de haut de page sur LRAM ou LROM.
Vérifiez que l'indicateur est bien positionné avant toute commande telle que D, H, K, T, R, J$ etc…

  • LRAM signifie que la RAM est en lecture dans plage d'adresse #0000 à #3FFF.
  • LROM signifie que la ROM basse est en lecture dans la plage d'adresse #0000 à #3FFF.

<CTRL> E

Fait basculer l'indicateur de haut de page sur URAM ou EXT:n

  • URAM signifie que la RAM est en lecture dans plage d'adresse #C000 à #FFFF.
  • EXT:n signifie que la même zone est occupée par la ROM haute numéro n. (Voir commande E).

Comme pour la commande <CTRL> R, vérifiez bien cet indicateur.

<CTRL> B

Bascule la base d'affichage des nombres entre décimal et hexadécimal.

<CTRL> P

Active/Désactive la sortie vers l'imprimante.

Ls

Permet d'accéder au source dans l'éditeur au label s si il est spécifié. Dès que les caractères de s correspondent aux premiers caractères du label, le texte est affiché.

  • Si la chaîne s est un ;, le source est affiché à partir du début.
  • Si la chaîne s est nulle le source est affiché à partir de la dernière position connue du curseur “>”.
  • Si l'imprimante a été sélectionnée (<CTRL> P) alors le texte est transmis à l'imprimante.
  • Si la chaîne s n'est pas trouvée dans le texte alors la commande n'a pas d'effet.

Exemples

  • Affiche l'éditeur de source à la dernière position connue : L
  • Affiche l'éditeur de source au label loop : Lloop

N

Supprime de la mémoire le source et sa table des symboles. Pour ressusciter un source effacé par une commande n malencontreux, poker 59 dans l'adresse de “Text” (donnée par la commande X).

Xn

Xl affiche une table de symboles (créée par un assemblage).
Elle peut être imprimée si auparavant l'imprimante a été sélectionnée.

X0 ou X donne différentes adresses occupées par DAMS :

  • Text : c'est l'adresse du 1er octet du fichier texte.
  • End : c'est l'adresse du dernier octet du fichier texte.
  • Hmem : c'est l'adresse du dernier octet occupé par DAMS (Voir commande M)

O<expression numérique>

Evalue une expression numérique et affiche le résultat.

Tous les types de nombres et d'opérateurs décrits dans ce manuel peuvent être utilisés.
Si une table de symboles existe, des labels peuvent figurer dans l'expression numérique.

Exemples :

  • O 3+5
    affichera comme résultat 8

B

Quitte DAMS, généralement pour retourner au BASIC.

Qnn,n

Poke la valeur 8 bits n à l'adresse nn. Si nn est occupée par DAMS, l'erreur 12 est lancée.
n et nn peuvent être des expressions numériques.

Wnn1,nn2

Même effet que Q mais sur 2 octets

Mnn

Fixe la dernière adresse mémoire occupée par DAMS (Hmem).

Toute la zone mémoire comprise entre l'adresse de début de DAMS et Hmem est exclusivement réservée à DAMS. Toute commande telle que Q, W, A… qui tente de modifier un octet de mémoire occupé par DAMS, est clôturée par l'erreur Bad Location Error.

La valeur de Hmem est visualisée par la commande X.

Plus la valeur Hmem sera basse et moindre sera l'espace réservé au fichier source et inversement.

Toutefois, la valeur de Hmem devra se situer dans la RAM centrale de 32K.

Vous pouvez essayer différentes valeurs pour nn. Si cette valeur est trop basse l'erreur Bad Location Error est lancée, si elle est trop haute c'est l'erreur Bad Memory Error. Cette commande détruit la table des symboles.

Pn,s

Sauvegarde d'un fichier ayant pour nom la chaîne s.

  • Si n=0 ou vide : Sauve le source.
  • Si n=1 : Sauve le source à partir de la dernière position du curseur ”>”.
  • Si n=2 : Après un assemblage, sauve le code objet généré (binaire).

Exemple :

  • P skoh.s : sauvegarde du source dans le fichier nommé skoh.s.
  • P2 skoh.bin : sauvegarde le code compilé dans le fichier nommé skoh.bin.

G,s

Charge le fichier source ayant comme nom la chaîne s.

Le fichier source est toujours chargé à la suite de celui déjà présent dans l'éditeur (s'il y en a un). Utilisez la command NEW pour effacer le source courant dans l'éditeur avant d'en charger un nouveau.

Exemple :

  • G skoh.s : charge le fichier source skoh.s dans l'éditeur.

Sn,s

DAMS possède en mémoire 2 chaînes de 16 caractères utilisées par l'éditeur.
(Voir commande <COPY> de l'éditeur).

n spécifie la chaîne concernée (1 ou 2) et s est la nouvelle chaîne.

Si n est égal à 0, le contenu des chaînes est tout simplement affiché.

La chaîne l est la chaîne de recherche, et la chaîne 2 est la chaîne de substitution.
Lors de la saisie, ces 2 chaînes sont analysées comme des phrases du source, car c'est avec lui qu'elles sont en relation.
Donc, un mnémonique doit être précédé d'un espace, et une chaîne qui n'est ni un mnémonique ni un label doit être précédée de 2 espaces.

Après chaque commande S le contenu des 2 chaînes est affiché de manière à voir s'il a été accepté (et si les chaînes peuvent donc se trouver dans le source).

An,s

Assemble le source avec l'option n et s comme nom du 1er bloc. Ces 2 arguments ne sont pas obligatoires (Voir assembleur).

Fn,s

Assemble le fichier source qui se trouve sur support magnétique avec l'option n et dont le 1er bloc a pour nom la chaîne s.

Dnn

Désassemble pas à pas à partir de l'adresse nn.

Si l'imprimante est sélectionnée, DAMS demande l'adresse de fin.
La touche “Q” ou <CTRL> C arrête le désassemblage.
Toute autre touche continue le désassemblage instruction par instruction.

Knn

Liste la mémoire à partir de l'adresse nn. Le bit 7 des caractères affichés a été remis à 0.
“Q” ou <CTRL> C clôture le listage.

Tnn

Dans un premier temps, affiche le contenu des registres, puis trace pas à pas (voir trace).
“Q” ou <CTRL> C revient au moniteur.

Rnn

Trace en mode rapide à partir de l'adresse nn (voir trace).
<CTRL> C ramène au mode Trace.

Jnn

Exécute le programme à l'adresse nn.

Après un assemblage, si une directive ENT se trouvait dans le source, la commande J sans argument exécute le programme à l'adresse déclarée dans par la directive ENT. Si nn existe le programme est lancé en RAM. Indifféremment des indicateurs, le registre BC' prend la valeur #7F8E et F' est remis à 0. Il est possible de transmettre une autre valeur dans les registres BC' et F' à un programme en RAM en faisant J$-$+nn. (voir la commande J$ dans le paragraphe Trace).

.

Permet de modifier le contenu des registres du processeur.
Peut être utile avant de lancer un programme (avec J ou R) ou au cours d'une trace.

Exemples (à vérifier… c'est louche) :

  • ..BC,2 : Charge BC avec la valeur 2
  • ..BC,2 : Charge B avec la valeur 2
  • …BC,2 : Charge C avec la valeur 2
  • .BC',#7F8E : Charge BC' avec la valeur #7F8E

Hnn

Cette commande désassemble la mémoire à partir de l'adresse nn et inclue au source à partir de la dernière position du curseur ”>”, le texte du désassemblage.
Le désassemblage se fait en 2 passes de manière à créer une table de symboles. La mémoire écran est obligatoirement utilisée.

Après Hnn, DAMS demande : Text ?
Tous les octets qui suivront l'adresse que vous donnerez seront inclus au fichier texte sous forme de DEFB.

Ensuite DAMS demande : Code ?
S'il y a de nouveau du langage machine après les DEFB alors rentrez l'adresse et ainsi de suite.
Si vous ne répondez pas à ces questions en appuyant sur <ENTER> alors DAMS vous demande l'adresse de fin.

En

Lorsque l'indicateur URAM est sur EXT, la ROM concernée est fixée par cette commande E.
n doit être compris entre 0 et 251. 0 fixe la ROM basic et 7 fixe la ROM du lecteur de disquette.

L'éditeur

On y accède par la commande L du moniteur.
Il permet de créer, modifier, ajouter, effacer et dupliquer du texte qui sera soumis à l'assembleur.

Dans cet éditeur 2 modes sont à considérer; le premier, celui auquel on accède grâce à la commande L permet les commandes générales. Le second permet la saisie du texte.

Les commandes générales

← (flèche gauche)

Accède au 2ème mode d'édition. Il permet la saisie du texte à partir de la ligne pointée par le curseur ”>”. Après chaque retour de chariot, une nouvelle ligne est attendue. Un retour de chariot dans une ligne vide permet de sortir de ce mode.

→ (flèche droite)

Permet de corriger la ligne pointée par le curseur ”>”.
Un retour de chariot termine la correction.
Si à ce moment là la ligne est vide, alors aucune modification n'est portée sur la ligne et l'ancienne ligne est affichée.

↑ (flèche haut)

Fait monter le curseur ”>” d'une ligne ou descend le texte si le curseur ”>” est en haut.

↓ (flèche bas)

Descend le curseur ”>” d'une ligne ou monte le texte si le curseur est déjà en bas.

<DEL>

Efface la ligne pointée par le curseur ”>”.

<COPY>

Recherche la chaîne de caractères S1 (définie par la commande S du moniteur) à partir de la position du curseur ”>”.

Si la chaîne S1 est trouvée, la page de texte où elle se trouve est affichée et la ligne est pointée par le curseur “$”. A ce moment là, la touche “S” permet de remplacer la chaîne S1 du texte par la chaîne S2 (définie elle aussi par la commande S du moniteur).

Ensuite la nouvelle phrase est affichée et la recherche de la chaîne S1 se poursuit. Si la chaîne S2 du moniteur, substituée à la chaîne S1 du texte a donné une phrase incorrecte, la recherche ne se poursuivra qu'après que la phrase ait été corrigée.

Toute autre touche que S appuyée quand le curseur “$” est affiché fera réapparaître le curseur ”>”

<CTRL> D

Cette commande utilise des pointeurs de texte matérialisés par le caractère “à”. Ils doivent être les premiers et uniques caractères d'une ligne. L'assembleur les ignore.

Efface tout le texte compris entre les 2 premiers pointeurs de texte qui sont eux même effacés.

<CTRL> C

Cette commande utilise des pointeurs de texte matérialisés par le caractère “à”. Ils doivent être les premiers et uniques caractères d'une ligne. L'assembleur les ignore.

Duplique le texte se trouvant entre les premiers pointeurs de texte à la position actuelle du curseur ”>”.
Les pointeurs de texte ne sont pas dupliqués.

<CTRL> K

Cette commande utilise des pointeurs de texte matérialisés par le caractère “à”. Ils doivent être les premiers et uniques caractères d'une ligne. L'assembleur les ignore.

Supprime tous les pointeurs de texte.

Les commandes de saisie du texte

<DEL>

Efface le caractère avant le curseur.

→ (flèche droite)

Avance le curseur d'un caractère.

← (flèche gauche)

Recule le curseur d'un caractère.

Mode de travail de l'éditeur

Il autorise des lignes de 80 caractères maximum.

Il existe 2 types de ligne :

  • Une ligne de commentaire pur commence par un ”;” et ne contient que du texte qui sera ignoré à l'assemblage.
  • Une ligne d'instruction est composée de 4 zones.

Exemple :

LABELSMNEMONIQUESOPERANDESCOMMENTAIRES
ORG#8000
; ligne de commentaire pur
LDHL,text
loop
LDA,(HL); lecture d'un caractère
ORA
RETZ
CALL#BB5A; affiche le code ASCII du caractère
INCHL
JRloop
text
DEFM“Arkos rulez!”
DEFB0
  • Un label doit être écrit en début de ligne, commencer par un caractère alphabétique et ne pas être le nom d'un registre. Sa longueur maximale ne doit pas excéder 8 caractères.
  • Une mnémonique doit toujours être précédé d'un espace.
  • La longueur maximale des opérandes est de 26 caractères.

Après chaque retour de chariot, l'éditeur fait une analyse de la phrase au cours de laquelle il supprime les espaces inutiles et transforme les mots en codes. Ceci permet de réduire considérablement la taille du fichier texte et d'accélérer l'assemblage.

Si une phrase n'est pas correcte, l'éditeur renvoie le curseur dans la zone erronée.

Echanges de fichier texte

Pour assembler avec DAMS un fichier texte crée par en autre éditeur, il est nécessaire d'adapter ce fichier au format de DAMS. L'exemple suivant montre comment, de façon générale, est codée une ligne.

Exemple

LOOP			LD HL, (LOOP + 5 )

L  O  O  P		LD	H  L  ,  (  L  O  O  P  +  5  )
4C 4F 4F 50		80	48 4C 2C 28 4C 4F 4F 50 2B 35 29 0D
  • #0D est le caractère de fin de ligne et zéro est le caractère de fin de texte.
    Les mnémoniques du Z80 sont codés sur 1 octet d'après une table se trouvant à l'adresse de TEXT-242.
  • Le premier mnémonique de cette table est “LD” dont le code est #80 et le dernier est la pseudo-instruction d'assemblage “END” qui a pour code #CC.
  • Le bit 7 du dernier caractère de chaque mnémonique est mis à 1 pour signaler la fin de mot.
  • #FF est le code du ”;” (commentaire) et peut être suivi par une chaîne de caractères alphanumériques.

Pour plus de renseignements, écrivez une ligne à l'aide de l'éditeur et dumpez la avec la commande K.

Dans tous les cas, un simple programme basic utilisant la table des mnémoniques, permet d'adapter et de copier à l'adresse de TEXT un fichier texte, de manière à le rendre utilisable par DAMS.

Screenshots

Moniteur de DAMSEditeur de DAMS

L'assembleur

Les commandes A et F du moniteur permettent d'assembler le fichier source. Cette opération consiste à lire le fichier source (créé avec l'éditeur) et à le transformer en une suite de codes (programme objet) qui pourront être directement exécutés par le microprocesseur.

L'assemblage se fait en deux passes (le source est examiné deux fois de suite). Lors de la première passe, l'adresse équivalente de chaque label est calculée, puis, à la deuxième passe, chaque ligne du source est transformée en code binaire (exécutable par le microprocesseur) et les labels sont remplacés par leur adresse (calculée lors de la première passe).

L'argument s des commandes A et F signale que le source est organisé en blocs (plusieurs fichiers source) et qu'il est sur support magnétique (cassette ou disquette) et que s est le nom du premier bloc.

  • La commande A signifie que le 1er bloc est déjà en mémoire et qu'il est inutile de le charger. Il doit néanmoins aussi se trouver sur support magnétique pour la 2ème passe.
  • La commande F signifie que le 1er bloc n'est pas en mémoire et qu'il faut donc le charger.

Les options

L'argument n des commandes A et F définit les options choisies.

n=1 Indique à l'assembleur qu'il doit utiliser la mémoire écran de 16 Ko pour y loger la table des symboles. Ceci est utile lorsque la taille du fichier texte est très importante ou lorsque DAMS est exécuté à une adresse haute. Quand cette option est sélectionnée, le premier label absent arrête l'assemblage. Si la mémoire écran ne suffisait pas à loger tous les labels, l'assemblage serait stoppé par l'erreur Bad Memory Error.

n=2 Indique à l'assembleur qu'il doit déposer le code objet à la suite de la table des symboles ou si l'option 1 est aussi sélectionnée, à la suite de l'adresse Hmem donnée par la commande X.
Toutefois, le source sera assemblé pour être exécuté à l'adresse donnée par le ORG figurant dans le texte. Lorsque l'on a accédé à l'assemblage par la commande F, l'option 2 est obligatoirement sélectionnée. Dans ce cas, l'assembleur demande à quelle adresse il doit déposer le code objet.

Ces 2 options peuvent être sélectionnées en même temps en les additionnant (n=3).

La table des symboles

C'est la table qui contient les labels et leurs valeurs. Elle est créée au cours de la 1ère passe de l'assemblage. Elle est normalement placée à l'adresse de Hmem mais si au cours de sa création elle tentait de surcharger le code objet ou de dépasser HRAM elle serait alors immédiatement recopiée dans la mémoire écran (#C000) de manière à ne pas stopper l'assemblage.

Si l'option 1 est sélectionnée, la table des symboles est directement placée en #C000.

Après un assemblage, elle est encore utilisable et peut être visualisée (et imprimée) par la commande X1 sauf si elle a été placée en #C000 (par l'option 1 ou par basculement automatique), auquel cas elle est détruite à la fin de l'assemblage.

Directives d'assemblage

Outre les instructions standard du Z80, DAMS accepte les directives d'assemblage suivantes. Elles doivent être entrées comme des mnémoniques et non comme des labels.

ORG nn

Définit l'origine ou l'adresse à laquelle devra être assemblé le texte. Si l'option 2 est sélectionnée. ORG ne sert qu'à donner une valeur aux labels. Si ORG est omis ou si l'option 2 est sélectionnée DAMS affiche l'adresse où il dépose le code objet.

Label EQU nn

Le symbole “Label” prend la valeur nn, nn doit être une constante ou un label déjà défini.

DEFB n1, n2, n3...

Chaque octet de mémoire prend la valeur n.

DEFW nn1, nn2, nn3...

Chaque groupe de 2 octets prend la valeur nn.

DEFS nn, n

Saute nn octets. Si n est présent, alors les nn octets sont remplis par la valeur n.

DEFM s

Les octets suivants sont remplis par la chaîne s.

ENT nn

Signale à la commande J du moniteur que le point d'entrée du programme sera l'adresse nn.

IF expression

Evalue l'expression. Si l'expression est égale à 0, alors l'assemblage est invalidé jusqu'à l'apparition d'un ELSE ou d'un END.

ELSE

Valide ou invalide l'assemblage.

END

Valide l'assemblage des lignes qui suivent.

L'assemblage par blocs

Lorsque le fichier texte dépasse une dimension de 20 Ko, il devient nécessaire de le découper en blocs pour l'assembler, sinon il n'y a plus assez de mémoire pour contenir le code objet et la table des symboles. Notez qu'un lecteur de disquette est presque indispensable pour l'assemblage par blocs, car chaque bloc doit être chargé 2 fois pour les 2 passes.

Chaque bloc à assembler doit se terminer par la commande d'assemblage *F,s la chaîne s étant le nom du bloc suivant. Cette commande d'assemblage doit être frappée en zone label et doit être la seule instruction de la ligne.

Le dernier bloc ne doit pas comporter cette commande d'assemblage.

Les expressions

Les expressions sur lesquelles DAMS travaille doivent être une suite de termes séparés par des opérateurs. Les termes et les opérateurs acceptés par DAMS sont les suivants :

Termes

12Constante numérique décimale.
#20Constante numérique hexadécimale.
%10110Constante numérique binaire.
“a”Constante numérique code ASCII du caractère a
VALEUREtant un label auquel un assemblage a donné une valeur.
$Représente la valeur actuelle du compteur d'adresse.
:xDonne le contenu de l'octet adressé par x (PEEK).
::xDonne le contenu des 2 octets adressés par x (DEEK).

Opérateurs

  • + addition
  • - soustraction
  • * multiplication
  • / division
  • & élément logique ET
  • ~ élément logique OU
  • ! élément logique OU exclusif
  • ? fonction modulo, a ? b = a - b * |N| (a / b)

Les erreurs au cours de l'assemblage

Dès que DAMS rencontre une erreur il stoppe l'assemblage et affiche un message d'erreur.
Accédez à l'éditeur par un “L” et la ligne pointée par le curseur ”>” est la ligne où est advenue l'erreur.

Si l'option 1 n'est pas utilisée, un label absent ne stoppe pas l'assemblage et est simplement signalé.

La Trace

Elle permet d'exécuter un programme instruction par instruction et de visualiser le contenu des registres du processeur après chaque instruction. C'est un moyen efficace pour trouver des erreurs dans un programme en langage machine.

La commande "T"

Lorsque vous entrez T, le contenu des registres et les 16 premiers octets de pile sont affichés.

Vous pouvez appuyer sur “Q” ou <CTRL> C pour revenir au moniteur.

Si vous appuyez sur une autre touche, l'instruction adressée par le registre PC est désassemblée, exécutée, et le contenu des registres est à nouveau affiché.

Ainsi, instruction après instruction, vous pouvez voir si votre routine a l'effet souhaité.

Avant d'être exécutée, chaque instruction est testée afin d'éviter la destruction de DAMS.

Toute tentative de modification de la zone de mémoire comprise entre l'adresse de début de DAMS et Hmem, entraîne l'erreur 12.

Les instructions qui modifient la configuration RAM/ROM modifient aussi les indicateurs de haut de page.

Au cours d'une trace, vous pouvez revenir au moniteur pour, par exemple, modifier une valeur dans un registre et continuer de tracer en rentrant “T”; mais si vous avez utilisé une commande qui modifie le compteur d 'adresse, comme D, A, K, H, il faudra continuer de tracer en rentrant “Tnn”, nn étant l'adresse où vous aviez interrompu le traçage.

La commande "R"

Permet de tracer en mode rapide. Le désassemblage et le contenu des registres ne sont pas affichés mais les instructions sont testées avant d'être exécutées.

Lorsque vous entrez cette commande, DAMS mémorise la valeur du registre SP et le retour au mode “trace normale” se fera lorsque le registre SP aura la valeur mémorisée plus 2, c'est-à-dire, lorsqu'il aura exécuté un RET ou un POP etc…

La commande R n'est donc pas critique et peut être lancée dans de nombreux cas sans danger.

Si R ne revenait pas, (par exemple le programme boucle), <CTRL> C permettrait de le stopper et de revenir au mode “trace normal”.

La commande J

J permet d'exécuter une routine en langage machine en mémoire RAM.

J$ exécute une routine à l'adresse que contient le PC, et dans ce cas, $ indique que la routine se trouve en ROM ou en RAM suivant les indicateurs de haut de page et la valeur du registre PC.

J$ ne modifie pas la valeur des registres BC' et AF'.

Pendant une trace il est donc préférable d'utiliser J$.

Avant d'exécuter une commande J, s'assurer que le registre SP a une valeur comprise dans les 32 Ko centraux de RAM.

Attention ! R peut être exécuté à n'importe quel endroit d'une routine, mais J doit être exécuté au début d'une routine qui n'a pas d'erreur.

Les messages d'erreur

L'affichage d'un message d'erreur provoque le retour au moniteur.

Voici la liste des messages d'erreurs et des cas dans lesquels ils peuvent apparaître :

Syntax Error

  • une commande n'a pas été reconnue ou sa syntaxe est erronée.
  • au cours d'un assemblage, une ligne est erronée.

Redefine label Error

Un label porte déjà le même nom et un label ne peut avoir 2 valeurs.

Relative number Error

Le déplacement relatif d'un JR ou l'index d'un registre IX ou IY a une valeur hors intervalle.

Integer out of range Error

Cette erreur se produit dans tous les cas où devrait figurer un nombre compris dans les intervalles 0, +255 ou 0, +65535 et vous n'avez pas respecté cet intervalle.

Illegal character Error

Un caractère d'un label ou de la ligne est illégal.

Illegal reference Error

  • Une expression qui suit un EQU, un ORG ou un DEFS, comporte un label qui n'a pas été défini.
  • Une commande d'assemblage *F,s a été trouvé à la fin du source alors qu'il n'est pas assemblé par bloc.

Bad ORG Error

  • La valeur qui suit le ORG est une adresse occupée par DAMS.
  • L'adresse d'origine est inférieure à DAMS mais l'ampleur du code objet a tenté de surcharger DAMS.

I/O Error

Clôture toute opération avec un périphérique qui a échoué.

Bad memory Error

  • Lors du chargement d'une source :
    La taille du fichier texte que vous essayez de charger est supérieure à la taille de mémoire actuelle (commande M).
  • Sous l'éditeur :
    Il n'y a plus de place pour rajouter cette ligne. Vous pouvez peut être faire de la place avec la commande M.
  • Pendant un assemblage :
    Le code objet a tenté de dépasser la limite supérieure de la mémoire (HRAM). Pour y remédier, réassemblez avec l'option 1 ou rechargez DAMS à une adresse plus basse ou modifiez HRAM.
  • L'argument de la commande M est trop élevé et est supérieur à HRAM :
    Lors de la création de DAMS, HRAM a été fixé à #A67C mais cette valeur peut être changée pour assembler des programmes à une adresse plus haute ou pour réserver de la place pour un autre logiciel.

    L'adresse de la variable système qui contient l'adresse de HRAM se trouve à l'adresse de DAMS +80.

No Table space Error

L'option 1 a été sélectionnée et la table de symboles nécessite plus de 16Ko (damned!! :).

Break Error

Vous avez interrompu une opération.

Label absent Error

Cette erreur ne se produit jamais au cours d'un assemblage mais lorsque vous entrez une commande dont une expression contient un label qui n'est pas dans la table des symboles.

Bad location Error

  • Une commande telle que Q ou W a tenté de modifier un octet occupé par DAMS.
  • Au cours d'une trace, (commandes T ou R), une instruction telle que LD (HL),a, LDDR, etc aurait détruit ou compromis DAMS.
  • L'argument de la M est trop bas.

Exemple d'utilisation

(If Flash is installed JavaScript is activated, you can watch a video inside this web page.)

Addresses utiles de DAMS

DAMS étant relogeable ce ne sont pas les adresses qui sont données mais les déplacements relatifs à l'adresse d'implantation suivis du nom de la variable et du nombre d'octets qu'elle occupe.

OffsetVariableTailleDescription
+37PTEXT2 octetsStocke l 'adresse du début de la ligne pointée par le curseur ”>”.
+42FLG11 octetLe bit 1 de cette variable est à 1 si un assemblage a été lancé avec l'option 2. L'expression “IF : FLG1&2” dans le fichier texte validera l'assemblage des lignes qui suivant si l'option 2 est sélectionnée. L'expression ”IF FLG1 & 2 | 2” invalidera l'assemblage si l'option 2 est sélectionnée.
Le bit 5 à 1 indique que l'assemblage se fait par blocs.
+80HRAM2 octetsStocke la dernière adresse à laquelle DAMS peut déposer du code objet ou peut fixer la valeur de Hmem (commande M).
+43FLG21 octetLe bit 1 est le flag “décimal / hexadécimal”. Le bit 7 est le flag “Printer allumé”.
+10243 C'est l'adresse de début de la table qui contient les mnémoniques.
+2354 C'est le point d'entrée du moniteur.

DAMS avec 128Ko de RAM ou plus

Sur les machines ayant plus de 64Ko de mémoire, il est tout à fait possible de charger DAMS dans une des banks de 16ko. L'avantage de cette méthode étant que DAMS n'est pas effacé de la mémoire en cas de RESET. Il suffit de commuter la bank utilisée et l'appeler via un CALL nn. De plus, si vous faites en sorte que l'adresse de fin de votre source reste inferieure à #7FFF, votre source sera intégralement préservé avec DAMS! Il n'est donc pas utile de recharger DAMS puis votre source en cas de RESET.

documentations/software/dams/start.txt · Last modified: 2009/09/24 15:30 by grim