DAMS manuel utilisateur
=======================
Pascal Sguy <pascal.seguy@laposte.net>
:toc:
:icons:
:numbered:


DAMS est un logiciel permettant dcrire et mettre au point des programmes en
langage machine sur les micro ordinateurs AMSTRAD CPC 464, 664 et 6128.

Il se compose d'un diteur, un assembleur, un dsassembleur, un dump et une trace.

Sa simplicit d'utilisation, ses nombreuses commandes et sa rapidit d'excution permettront
de dvelopper d'importants programmes en langage machine.



== Introduction ==


DAMS est un logiciel intgrant un assembleur, un moniteur et un dsassembleur
symbolique pour dvelopper et mettre au point facilement des programmes en langage
machine.

Les trois modules sont co-rsidents en mmoire ce qui assure une grande souplesse
d'utilisation.
Vous pouvez notamment utiliser un diteur plein cran, un assembleur immdiat,
un dsassembleur symbolique, une trace et beaucoup d'autres fonctions trs puissantes.

Lditeur est du type plein cran et sans numro de ligne.
Des commandes spciales permettent la recherche ou la substitution de mots ou de
phrases, leffacement, la duplication et le dplacement de blocs de textes.

Lassembleur Z80 est dot de pseudos instructions d'assemblage telles que
"IF", "THEN", "ELSE", et "DEFB", "DEFW" etc...
Il permet l'assemblage de plusieurs blocs de texte source.
La table des labels gnre peut tre ensuite utilise par le moniteur,
le dsassembleur et le mode trace.

Le moniteur comprend plus de 15 commandes pour utiliser trace, dump, affichage
et modification des registres, excution d'un programme...

Le dsassembleur peut crer du texte source  partir d'un programme en langage
machine avec gnration automatique de labels et "DEFB"..
Le source peut tre modifi  partir de lditeur et rassembl.

La trace comprend un mode rapide pour mettre au point des routines importantes.
Chaque instruction est analyse avant son excution pour viter tout blocage systme.

DAMS est entirement relogeable et est bien videmment crit en langage machine.



=== Structure ===

DAMS occupe une dizaine de Ko en mmoire.
Il contient sa propre pile machine et sa propre routine d'affichage,
ce qui lui garantit son immunit lors d'excution de routines par la trace.
Il fait nanmoins directement appel  deux routines en ROM qui permettent
de saisir les touches du clavier.

Les autres appels de routines extrieures se font lors d'excutions de
commandes utilisant un priphrique et toujours par les vecteurs du systme dexploitation
de manire  pouvoir dvier ces routines.
Par exemple, ceci permet dutiliser un lecteur de cassette ou de disquette
lors dexcution 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 donne par la valeur de Hmem (commande `X`).


=== Chargement ===


DAMS est entirement relogeable et peut-tre charg de l'adresse 1000  28000 de plusieurs faons.

..................................
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 enfonce jusqu' l'excution, alors on va vous demander  quelle adresse
voulez-vous charger DAMS.

Cette mthode de chargement prsente l'inconvnient d'effacer un ventuel programme basic dj existant.
Pour viter cela, il suffit de charger directement les codes machine  l'adresse nn que vous choisissez :

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

Dans tous les cas, pour raccder  DAMS, il suffira de faire `CALL nn`, "nn" tant l'adresse o vous l'avez charg.

De mme, un programme excut par DAMS grce  la commande `J`,
peut se terminer non pas par un "RET" mais par un "JP nn".
Ce point d'entre sauve le contenu des registres du processeur.

//////////////////////////////////////////////////////////////////////////////////////////////////
Un autre point d'entre qui peut tre utilis est l'adresse du moniteur quivalente  nn+2354.
Ce point d'entre ne mmorise cependant pas le contenu des registres.
//////////////////////////////////////////////////////////////////////////////////////////////////


== Le moniteur ==


Ds que l'on a accd  DAMS, le moniteur prend le contrle et attend une des commandes.
Celles-ci peuvent tre tapes en majuscule ou en minuscule.

NOTE: Depuis DAMS  1.1 le curseur du mode moniteur est  "_"
afin de le distinguer du mode diteur.


=== <CAPS LOCK>

Passe de majuscule  minuscule et inversement.

DAMS accepte indiffremment les majuscules et les minuscules.
L'assembleur accepte aussi les minuscules.


=== <CTRL> R

