Je bosse sur un programme "terminal" en VT100 et j'ai besoins de redéfinir mes caractères en ANSI. J'ai fait la définition complète: ANSICAR: DEFB &00,&7E,&7E,&6C,&10,&38,&10,&00,&FF,&00,&FF,&0F,&3C,&3F,&7F,&99 DEFB &80,&02,&18,&66,&7F,&3E,&00,&18,&18,&18,&00,&00,&00,&00,&00,&00 DEFB &00,&10,&28,&28,&10,&C2,&30,&40,&10,&10,&92,&00,&00,&00,&00,&02 DEFB &7C,&10,&7C,&7C,&0C,&FE,&38,&FE,&7C,&7C,&00,&00,&08,&00,&20,&7C DEFB &7C,&38,&FC,&7C,&FC,&FE,&FE,&3C,&82,&7C,&3E,&82,&80,&82,&82,&38 etc etc etc Chaque entrée DEFB comprend deux caractères
Tous les caractères sont fait mais je ne comprends pas la mise en oeuvre les firmware. TXT GET MATRIX TXT SET MATRIX TXT SET M TABLE TXT GET M TABLE
Sachant que la totalité des caractères seront redéfini et qu'ils sont en ordre adjacent dans la "table" comment faire en assembleur ?
Inscription : 20 Août 2007, 18:21 Message(s) : 4997
Voilà comment j’utilise le vecteur system &BBAB
Code :
BuffChar equ &A000
ld de,"A" ; 1er caractere ld hl,BuffChar call #bbab ;BBAB TXT SET M TABLE fixer adresse de départ et premier caractère d'une matrice de points définie par l'utilisateur.
ld hl,ANSICAR ; copie ta redéfinition de caractères ld de,BuffChar ld bc,8*char ldir ret
ANSICAR: db %11111111 db %11000011 db %11000011 db %11000011 db %11000011 db %11000011 db %11000011 db %11111111
Pour être honnête j'y comprend pas grand chose. J'aurais bien voulu un peu plus d'explication. Déjà j'ai 254 caractères a faire, donc j'imagine que je dois boucler. Genre après le ret je fais un INC DE et je rappel la routine avec les push/pop qui vont bien. Mais pour le reste....
Inscription : 20 Août 2007, 18:21 Message(s) : 4997
secmast a écrit :
Heuuuuuu..... Mais encore ?
Pour être honnête j'y comprend pas grand chose. J'aurais bien voulu un peu plus d'explication. Déjà j'ai 254 caractères a faire, donc j'imagine que je dois boucler. Genre après le ret je fais un INC DE et je rappel la routine avec les push/pop qui vont bien. Mais pour le reste....
Ce bout de code est vraiment très simple , pas besoin de boucle .
secmast a écrit :
pourquoi HL, buffchar
buffchar ==> est l'emplacement ou va ce retrouver tes caractères contenu dans la rom (en basic équivalent à "symbol after") ; ld de,"A" ==> est le 1er caractère a modifier:
Code :
ld de,"A" ; 1er caractère ld hl,BuffChar call #bbab ;BBAB TXT SET M TABLE fixer adresse de départ et premier caractère d'une matrice de points définie par l'utilisateur.
Une fois qu'ils ce trouvent en RAM, tu les modifies avec un ldir (dans cet exemple équivalent à la commande basic "symbol") ; ld hl,ANSICAR ==> source données caractères ld de,BuffChar ==> destination (init par le vecteur #BBAB) ld bc,8*char ==> longueur données ldir ==> copie les données
Code :
ld hl,ANSICAR ; copie ta redéfinition de caractères ld de,BuffChar ld bc,8*char ldir
secmast a écrit :
C'est quoi BC,8*char
8 ==> données par caractère char ==> nombre caractères à redéfinir (dans ton cas 254) /!\ je suis pas sur que les caractères avant 32 soit modifiable!
pour l'encodage des caractères, ici j'ai le dessin d'un "A":
Code :
ANSICHAR: db %11111111 db %11000011 db %11000011 db %11111111 db %11000011 db %11000011 db %11000011 db %11000011
Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 3 invité(s)
Vous ne pouvez pas publier de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas insérer de pièces jointes dans ce forum