; LIBASC.TXT
;
;    Bibliotheque de sous-programmes de gestion des carracteres ASCII
;    ----------------------------------------------------------------
;
;                     (C) E+E CHAMOUARD 1993-2002


; Conversions ASCII <-> Hexa sur un caractere
; -------------------------------------------

AscHexa2Car:
    Fonction  :   Conversion hexa -> ASCII
    Entree(s) :   Hexa dans le registre A
    Sortie(s) :   Car ASCII dans le registre A et C=0
                  si pas hexa entre 0 et 15 sort '*' et C=1
    Utilise   :   Registres A et PSW
    Pile      :   3 avec l'appel
    Cycles    :   ?

AscCar2Hexa:
    Fonction  :   Conversion ASCII-> Hexa
    Entree(s) :   Car ASCII dans le registre A
    Sortie(s) :   Hexa dans le registre A avec
                  C=0 si le car est bien un hexa
                  C=1 si le car n'etait pas un hexa (dans ce cas A=ffh)
    Utilise   :   Registres A et PSW
    Pile      :   2 avec l'appel
    Cycles    :   ?


; Conversions Hexa -> ASCII en memoire interne
; --------------------------------------------

AscHexa2AsciidecInt:
    Fonction  :   Conversion de 4 bits en decimal ascii en memoire interne
    Entree(s) :   Hexadecimal dans le registre A
                  R0 pointe sur la destination
    Sortie(s) :   Caracteres ascii en @R0 et @R0+1 (memoire interne) et C=0
                  R0 avance de 2 cases
                  Si hexa > 0fh retourne "**" et C=1
    Utilise   :   Registres A et B non sauvegardes
    Pile      :   3 avec l'appel
    Cycles    :   ?

AscByte2AsciidecInt:
    Fonction  :   Conversion de 8 bits en decimal ascii en memoire interne
    Entree(s) :   Byte dans le registre A
                  R0 pointe sur la destination
    Sortie(s) :   Caracteres ascii en @R0, @R0+1 et @R0+2 C=0
                  en memoire interne
                  R0 avance de 3 cases
    Utilise   :   Registres A et B non sauvegardes
    Pile      :   2 avec l'appel
    Cycles    :   ?

AscWord2AsciidecInt:
    Fonction  :   Conversion de 16 bits en decimal ascii en memoire interne
    Entree(s) :   Word dans les registres {B,A} (B=MSB)
                  R0 pointe sur la destination
    Sortie(s) :   Caracteres ascii en @R0 a @R0+4 et C=0
                  en memoire interne
                  R0 avance de 5 cases
    Utilise   :   Registres DPH, DPL, B et A non sauvegardes
    Pile      :   2 avec l'appel
    Cycles    :   ?

AscHexa2AsciihexInt:
    Fonction  :   Conversion de 4 bits en hexadecimal ascii en memoire interne
    Entree(s) :   Hexadecimal dans le registre A
                  R0 pointe sur la destination
    Sortie(s) :   Caractere ascii en @R0 (memoire interne) et C=0
                  R0 avance de 1 case
                  Si hexa > 0fh retourne "*" et C=1
    Utilise   :   Registre A non sauvegarde
    Pile      :   5 avec l'appel
    Cycles    :   ?

AscByte2AsciihexInt:
    Fonction  :   Conversion de 8 bits en hexadecimal ascii en memoire interne
    Entree(s) :   Byte dans le registre A
                  R0 pointe sur la destination
    Sortie(s) :   Caracteres ascii en @R0 et @R0+1 (memoire interne) et C=0
                  R0 avance de 2 cases
    Utilise   :   Registre A non sauvegarde
    Pile      :   6 avec l'appel
    Cycles    :   ?

AscWord2AsciihexInt:
    Fonction  :   Conversion de 16 bits en hexadecimal ascii en memoire interne
    Entree(s) :   Word dans les registres {B,A} (B=MSB)
;               R0 pointe sur la destination
    Sortie(s) :   Caracteres ascii en @R0 a @R0+3 (memoire interne) et C=0
;               R0 avance de 4 cases
    Utilise   :   Registres A et B non sauvegardes
    Pile      :   6 avec l'appel
    Cycles    :   ?


; Conversions ASCII -> Hexa en memoire interne
; --------------------------------------------

AscAsciihexInt2Hexa:
    Fonction  :   Conversion d'un hexadecimal ascii en memoire interne en 4 bits
    Entree(s) :   R0 pointe sur le caractere a convertir
    Sortie(s) :   Hexadecimal dans le registre A et C=0 si @R0 est un hexa (R0 avance d'une case)
                  ou ffh dans A, C=1 et R0 ne bouge pas si le caractere n'est pas un hexa
    Utilise   :   Registres A et PSW non sauvegardes
    Pile      :   4 avec l'appel
    Cycles    :   ?

AscAsciihexInt2Byte:
    Fonction  :   Conversion de deux hexadecimal ascii en memoire interne en 8 bits
    Entree(s) :   R0 pointe sur les caracteres a convertir
    Sortie(s) :   Octet dans le registre A et C=0 si @R0 et @R0+1 forment un octet
                  (R0 avance de 2 cases) ou ffh dans A, C=1 et R0 ne bouge pas si les
                  caracteres ne sont pas des hexa
    Utilise   :   Registres A, B et PSW non sauvegardes
    Pile      :   4 avec l'appel
    Cycles    :   ?

AscAsciihexInt2Word:
    Fonction  :   Conversion de quatre hexadecimal ascii en memoire interne en 16 bits
    Entree(s) :   R0 pointe sur les caracteres a convertir
    Sortie(s) :   Word dans {B,A} (B=MSB) et C=0 si @R0 a @R0+3 forment un octet
                  (R0 avance de 4 cases) ou ffffh dans {B,A}, C=1 et R0 ne bouge pas si
                  les caracteres ne sont pas des hexa
    Utilise   :   Registres A, B et PSW non sauvegardes
    Pile      :   7 avec l'appel
    Cycles    :   ?


; Passage minuscule <-> majuscule
; -------------------------------

AscCarUpcase:
    Fonction  :   Passage d'un caractere en majuscule
    Entree(s) :   Car ASCII dans le registre A
    Sortie(s) :   Car ASCII en majuscule dans le registre A
                  ne change rien si non compris entre a et z
    Utilise   :   Registre A
    Pile      :   2 avec l'appel
    Cycles    :   ?

AscCarDowncase:
    Fonction  :   Passage d'un caractere en minuscule
    Entree(s) :   Car ASCII dans le registre A
    Sortie(s) :   Car ASCII an minuscule dans le registre A
                  ne change rien si non compris entre A et Z
    Utilise   :   Registre A
    Pile      :   2 avec l'appel
    Cycles    :   ?

AscStringUpcase:
    Fonction  :   Passage en majuscule d'une chaine ascii en memoire externe
    Entree(s) :   DPTR pointe sur la chaine (terminee par un 0) a convertir
    Sortie(s) :   Chaine passee en majuscule 
    Utilise   :   Registres A et DPTR non sauvegardes
    Pile      :   4 avec l'appel
    Cycles    :   ?

AscStringDowncase:
    Fonction  :   Passage en minuscule d'une chaine ascii en memoire externe
    Entree(s) :   DPTR pointe sur la chaine (terminee par un 0) a convertir
    Sortie(s) :   Chaine passee en minuscule
    Utilise   :   Registres A et DPTR non sauvegardes
    Pile      :   4 avec l'appel
    Cycles    :   ?