Fait basculer l'indicateur de haut de page sur LRAM ou ROM.

* LRAM signifie que de 0  #3FFF, il y a de la RAM
* ROM signifie que de 0  #3FFF, il y a de la ROM

Vrifiez bien que l'indicateur est bien positionn avant toute commande telle que `D`, `H`, `K`, `T`, `R`, `J$` etc...


=== <CTRL> E

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

* URAM signifie que de #C000  #FFFF, il y a de la RAM
* EXT:n signifie que la mme zone est occupe par la ROM numro n. (Voir commande `E`).

Comme pour la commande `<CTRL> R`, vrifiez bien cet indicateur.


=== <CTRL> B

Bascule la base d'affichage.

Tous les nombres affich par DAMS seront dans la base (10 ou 16) slectionne par `<CTRL> B`.


=== Ls

Permet d'accder  l'diteur au chapitre du texte spcifi par la chane "s".
"s" doit tre un label du texte.

Ds que les caractres de "s" correspondent aux premiers caractres du label, le texte est affich.

* Si la chane "s" est un ";", le texte est affich  partir du dbut.
* Si la chane "s" est nulle le texte est affich  partir de la dernire position du curseur ">".
* Si l'imprimante a t slectionne (`<CTRL> P`) alors le texte est transmis  l'imprimante.
* Si la chane "s" n'est pas trouve dans le texte alors la commande n'a pas d'effet.


=== N

Elimine le fichier texte et la table des symboles.

Pour ressusciter un fichier texte effac par un new malencontreux,
poker 59 dans l'adresse de "Text" (donne par la commande `X`).


=== Xn

`Xl` affiche une table de symboles (cre par un assemblage).

Elle peut tre imprime si auparavant l'imprimante a t slectionne.

`X0` ou `X` donne diffrentes adresses occupes 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 Numrique

value l'expression et affiche le rsultat.

Tous les types de nombres et d'oprateurs dcrits dans ce manuel peuvent tre utiliss.

Si une table de symboles existe, des labels peuvent figurer dans l'expression numrique.

------------------------------------------------------
O 3+2
=5
------------------------------------------------------

=== B

Retour au basic


=== Qnn,n

Poke la valeur "n"  l'adresse "nn".

Si "nn" est occupe par DAMS, l'erreur 12 est lance.

"n" et "nn" peuvent tre des expressions numriques.


=== Wnn1,nn2

Mme effet que "Q" mais sur 2 octets.


=== Mnn

Fixe la dernire adresse mmoire occupe par DAMS (Hmem).

Toute la zone mmoire comprise entre l'adresse de dbut de DAMS et Hmem est exclusivement rserve  DAMS.

Toute commande telle que `Q`, `W`, `A`... qui tente de modifier un octet de mmoire occup par DAMS,
est clture par l'erreur 12.

La valeur de Hmem est visualise par la commande `X`.

Plus la valeur Hmem sera basse et moindre sera l'espace rserv au fichier texte et inversement.
Toutefois, la valeur de Hmem devra se situer dans la Ram centrale de 32 K.

Vous pouvez essayer diffrentes valeurs pour "nn".
Si cette valeur est trop basse l'erreur 12 est lance, si elle est trop haute c'est l'erreur 8.

NOTE: Cette commande dtruit la table des symboles.


=== Pn,s

Sauvegarde le fichier ayant pour nom la chane "s".

* 0 : Sauve le fichier texte

* 1 : Sauve le fichier texte,  partir de la dernire position du curseur ">".

* 2 : Aprs un assemblage, sauve le code objet.


=== P3,a,n,s


(Exprimental, depuis DAMS 1.1)

Sauvegarde la zone mmoire a l'adresse "a", de longueur "n", dans le
fichier nomm "s".
Est l'quivalent du basic:

                              SAVE "nom de fichier",B, adresse, longueur.


=== Gn,s

Si "n" est omis ou nul,
charge le fichier source DAMS ayant comme nom la chane "s".

