home *** CD-ROM | disk | FTP | other *** search
- EMON51.DOC
-
- voir aussi:
- EMON51.A51 ; EMON51 code source
- EMON51.LST ; Listing
- EMON51.HEX ; Listing hexadécimal avec somme de vérification d'EMON51
- (voir EASM51.DOC)
-
- Pour pouvoir fonctionner, EMON51 nécessite les adresses de 30H à 4FH en RAM
- interne et celles de 4000H à 40FFH en mémoire de données.
-
- Pour commencer EMON51 vérifie si RxD et TxD sont reliés directement. Si cela
- est le cas, la ligne TxD produit des sons (auto-test). EMON51 vérifie ensuite
- si la ligne RxD se trouve au niveau haut pour sauter à l'adresse 04100H (si,
- en effet, cette ligne se trouve au niveau haut). En présence d'une interface
- V24 fonctionnant normalement, la ligne RxD se trouve au niveau bas et EMON51
- initialise l'interface sérielle interne pour une communication à 4 800 baud (à
- une fréquence d'horloge de 12 MHz) en affichant un message correspondant.
- Maintenant EMON51 entre en mode de communication en faisant paraître sur
- l'écran le "caractère d'invite" de dialogue (prompt) #.
-
- ┌────────────────────────────────────┬──────────────────────────────────────┐
- │ Commandes de dialogue │Signification │
- ├────────────────────────────────────┼──────────────────────────────────────┤
- │ X adresse hex.<enter> │eXécute │
- │ P adresse hex.<enter> │affichage de la mémoire pour Programme│
- │ D adresse hex.<enter> │affichage de la mémoire de Données │
- │ R adresse hex.<enter> │affichage de la RAM │
- │ F adresse hex.{bytes<blank>}<enter>│remplir mémoire de données │
- │ M adresse hex.{bytes<blank>}<enter>│Modifier la RAM │
- │ H {chargement} │téléchargement hexadécimal │
- └────────────────────────────────────┴──────────────────────────────────────┘
-
- ---> La commande X
- sert à lancer un programme à une certaine adresse. Après le X, EMON51 se
- manifeste par l'affichage des caractères d'invite "H>" et attend donc
- l'entrée d'un nombre hexadécimal. Cette entrée se termine avec une action
- sur la touche <enter>. Le programme est alors lancé à l'adresse
- indiquée.
-
- ---> La commande P
- permet d'afficher le contenu de la mémoire pour programme. Après le P,
- EMON51 montre les caractères d'invite "H>" et attend donc l'entrée d'un
- nombre hexadécimal. Il faudra terminer cette entrée par une action sur la
- touche <enter>. Le contenu des 128 octets de la mémoire de programme est
- alors visualisé sur l'écran de votre moniteur. La première colonne
- contient l'adresse actuelle.
- Si, après l'apparition de "H>", on appuie sur la touche <enter> au lieu
- d'entrer une adresse hexadécimale, la dernière adresse utilisée servira
- d'adresse initiale. De multiples actions sur <enter> permettent donc de
- vérifier tout un domaine dans la mémoire de programme.
-
- ---> La commande D
- sert à afficher le contenu de la mémoire de données. Pour une explication
- de son fonctionnement il faudra se référer au paragraphe concernant la
- commande P.
-
- ---> La commande R
- sert à afficher le contenu de la RAM. Pour une explication de son
- fonctionnement on se référera au paragraphe concernant la commande
- P.
-
- ---> La commande F
- permet de modifier le contenu de la mémoire de données. Après le F, EMON51
- montre les caractères d'invite "H>" et attend donc l'entrée d'un nombre
- hexadécimal. Il faudra terminer cette entrée par une action sur la touche
- <enter>. Ce nombre hexadécimal est l'adresse initiale du domaine de la
- mémoire à remplir.
-
- EMON51 visualise ensuite l'adresse et le contenu de l'emplacement en
- mémoire choisi et fait paraître les caractères d'invite "H>". Il faudra
- maintenant entrer un nombre hexadécimal correspondant au nouveau contenu
- de l'emplacement en mémoire. Ce nouveau contenu est écrit dans la mémoire
- et EMON51 continue avec l'emplacement en mémoire suivant.
-
- Si, après l'apparition de "H>", l'on entre un espace (blanc) au lieu d'un
- nombre hexadécimal représentant le nouveau contenu de l'emplacement en
- mémoire, EMON51 continuera avec l'emplacement en mémoire suivant.
-
- Si, après l'apparition de "H>", l'on appuie sur <enter> au lieu d'entrer
- un nombre hexadécimal, EMON51 quitte le mode F et retourne au dialogue
- standard.
-
- ---> La commande M
- sert à modifier le contenu de la RAM interne. Pour une explication de son
- fonctionnement il faudra se référer au paragraphe concernant la commande
- F.
-
- ---> La commande H
- sert à effectuer un téléchargement automatique, tout en faisant appel au
- programme de communication V24COM. Pour en savoir quant au déroulement de
- ce processus de téléchargement, il faudra se référer aux fichiers
- EMON51.A51 et V24COM.PAS.
- Maintenant EMON51 redevient actif sans visualiser pourtant le caractère
- d'invite "#". Une fois le téléchargement terminé, V24COM envoie au SIMCAD
- un CR (carriage return = retour à la ligne) qui force le caractère
- d'invite "#" à apparaître.
-
-
- -------------------------------------------------------------------------------
- Routines du MONITEUR:
-
- EMON51 met à la disposition du programmeur toute une gamme de programmes
- de soutien, facilitant la programmation en assembleur. Tous ces programmes
- peuvent être appelés par l'instruction CALL à l'adresse d'entrée dans EMON51:
-
- MON = 0200H.
-
- La fonction à exécuter est définie par le contenu de l'octet COMMAND avec
- l'adresse 030H, dans la RAM interne. En général, les différents paramètres sont
- à transférer dans les registres ou reviennent dans ces registres.
-
- ATTENTION: les routines modifient des registres internes !!
-
- Voici un exemple destiné à un appel (DEMO3.A51):
-
- -------------------------------------------------------------------------------
- ;
- ccCHR EQU 1 ; instruction de sortie de caractère
- COMMAND EQU 030H ; adresse COMMAND
- MON EQU 0200H ; adresse d'entrée dans le MONITEUR
- ;
- ORG 04100H ; adresse initiale
- CHR MOV COMMAND,#ccCHR ; je veux transférer le caractère
- MOV A,#'x' ; x
- LCALL MON ; appel du MONITEUR
- RET ; retour à l'initialisateur
- END
- -------------------------------------------------------------------------------
- Les routines du MONITEUR suivantes sont à votre disposition:
-
- Nom Code
- ;
- ;
- ccCHR EQU 001H
- ccSTXT EQU 002H
- ccBYTE EQU 003H
- ccHEX16 EQU 004H
- ccdRO16 EQU 005H
- ccdRO32 EQU 006H
- cchRO16 EQU 007H
- cchRO32 EQU 008H
- ;
- ccGETC EQU 010H
- ccTSTC EQU 011H
- ccGET16 EQU 012H
- ccGET10 EQU 013H
- ccGETU EQU 014H
- ;
- ccSNAP EQU 020H
- ccLTIME EQU 021H
- ccSTIME EQU 022H
- ;
- ccLINK EQU 040H
- ;
- ccADD EQU 050H
- ccSUB EQU 051H
- ccMUL EQU 052H
- ccDIV EQU 053H
- ccABS EQU 054H
- ccNEG EQU 055H
- ;
- -------------------------------------------------------------------------------
-
- Nom : ccCHR
- Paramètre: caractère dans A
- Registre modifié: PSW
- Fonction:
- Le caractère (ASCII) dans l'accumulateur A est transféré par
- l'intermédiaire de V24.
-
- -------------------------------------------------------------------------------
-
- Nom : ccBYTE
- Paramètre: octet dans A
- Registre modifié: A,PSW
- Fonction:
- L'octet dans l'accumulateur A est transféré sous forme hexadécimale par
- l'intermédiaire de V24.
-
- -------------------------------------------------------------------------------
-
- Nom : ccHEX16
- Paramètre: valeur à 16 bits dans DPTR
- Registre modifié: A,PSW
- Fonction:
- La valeur stockée dans DPTR est transférée sous forme hexadécimale
- (à 4 positions) par l'intermédiaire de V24.
-
- -------------------------------------------------------------------------------
-
- Nom : ccdRO16
- Paramètre: dans R0 : pointeur sur valeur à 16 bits dans la RAM
- interne
- Registre modifié: A,PSW,tous les registres
- Fonction:
- La valeur à 16 bits dans la RAM interne, pointée par R0, est transférée
- sous forme décimale par l'intermédiaire de V24. R0 pointe l'octet de
- poids faible, R0+1 l'octet de poids fort.
-
- -------------------------------------------------------------------------------
-
- Nom : ccdRO32
- Paramètre: dans R0 : pointeur sur la valeur à 32 bits dans la RAM
- interne
- Registre modifié: A,PSW,tous les registres
- Fonction:
- La valeur à 32 bits dans la RAM interne, pointée par R0, est transférée
- sous forme décimale par l'intermédiaire de V24. R0 pointe l'octet de
- poids faible, R0+1 l'octet de poids fort.
-
- -------------------------------------------------------------------------------
-
- Nom : cchRO16
- Paramètre: dans R0 : pointeur sur la valeur à 16 bits dans la RAM
- interne
- Registre modifié: A,PSW,tous les registres
- Fonction:
- La valeur à 16 bits dans la RAM interne, pointée par R0, est transférée
- sous forme hexadécimale par l'intermédiaire de V24. R0 pointe l'octet de
- poids faible, R0+1 l'octet de poids fort.
-
- -------------------------------------------------------------------------------
-
- Nom : cchRO32
- Paramètre: dans R0 : pointeur sur la valeur à 32 bits dans la RAM
- interne
- Registre modifié: A,PSW,tous les registres
- Fonction:
- La valeur à 32 bits dans la RAM interne, pointée par R0, est transférée
- sous forme hexadécimale par l'intermédiaire de V24. R0 pointe l'octet
- de poids faible, R0+1 l'octet de poids fort.
-
-
- -------------------------------------------------------------------------------
-
- Nom : ccGETC
- Paramètre: placement d'un caractère dans A
- Registre modifié: A,PSW
- Fonction:
- Un caractère est pris en compte sur l'interface V24. En absence d'un
- caractère, le programme attend la réception d'un caractère.
-
- ---------------------------------------------------------------------
-
- Nom : ccTSTC
- Paramètre: placement d'une valeur dans A
- Registre modifié: A,PSW
- Fonction:
- Si un caractère est présent sur l'interface V24, la valeur 1 est
- déplacée vers A; sinon, en absence de caractère, c'est un 0 que
- l'on met dans l'accumulateur.
-
- ---------------------------------------------------------------------
-
- Nom : ccGETU
- Paramètre: placement d'un caractère dans A
- Registre modifié: A,PSW
- Fonction:
- identique à ccGETC, minuscules sont transformées en majuscules.
-
- ---------------------------------------------------------------------
-
- Nom : ccGET10
- Paramètre: pointeur sur une valeur à 16 bit dans R0
- Registre modifié: A,B,PSW,tous les registres
- Fonction:
- Un nombre décimal est pris de l'interface V24 (à l'aide de l'in-
- struction "D>""). La valeur est stockée provisoirement dans la RAM
- interne. Dans le registre R0 un pointeur est placé sur cette valeur.
-
- ---------------------------------------------------------------------
-
- Nom : ccGET16
- Paramètre: pointeur sur une valeur à 16 bit dans R0
- Registre modifié: A,B,PSW,tous les registres
- Fonction:
- Un nombre hexadécimal est pris de l'interface V24 (à l'aide de
- l'instruction "H>""). La valeur est stockée provisoirement dans la RAM
- interne. Dans le registre R0 un pointeur est placé sur cette valeur.
-
- ---------------------------------------------------------------------
-
- Nom : ccSNAP
- Paramètre: aucun
- Registre modifié: aucun
- Fonction:
- Le contenu actuel des registres est déplacé vers l'interface
- V24 sans être modifié.
-
- ---------------------------------------------------------------------
-
- Nom : ccLTIME
- Paramètre: valeur à 16 bit dans DPTR
- Registre modifié: DPTR,codes complémentaires (flags)
- Fonction:
- Une pause de 'n'-millisecondes environ est introduite. 'n' est
- une valeur définie dans DPTR (indication valable uniquement pour
- une fréquence d'horloge de 12 MHz).
-
- ---------------------------------------------------------------------
-
- Nom : ccSTIME
- Paramètre: valeur à 16 bit dans DPTR
- Registre modifié: DPTR,codes complémentaires (flags)
- Fonction:
- Une pause de 15*'n'-millisecondes environ est introduite. 'n' est
- une valeur définie dans DPTR (indication valable uniquement pour
- une fréquence d'horloge de 12 MHz).
-
- ---------------------------------------------------------------------
-
- Nom : ccLINK
- Paramètre: index dans A , adresse dans DPTR
- Registre modifié: A,B,PSW,R6,R7
- Fonction:
- Transfert de l'adresse d'une procédure d'interruption dans DPTR;
- d'un index dans A:
-
- Index Interruption Adresse standard
- 1 IE0 0003H
- 2 TF0 000BH
- 3 IE1 0013H
- 4 TF1 001BH
- 5 RI+TI 0023H
- 6 TF2+EXF2 002BH
-
- LINK fait ensuite que l'interruption en question se traduise par
- le lancement de la routine indiquée. Après une remise à zéro,
- tous les LINK sont effacés et remplacés par des LINK de défaut.
-
- ---------------------------------------------------------------------
- ROUTINES ARITHMÉTIQUES:
-
- Les opérandes sont présents dans la RAM interne et sont adressés par des
- pointeurs, placés eux sur l'octet le moins significatif, dans les registres
- R0 et R1 respectivement. Le déplacement de valeurs s'effectue également à
- travers la RAM interne dans des tampons provisoires définis par EMON51.
- Les pointeurs placés sur ces valeurs sont présents dans le registre R0,
- voire R1.
- Du fait que d'autres appels du Moniteur utilisent les mêmes tampons
- provisoires, il faudra, avant de procéder à un traitement des valeurs,
- les copier dans d'autres emplacements en mémoire. Les routines détruisent
- le contenu de tous les registres concernés.
-
- Les routines spécifiques:
-
- Nom : ccADD
- Paramètre: R0, R1 : pointeur placé sur opérandes à 16 bits,
- Effet : R0 : pointeur placé sur le résultat.
- Les 2 nombres à 16 bits, @R0 et @R1 sont additionnés.
- Dans R0 un pointeur est placé sur le résultat.
-
- Nom : ccSUB
- Paramètre: R0, R1 : pointeur placé sur opérandes à 16 bits,
- Effet : R0 : pointeur placé sur le résultat.
- Soustraction du nombre à 16 bits @R1 du nombre à 16 bits @R0.
- Dans R0 un pointeur est placé sur le résultat.
-
- Nom : ccMUL
- Paramètre: R0, R1 : pointeur placé sur opérandes à 16 bits,
- Effet : R0 : pointeur placé sur le résultat à 32 bits.
- Multiplication des 2 nombres (non signé) à 16 bits, @R0 et @R1.
- Dans R0 un pointeur est placé sur le résultat à 32 bits.
-
- Nom : ccDIV
- Paramètre: R0 : pointeur sur un nombre à 32 bits,
- R1 : pointeur sur opérande à 16 bits,
- Effet : R0 : pointeur sur résultat à 16 bits,
- R1 : pointeur sur le reste à 16 bits.
- Le nombre @R0 à 32 bits est divisé par @R1 (sans signe !).
- Dans R0 un pointeur est placé sur le quotient à 16 bits.
- Dans R1 un pointeur est placé sur le reste à 16 bits.
- Pour garantir le bon fonctionnement de cette routine il faudra
- que le quotient soit inférieur au nombre 65 636.
-
- Nom : ccABS
- Paramètre: R0 : pointeur sur un nombre à 16 bits
- Effet : valeur modifiée et éventuellement le code complémentaire CY
- Constitution de la valeur absolue du nombre à 16 bits @R0.
- La nouvelle valeur écrase l'ancienne ! R0 ne change
- pas lors de cette opération. Le code complémentaire CY est
- positionné uniquement si la valeur d'origine était négative.
- (Arithmétique de complément à deux)
-
- Nom : ccNEG
- Paramètre: R0 : pointeur sur un nombre à 16 bits,
- Effet : valeur modifiée.
- Constitution de la valeur négative du nombre à 16 bits @R0.
- Cette nouvelle valeur écrase l'ancienne. R0 ne
- change pas ! (Arithmétique de complément à deux)