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.
LOGICIEL DEPOSE A L'APP
© Micro Application 1985
13, Rue Sainte Cécile, 75009 PARIS - Tél. : (1) 47 70 32 44
Sans accord de l'APP :)
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).
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.
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.
Passe de majuscule à minuscule et inversement.
DAMS accepte indifféremment les majuscules et les minuscules. L'assembleur accepte aussi les minuscules.
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.
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.
Bascule la base d'affichage des nombres entre décimal et hexadécimal.
Active/Désactive la sortie vers l'imprimante.
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é.
s
est un ;
, le source est affiché à partir du début.s
est nulle le source est affiché à partir de la dernière position connue du curseur “>
”.s
n'est pas trouvée dans le texte alors la commande n'a pas d'effet.Exemples
L
loop
: Lloop
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).
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 :
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
8
Quitte DAMS, généralement pour retourner au BASIC.
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.
Même effet que Q mais sur 2 octets
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.
Sauvegarde d'un fichier ayant pour nom la chaîne s
.
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
.
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.
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).
Assemble le source avec l'option n
et s
comme nom du 1er bloc. Ces 2 arguments ne sont pas obligatoires (Voir assembleur).
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
.
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.
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.
Dans un premier temps, affiche le contenu des registres, puis trace pas à pas (voir trace).
“Q” ou <CTRL> C revient au moniteur.
Trace en mode rapide à partir de l'adresse nn
(voir trace).
<CTRL> C ramène au mode Trace.
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
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.
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.
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.
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.
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.
Fait monter le curseur ”>” d'une ligne ou descend le texte si le curseur ”>” est en haut.
Descend le curseur ”>” d'une ligne ou monte le texte si le curseur est déjà en bas.
Efface la ligne pointée par le curseur ”>”.
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 ”>”
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.
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.
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.
Efface le caractère avant le curseur.
Avance le curseur d'un caractère.
Recule le curseur d'un caractère.
Il autorise des lignes de 80 caractères maximum.
Il existe 2 types de ligne :
Exemple :
LABELS | MNEMONIQUES | OPERANDES | COMMENTAIRES |
---|---|---|---|
ORG | #8000 | ||
; ligne de commentaire pur | |||
LD | HL,text | ||
loop | |||
LD | A,(HL) | ; lecture d'un caractère | |
OR | A | ||
RET | Z | ||
CALL | #BB5A | ; affiche le code ASCII du caractère | |
INC | HL | ||
JR | loop | ||
text | |||
DEFM | “Arkos rulez!” | ||
DEFB | 0 |
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.
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
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.
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.
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).
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.
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.
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.
Le symbole “Label” prend la valeur nn, nn doit être une constante ou un label déjà défini.
Chaque octet de mémoire prend la valeur n.
Chaque groupe de 2 octets prend la valeur nn.
Saute nn octets. Si n est présent, alors les nn octets sont remplis par la valeur n.
Les octets suivants sont remplis par la chaîne s.
Signale à la commande J du moniteur que le point d'entrée du programme sera l'adresse nn.
Evalue l'expression. Si l'expression est égale à 0, alors l'assemblage est invalidé jusqu'à l'apparition d'un ELSE ou d'un END.
Valide ou invalide l'assemblage.
Valide l'assemblage des lignes qui suivent.
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 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 :
12 | Constante numérique décimale. |
#20 | Constante numérique hexadécimale. |
%10110 | Constante numérique binaire. |
“a” | Constante numérique code ASCII du caractère a |
VALEUR | Etant un label auquel un assemblage a donné une valeur. |
$ | Représente 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 adressés par x (DEEK). |
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é.
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.
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.
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”.
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.
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 :
Un label porte déjà le même nom et un label ne peut avoir 2 valeurs.
Le déplacement relatif d'un JR ou l'index d'un registre IX ou IY a une valeur hors intervalle.
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.
Un caractère d'un label ou de la ligne est illégal.
*F,s
a été trouvé à la fin du source alors qu'il n'est pas assemblé par bloc.Clôture toute opération avec un périphérique qui a échoué.
L'option 1 a été sélectionnée et la table de symboles nécessite plus de 16Ko (damned!! :).
Vous avez interrompu une opération.
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.
(If Flash is installed JavaScript is activated, you can watch a video inside this web page.)
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.
Offset | Variable | Taille | Description |
---|---|---|---|
+37 | PTEXT | 2 octets | Stocke l 'adresse du début de la ligne pointée par le curseur ”>”. |
+42 | FLG1 | 1 octet | Le 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. |
+80 | HRAM | 2 octets | Stocke la dernière adresse à laquelle DAMS peut déposer du code objet ou peut fixer la valeur de Hmem (commande M). |
+43 | FLG2 | 1 octet | Le 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. |
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.