NOTE: Le fichier texte est toujours charg  la suite de celui dj existant (s'il y en a un).


Si "n" est spcifi (Exprimental, depuis DAMS 1.1)
alors cette commande est l'quivalent du basic:

                              LOAD "nom de fichier", adresse


=== Sn,s

DAMS possde en mmoire 2 chanes de 16 caractres utilises par l'diteur.
(Voir commande `<COPY>` de l'diteur).

"n" spcifie la chane concerne (1 ou 2) et "s" est la nouvelle chane.

Si "n" est gal  0, le contenu des chanes est tout simplement affich.

La chane "l" est la chane de recherche, et la chane 2 est la chane de substitution.

Lors de la saisie, ces 2 chanes sont analyses comme des phrases du fichier texte,
car c'est avec lui qu'elles sont en relation.
Donc, un mnmonique doit tre prcd d'un espace,
et une chane qui n'est ni un mnmonique ni un label doit tre prcde de 2 espaces.

Aprs chaque commande `S` le contenu des 2 chanes est affich de manire  voir s'il a t accept
(et si les chanes peuvent donc se trouver dans le fichier texte).


=== An,s

Assemble le fichier texte 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 texte qui se trouve sur support magntique
avec l'option "n" et dont le 1er bloc a pour nom la chane "s".


=== Dnn

Dsassemble pas  pas  partir de l'adresse "nn".

Si l'imprimante est slectionne, DAMS demande l'adresse de fin.

La touche `Q` ou `<CTRL> C` arrte le dsassemblage.

Toute autre touche continue le dsassemblage instruction par instruction.


=== Knn

Liste la mmoire  partir de l'adresse "nn".

Le bit 7 des caractres affichs a t remis  0.

`Q` ou `<CTRL> C` clture 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` ramne au mode Trace.


=== Jnn

Excute le programme  l'adresse "nn".

Aprs un assemblage, si un "ENT" se trouvait dans le texte,
la commande `J` sans argument excute le programme  l'adresse dclare dans le "ENT".

Si "nn" existe le programme est lanc en RAM.

Indiffremment 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).


=== !nn

(Exprimental, depuis DAMS 1.1)

Installe un point d'arrt  l'adresse "nn".

Lorsqu'il est atteint, le moniteur de DAMS reprend la main.
On peut alors rentrer en mode trace (commande `T`).

NOTE: Une fois atteint le point d'arrt est automatiquement supprim.


=== . (point)

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:

* `.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 dsassemble la mmoire  partir de l'adresse "nn" et inclue au fichier texte
 partir de la dernire position du curseur ">", le texte du dsassemblage.

Le dsassemblage se fait en 2 passes de manire  crer une table de symboles.

NOTE: La mmoire cran est obligatoirement utilise.

Aprs `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 aprs les "DEFB" alors rentrez l'adresse et ainsi de suite.

Si vous ne rpondez 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 concerne est fixe par la 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 accde par la commande `L` du moniteur.

Il permet de crer, modifier, ajouter, effacer et dupliquer du texte qui sera soumis  l'assembleur.

Dans cet diteur 2 modes sont  considrer:

- le premier, celui auquel on accde grce  la commande `L` permet les commandes gnrales.
- Le second permet la saisie du texte.


=== Les commandes gnrales ===


Elles permettent de naviguer dans le source.


==== <SHIFT> ?

WARNING: Changement depuis DAMS 1.1, avec DAMS 1.0 il n'y avait pas besoin de <SHIFT>.

Accde au 2ime mode d'dition:
Il permet la saisie du texte  partir de la ligne pointe par le curseur ">".

Aprs chaque retour chariot, une nouvelle ligne est attendue.

Un retour chariot dans une ligne vide permet de sortir de ce mode.


==== ?

Permet de corriger la ligne pointe par le curseur ">".

Un retour chariot termine la correction.

Si  ce moment l la ligne est vide, alors aucune modification n'est porte
sur la ligne et l'ancienne ligne est affiche.


==== ?

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


==== <SHIFT> ?

Page prcdente (depuis DAMS 1.1).
Fait monter le curseur de 24 lignes en arrire dans le texte.


==== ?

Descend le curseur ">" d'une ligne ou monte le texte si le curseur est dj en bas.


==== <SHIFT> ?

Page suivante (depuis DAMS 1.1).
Dplace le curseur de 24 lignes en avant dans le texte.


==== <DEL>

Efface la ligne pointe par le curseur ">".


==== <COPY>

Recherche la chane de caractres S1 (dfinie par la commande `S` du moniteur)  partir de la position du curseur ">".

Si la chane "S1" est trouve,
la page de texte o elle se trouve est affiche et la ligne est pointe par le curseur "$".

A ce moment l,
la touche "S" permet de remplacer la chane "S1" du texte par la chane "S2"
(dfinie elle aussi par la commande `S` du moniteur).

Ensuite la nouvelle phrase est affiche et la recherche de la chane "S1" se poursuit.

Si la chane "S2" du moniteur, substitue  la chane "S1" du texte a donn une phrase incorrecte,
la recherche ne se poursuivra qu'aprs que la phrase ait t corrige.

Toute autre touche que `S` appuye quand le curseur "$" est affich fera rapparatre le curseur ">".

Les trois commandes suivantes utilisent des pointeurs de texte matrialiss par le caractre "@".
Ils doivent tre les premiers et uniques caractres d'une ligne. L'assembleur les ignore.


==== <CTRL> D

Efface tout le texte compris entre les 2 premiers pointeurs de texte qui sont eux mme effacs.


==== <CTRL> C

Duplique le texte se trouvant entre les premiers pointeurs de texte  la position actuelle du curseur ">".

Les pointeurs de texte ne sont pas dupliqus.


==== <CTRL> K

Dtruit tous les pointeurs de texte.


=== Les commandes de saisie du texte ===

Ce sont les commandes utilisables en mode dition de ligne.

==== <DEL>

Efface le caractre avant le curseur.


==== ?

Avance le curseur d'un caractre.


==== <SHIFT> ?

Avance rapide (depuis DAMS 1.1).
Dplace le curseur de 5 caractres en avant dans la ligne.


==== ?

Recule le curseur d'un caractre.


==== <SHIFT> ?

Retour rapide (depuis DAMS 1.1).
Dplace le curseur de 5 caractres en arrire dans la ligne.



=== Mode de travail de l'diteur ===


Il accepte des phrases de 80 caractres qui sont divises en plusieurs zones :

LABELS  MNEMONIQUES  OPERANDES  COMMENTAIRES

ex :

...............................................................................
LOOP  ADD A,(HL)	; additionne  A la valeur de (HL)
...............................................................................

Un label doit tre crit en dbut de ligne,
commencer par un caractre alphabtique et ne pas tre le nom d'un registre.

Sa longueur maximale ne doit pas excder 8 caractres.

Un mnmonique doit toujours tre prcd d'un espace.

NOTE: Depuis DAMS 1.1, cet espace peut tre omis.

La longueur maximale des oprandes est de 26 caractres.

Aprs chaque retour 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 rduire considrablement la taille du fichier texte et d'acclrer l'assemblage.

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


=== changes de fichier texte ===


Pour assembler avec DAMS un fichier texte cre par en autre diteur,
il est ncessaire d'adapter ce fichier au format de DAMS.

L'exemple suivant montre comment, de faon gnrale, est code une ligne.

............................................................
Ex :    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 caractre de fin de ligne et zro est le caractre de fin de texte.

Les mnmoniques du Z80 sont cods sur 1 octet d'aprs une table se trouvant  l'adresse de TEXT-242.

Le premier mnmonique 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 caractre de chaque mnmonique est mis  1 pour signaler la fin de mot.

#FF est le code du ";" (commentaire) et peut tre suivi par une chane de caractres alphanumriques.


NOTE: Voir damsdecode, un outil du projet DAMS crit en C++ qui permet d'encoder/dcoder les fichier DAMS.



== L'assembleur ==


Les commandes `A` et `F` du moniteur permettent d'assembler le fichier texte.

Cette opration consiste  lire le fichier texte (cr avec l'diteur) qui constitue le programme
source et  le transformer en une suite de codes (programme objet)
qui pourront tre directement excuts par le microprocesseur.

L'assemblage se fait en deux passes, le texte est examin deux fois de suite.

L'argument "s" des commandes `A` et `F` signale que le texte est organis en blocs et qu'il est sur support magntique.
"s" est le nom du premier bloc.

La commande `A` signifie que le 1er bloc est dj en mmoire et qu'il est inutile de le charger.
Il doit aussi se trouver sur support magntique pour la 2ime passe.

La commande `F` signifie que le 1er bloc n'est pas en mmoire et qu'il faut donc le charger.


=== Les options ===


L'argument "n" des commandes `A` et `F` dfinit les options choisies.

Ces options peuvent pour la plupart tre slectionnes en mme temps en les additionnant.


==== Option 1

Indique  l'assembleur qu'il doit utiliser la mmoire cran de 16 Ko pour y loger la table des symboles.
Ceci est utile lorsque la taille du fichier texte est trs importante ou lorsque DAMS est excut  une adresse haute.

Si la mmoire cran ne suffisait pas  loger tous les labels, l'assemblage serait stopp par l'erreur 9.

NOTE: Quand cette option est slectionne, le premier label absent arrte l'assemblage.


==== Option 2

Indique  l'assembleur qu'il doit dposer le code objet  la suite de la table des symboles ou si l'option 1
est aussi slectionne,  la suite de l'adresse Hmem donne par la commande `X`.

Toutefois, le texte sera assembl pour tre excut  l'adresse donne par le "ORG" figurant dans le texte.

NOTE: Lorsque l'on a accd  l'assemblage par la commande `F`, l'option 2 est obligatoirement slectionne.
Dans ce cas, l'assembleur demande  quelle adresse il doit dposer le code objet.


==== Option 4

(Exprimental, depuis DAMS 1.1)

Elle provoque une liste pendant la deuxime passe de l'assemblage.

Si la ligne du texte qui  est  en  cours d'assemblage  gnre  du code,
alors l'adresse de ces codes est affiche
(dans la base slectionne par `<CTRL> B`), suivie des
codes gnrs et du texte source.

Si  la ligne du texte ne gnre pas de codes, (par
exemple  un  commentaire ou un label) alors seulement la ligne de
texte est affiche.

NOTE: Cette  liste  peut tre imprime si l'imprimante a
t slectionne par `<CTRL> P`.

Si  la  sortie  se  fait  sur cran, alors il faut
appuyer sur une touche pour assembler la ligne suivante.

L'option  1 est prioritaire et annule cette option
sauf si le texte est imprim.


==== Option 8

(Exprimental, depuis DAMS 1.1)

L'option  8 permet de dposer le code objet sur la
disquette  pendant  l'assemblage,  et  libre ainsi de la mmoire
pour stocker des blocs de textes ou la table des symboles.
Nanmoins,  une  zone  de  2Ko  est ncessaire comme
tampon  de  sortie.  DAMS calcule l'adresse de cette zone sauf
si  l'assemblage  doit  se  faire  par  blocs.  Dans  ce  cas, la
question :

                              Object code address ?

Sert    dterminer l'adresse du tampon de sortie.
Plus  l'adresse  de ce tampon sera haute et plus il y aura de place
pour loger la table des symboles ou du texte.

Cette  adresse  devra  tre  infrieure d'au moins
2070  octets    la  valeur  de  HRAM car  la suite du tampon de
sortie  se  trouve  le  tampon  de l'assembleur qui doit tre d'au
moins  20 octets ou aussi grand que le plus grand "DEFS" du fichier
texte.

Le   fichier   gnr  est  un  fichier  ASCII  de
caractres  hexadcimaux dans lequel 2 caractres correspondent 
1 code machine.
L'instruction basic :

                              INPUT #9,a$

Va   lire   32   caractres  qui  groups  par  2
correspondent  16 codes machines.

Pour  recharger  ces  codes machines en mmoire il
faut utiliser la nouvelle commande du moniteur :

                      G adresse,nom fichier

A  la fin, le nombre d'octets charg est affich.
Si  le  fichier  n'est  pas de type ASCII, alors il est charg en
mmoire comme fichier binaire.

Pour  sauvegarder cette zone mmoire comme fichier
binaire, il faut utiliser la nouvelle commande du moniteur :

                      P3,adresse,longueur,nom fichier




==== Option 128

Cette option n'existe que dans la version "dveloppeur" de DAMS.
Elle permet de gnrer pendant l'assemblage une table de relogement
dpose en fin de code, et utilise par DAMS lui-mme  son
dmarrage afin de se reloger dynamiquement.

Typiquement, DAMS est gnr par lui-mme par:

	F128,D1.BIN

Cette caractristique est propre  DAMS lui-mme et n'a pas t
conue pour un usage utilisateur.


=== La table des symboles ===


C'est la table qui contient les labels et leurs valeurs.

Elle est cre au cours de la 1ire passe de l'assemblage et elle se trouve  l'adresse de Hmem
ou  #C000 si l'option 1 est slectionne.

Aprs un assemblage, elle est encore utilisable et peut tre visualise (et imprime) par la commande `X1`.
Si l'option 1 est slectionne, elle est dtruite  la fin de l'assemblage.

Au cours de sa cration,
si elle tentait de surcharger le code objet ou de dpasser HRAM elle serait alors
immdiatement recopie dans la mmoire cran de manire  ne pas stopper l'assemblage.


=== Pseudo-instructions  ===


Outre le langage d'assemblage standard du Z80, DAMS accepte les commandes d'assemblage suivantes.
Elles doivent tre entres comme des mnmoniques et non comme des labels.


==== ORG nn

Dfinit l'origine ou l'adresse  laquelle devra tre assembl le texte.

Si l'option 2 est slectionne, ORG ne sert qu' donner une valeur aux labels.

Si ORG est omis ou si l'option 2 est slectionne DAMS affiche l'adresse o il dpose le code objet.


==== Label EQU nn

Le symbole "Label" prend la valeur "nn", "nn" doit tre une constante ou un label dj dfini.


==== DEFB n1, n2, n3...

Chaque octet de mmoire 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 prsent, alors les "nn" octets sont remplis par la valeur "n".


==== DEFM s

Les octets suivants sont remplis par la chane "s".


==== ENT nn

Signale  la commande `J` du moniteur que le point d'entre du programme sera l'adresse "nn".


==== IF expression

value 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 dpasse une dimension de 20 Ko,
il devient ncessaire de le dcouper en blocs pour l'assembler,
sinon il n'y a plus assez de mmoire pour contenir le code objet et la table des symboles.

NOTE: Un lecteur de disquette est presque indispensable pour l'assemblage par blocs,
car chaque bloc doit tre charg 2 fois, une par passe.

Chaque bloc  assembler doit se terminer par la commande d'assemblage `*F,s`
la chane "s" tant le nom du bloc suivant.

Cette commande d'assemblage doit tre frappe 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 spars par des oprateurs.

Les termes et les oprateurs accepts par DAMS sont les suivants :


[width="40%"]
.Termes
|=====================================================
|+12+		| Constante numrique dcimale.
|+#20+		| Constante numrique hexadcimale.
|+%10110+	| Constante numrique binaire.
|+"a"+		| Constante numrique code ASCII du caractre "a".
|+VALEUR+	| tant un label auquel un assemblage a donn une valeur.
|+$+		| Reprsente la valeur actuelle du compteur d'adresse.
|+:x+		| Donne le contenu de l'octet adress par x (PEEK).
|+::x+		| Donne le contenu des 2 octets adresss par x (DEEK).
|=====================================================


[width="40%"]
.Oprateurs
|=====================================================
| `+`		| addition
| +-+		| soustraction
| +*+		| multiplication
| +/+		| division
| +&+		| lment logique ET
| +@+		| lment logique OU
| +!+		| lment logique OU exclusif
| +?+		| fonction modulo
|=====================================================



=== Les erreurs d'assemblage ===


Ds que DAMS rencontre une erreur il stoppe l'assemblage et affiche un message d'erreur.

Accdez  l'diteur par un `L` et la ligne pointe par le curseur ">" est la ligne o est advenue l'erreur.

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


== La trace ==


Elle permet d'excuter un programme instruction par instruction et de visualiser
le contenu des registres du processeur aprs 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 affichs.

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

Si vous appuyez sur une autre touche, l'instruction adresse par le registre PC est dsassemble,
excute, et le contenu des registres est  nouveau affich.
Ainsi, instruction aprs instruction, vous pouvez voir si votre routine a l'effet souhait.

Avant d'tre excute, chaque instruction est teste afin d'viter la destruction de DAMS.
Toute tentative de modification de la zone de mmoire comprise entre l'adresse de dbut de DAMS et Hmem,
entrane 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 traage.


=== La commande "R" ===


Permet de tracer en mode rapide.

Le dsassemblage et le contenu des registres ne sont pas affichs mais les instructions
sont testes avant d'tre excutes.

Lorsque vous entrez cette commande,
DAMS mmorise la valeur du registre SP et le retour au mode "trace normale" se fera lorsque
le registre SP aura la valeur mmorise plus 2,
c'est--dire, lorsqu'il aura excut un "RET" ou un "POP" etc...

La commande `R` n'est donc pas critique et peut tre lance 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'excuter une routine en langage machine en mmoire RAM.

`J$` excute 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 prfrable d'utiliser `J$`.

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

Attention! `R` peut tre excut  n'importe quel endroit d'une routine,
mais `J` doit tre excut au dbut d'une routine qui n'a pas d'erreur.


== 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 apparatre :


=== 0: Syntax Error

Une commande n'a pas t reconnue ou sa syntaxe est errone.

Au cours d'un assemblage, une ligne est errone.


=== 1: Redefine label Error

Au cours d'un assemblage,
un label porte dj le mme nom et un label ne peut avoir 2 valeurs.


=== 2: Relative number Error

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


=== 3: 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.


=== 4: Illegal character Error

Au cours d'un assemblage, un caractre d'un label ou de la ligne est illgal.


=== 5: Illegal reference Error

Au cours d'un assemblage :

- Une expression qui suit un "EQU", un "ORG" ou un "DEFS", comporte un label qui n'a pas t dfini.
- Il a t trouv la commande d'assemblage "*F,s" alors que le fichier texte n'est pas assembl par bloc.


=== 6: Bad ORG Error

Au cours d'un assemblage :

- La valeur qui suit le "ORG" est une adresse occupe par DAMS.
- L'adresse d'origine est infrieure  DAMS mais l'ampleur du code objet a tent de surcharger DAMS.


=== 7: I/O Error

Clture toute opration avec un priphrique qui a chou.


=== 8: Bad memory Error

Lors du chargement d'une source :
La taille du fichier texte que vous essayez de charger est suprieure  la taille de mmoire 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 dpasser la limite suprieure de la mmoire (HRAM).
Pour y remdier, rassemblez avec l'option 1 ou rechargez DAMS  une adresse plus basse ou modifiez HRAM.


=== 9: No Table space Error

Au cours d'un assemblage :
L'option 1 a t slectionne et la table de symboles ncessite plus de 16 Ko.


=== 10: Break Error

Vous avez interrompu une opration.


=== 11: 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.


=== 12: Bad location Error

Une commande telle que `Q` ou `W` a tent de modifier un octet occup par DAMS.

Au cours d'une trace, (commande `T` ou `R`), une instruction telle que "LD (HL),a",
"LDDR" etc... aurait dtruit ou compromis DAMS.

L'argument de la commande `M` est trop bas.


== Exemple d'utilisation ==


Vous venez de charger DAMS, le fichier texte est vide, le moniteur attend une commande.

Entrez `L`,  puis `<SHIFT> <-` et tapez le programme suivant :


----------------------------------------------------------------------------
;
	ORG 40000	; le programme sera log  l'adresse 40000
DEBUT
	ENT $
;
	LD A,"A"
	LD B,26
LOOP
	CALL #BB5A	; Affiche le cc contenu dans A
	INC A
	DJNZ LOOP	; Boucle 26 fois
	RET
FIN
----------------------------------------------------------------------------


Assemblez-le :	`A`

Excutez-le :	`J`

Dsassemblez-le : `D DEBUT`

Tracez-le : `T DEBUT`


Appuyez sur <ENTER> jusqu' ce que le PC affiche #BB5A.

A ce moment l, si vous avez le temps,
continuez  appuyer sur <ENTER> et vous allez tracer la routine de la ROM qui affiche un caractre  l'cran,
sinon, appuyez sur la touche "Q" et puis `R`.

Faites 2 ou 3 fois le tour de la boucle de cette faon, puis aprs le "INC A" tapez "Q" et `R`.

La boucle va alors se tracer seule jusqu' ce que le registre B soit gal  zro.

A ce moment l, le contenu des registres s'affiche et le PC a pris la valeur qui tait
au sommet de la pile avant de tracer la routine.

Le "RET" a donc t excut. Pour revenir au moniteur, tapez "Q".

Entrer maintenant : `H DEBUT`

DAMS demande : Text ? tapez <ENTER>

DAMS demande : End ? Entrez "FIN"

Aussitt vous vous retrouvez dans l'diteur et vous pouvez constater que les codes machines
ont t dsassembls et inclus au texte,
 partir de la dernire position du curseur ">".

Un label a aussi t cr.

Un label commenant par un "R" est une adresse  laquelle aboutit un saut relatif.

Si un label occupe une ligne  lui seul c'est que plusieurs sauts relatifs aboutissent  cette adresse.

Une adresse appele par un "CALL" ou un "JMP" engendre une ligne commentaire vide et un label commenant par un "W".
