CODINGCLEFS POUR AMSTRAD 1 ★ Système de base par Daniel Martin ★

Clefs1 26 Les Vecteurs d'appel des Routines MathématiquesCoding Clefs Pour Amstrad 1
LES VECTEURS D'APPEL DES ROUTINES MATHEMATIQUES

Les routines mathématiques contenues dans la ROM inférieure doivent être appelées souvent depuis la ROM Basic pour effectuer toutes les fonctions Basic de calcul ( + , *, /, sin, cos,...).

Une série de vecteurs a été créée pour faciliter cet appel.

Les fonctions mathématiques du Basic fonctionnent sur un accumulateur virtuel de six octets situé de B0C1 à B0C6. B0C1 contient le type de la variable (2 = entier, 3 = chaîne, 5 = réel).

Une variable entière est codée sur deux octets en binaire signé.

Une variable réelle est plus complexe. Elle est représentée par cinq octets, suivant un codage binaire particulier :
— exprimer le nombre en binaire ;
— compter le nombre de chiffres significatifs situés avant la virgule et lui ajouter 128 (80H). On obtient l'octet 5 ;
— supprimer le premier bit de gauche et convertir les sept autres bits en décimal. Si le nombre est négatif, ajouter 128 (80H). On obtient l'octet 4 ;
— pour obtenir les octets 3, 2 et 1, prendre les bits suivants par tranche de 8 et les convertir en décimal.

Exemple : codage de la variable réelle : -2527.

2527 s'écrit en binaire 1 0011101 1111 (12 chiffres)

Octet 5 = 8C car : 128+12= 140 = 8C
Octet 4 = 9D car : prendre les sept bits suivants : 0011101 = 29 = 1D.

Le nombre étant négatif, ajouter 128 :
29 + 128= 157 = 9D. Octet 3 = F0 car : les huit bits suivants sont 1111 0000 = 240= F0.
Octet 2 et octet 1 = 00 car il n'y a plus de bits. -2527 se code donc : 00 00 F0 9D 8C.

Adresse vecteurAdresse réelleSignification
BD3D2E18Copie les cinq octets pointés par DE vers la zone pointée par HL et passe dans A le conte­nu de l'octet qui se trouve à l'adresse HL-1 (type de variable).
BD402E29Copie le contenu de A dans les cinq octets pointés par DE.
BD432E55Conversion du nombre binaire pointé par HL en nombre au format de l'accumulateur (5 octets).
BD462E66Transforme la valeur contenue dans les cinq octets pointés par HL en un entier contenu dans HL.
BD492E8ETransforme la valeur contenue dans les cinq octets pointés par HL en un entier contenu dans les deux premiers octets pointés par HL.
BD4C2EA1Réalise la fonction FIX.
BD4F2EACRéalise la fonction INT.
BD522EB6Itoutine SGN utilisée par STRg et PRINT.
BD552F1DRoutine de multiplication par 10 exposant A.
BD58333FAddition de deux réels. HL pointe sur une zone de cinq octets représentant un nombre au format réel (appelée ACCUM1). DE pointe sur une autre zone de cinq octets (appelée ACCUM2). A l'issue de la routine, HL pointe toujours sur ACCUM1 et ACCUM1 contient la va­leur de ACCUM1+ACCUM2.
BD5B3337Soustraction de deux réels. HL pointe sur une zone de cinq octets représentant un nombre au format réel (appelée ACCUM1). DE pointe sur une autre zone de cinq octets (appelée ACCUM2). A l'issue de la routine, HL pointe toujours sur ACCUM1 et ACCUM1 contient la va­leur de ACCUM1-ACCUM2.
BD5E333BSoustraction de deux réels. Comme ci-dessus, mais ACCUM1 contient la valeur de ACCUM2-ACCUM1.
BD613415Multiplication de deux réels. Comme ci-dessus» mais ACCUM1 contient la valeur de ACCUM1 * ACCUM2.
BD64349EDivision de deux réels. Comme ci-dessus, mais ACCUM1 contient la valeur de ACCUM1 / ACCUM2.
BD673578Ajoute A au dernier octet du nombre pointé par HL.
BD6A359AComparaison de deux réels :si ACCUM1> ACCUM2, alors A=1 si ACCUM1< ACCUM2, alors A=255 si ACCUM1= ACCUM2, alors A=0.
BD6D35F8Négation d'un réel. HL pointe sur ACCUM1 qui contient la valeur de -ACCUM1.
BD7035E8Teste le réel contenu dans ACCUM1. HL pointe sur ACCUM1.Si ACCUM1> 0, alors A=1.Si ACCUM1< 0. alors A=255.Si ACCUM1= 0, alors A=0.
BD7331AEPositionnement du mode de calcul d'angles en degrés ou en radians.Si A=0, on est en mode RADIANS.Si AttO, on est en mode DEGRES.
BD7631A3En sortie, la zone pointée par HL en entrée contient la constante PI.
BD79310AExtraction de la racine carrée d'un nombre réel. En entrée, HL pointe sur une zone de cinq octets qui contient un nombre. En sor­tie, cette zone contient la racine carrée du nombre.
BD7C310DCalcul de l'exposant d'un nombre réel. HL pointe sur ACCUM1 qui contient le nombre et DE pointe sur ACCUM2 qui contient l'expo­sant. En sortie, ACCUM1 contient la valeur de ACCUM1 exposant ACCUM2.
BD7F3014Calcul du logarithme népérien d'un nombre réel. HL pointe sur ACCUM1 qui contient le nombre en entrée. En sortie, ACCUM1 contient la valeur du logarithme népérien du nombre.
BD82300FCalcul du logarithme en base 10 d'un nombre réel. HL pointe sur ACCUM1 qui contient le nombre en entrée. En sortie, ACCUM1 contient la valeur du logarithme décimal du nombre.
BD853090Calcul de l'exponentielle d'un nombre.HL pointe sur ACCUM1 qui, en sortie, contientla valeur de l'exponentielle du nombre.
BD8831BCCalcul du sinus d'un angle.
BD8B31B2Calcul du cosinus d'un angle.
BD8E3231Calcul de la tangente d'un angle.
BD913241Calcul de l'arctangente d'un angle.
BD942E5ERoutine d'évaluation.
BD972F94Routine de chargement de B8E4 et B8E6 à l'initialisation.
BD9A2FA1Routine utilisée pour la génération de nom­bres aléatoires.
BD9D2FB7Idem.
BDAO2FE6Idem.
BDA33708Manipulation avec HL.
BDA6370EPousse 0 dans B, 0 dans E et 2 dans C.
BDA93715Manipulation avec HL.
BDAC3728Addition de deux nombres entiers. HL=HL+DE. A=FF en cas de débordement.
BDAF3731Soustraction de deux nombres entiers. HL=HL-DE. A=FF en cas de débordement.
BDB23730Soustraction de deux nombres entiers. HL=DE-HL. A=FF en cas de débordement.
BDB53739Multiplication de deux nombres entiers. HL=HL*DE. A=FF en cas de débordement.
BDB8377ADivision de deux nombres entiers. HL=HL/DE. DE contient le reste de la division en sortie.
BDBB3781Reste de la division de deux entiers. HL = reste de HL/DE.
BDBE3750Manipulation particulièrement ténébreuse entre HL et DE.
BDC1378CRoutine utilisée lors de l'instruction PRINT.
BDC437E9Comparaison de deux nombres entiers. Si HL> DE, alors A=1. Si HL< DE, alors A=FF. Si HL= DE, alors A=0.
BDC737D4Négation d'un nombre entier. En sortie, HL=-(HL).
BDCA37E0Test de HL.Si HL> 0, alors A=1. Si HL< 0, alors A=255. Si HL= 0, alors A=0.

★ ANNÉE: ???
★ AUTEUR(S): ???

Page précédente : Clefs1 25 Vecteurs Noyau Restart
Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 079 millisecondes et consultée 1725 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.