CODINGApprendre pas à pas la programmation en assembleur Z80 par Roudoudou ★ Premiers programmes (briques indispensables) ★

Écrire du texte avec sa propre fonte
Écrire du texte avec sa propre fonte

J'avais brièvement écrit un "writer" ou programme d'affichage de texte dans l'introduction des cours, sans passer par les explications carl'objet était uniquement de justifier l'intérêt de la programmation hardware pure rapport à la programmation système : À la fois lavitesse d'exécution mais aussi la simplicité et la maîtrise de tout.

On est rapidement prisionnier de la fonte système. Modifier les caractères contraint encore plus l'usage (les caractères redéfinis nedoivent pas se trouver dans la plage #0000-#3FFF par exemple) et surtout on reste contraint par le format 8x8 pixels.

Avec votre propre fonte, vous faites bien ce que vous voulez et votre fonte n'est plus obligatoirement monochrome! Dans l'exemplede ce cours, je vais utiliser une fonte fixe de 12x16 pixels (plutôt conçue pour un usage en mode 1).

Comme vous pouvez le remarquer, je n'ai pas utilisé l'ordre ASCII et je n'utilise que 81 caractères. Est-ce un problème? Que nenni!

On va d'abord convertir notre fichier et ensuite "déclarer" notre fonte dans RASM.

La conversion des graphismes, classique :)

convgeneric.exe simpleFonte.png -m 1 -size 12x16 -c 81 -flat -g

L'intégration de la fonte pour RASM set fait avec la directive [ CHARSET ]

charset ' ABCDEFGHIJKLMNOPQRSTUVWXYZ!()*+,-./0123456789:;<=>?@_abcdefghijklmnopqrstuvwxyz#',0

La directive CHARSET, héritée de Winape permet d'attribuer une autre valeur que celle par défaut pour les caractères.

Dans notre cas, nous n'avons pas de caractère de contrôle ni tous les caractères, on se contente alors defaire la liste des caractères dans l'ordre de notre fonte et de lui dire de démarrer le compte à zéro.

D'autres écritures de la directive sont possibles, voir la [ documentation de RASM ].

Vous aurez besoin du [ binaire de la fonte ] pour assembler ce source

BUILDSNA : BANKSET 0
ORG #100 : RUN #100 : LD SP,#100

ld bc,#7F00 : out (c),c : ld a,#58 : out (c),a : ld c,#10 : out (c),c : out (c),a
ld bc,#7F01 : out (c),c : ld a,#49 : out (c),a
ld bc,#7F80+%1101 : out (c),c ; MODE 1

ld hl,message : call affiche_chaine
jr $

affiche_chaine
  ld a,(hl) : inc hl ; récupérer la valeur dans le tableau et incrémenter le pointeur
  cp #FF : ret z ; terminateur?
  push hl : call affiche_caractere : pop hl ; on a besoin de conserver notre pointeur HL
  jr affiche_chaine

affiche_caractere
; nos caractères font 48 octets
add a : ld h,0 : ld l,a : add hl,hl : add hl,hl : add hl,hl ; x 16
ld bc,hl : add hl,hl : add hl,bc ; x 48
ld bc,fonte : add hl,bc ; HL=adresse des données du caractère dans le tableau fonte
ld de,(position_char) ; on récupère la position du curseur
ld xl,16 ; nombre de lignes
ld bc,#10FF ; le LDI décrémente BC donc on charge C au maximum pour que B puisse servir de compteur
affiche_ligne_caractere

push de : ldi 3 : pop de
ld a,d : add 8 : ld d,a : and #38 : jr nz,.noOVF
ld a,80 : add e : ld e,a : ld a,#C0 : adc d : ld d,a : res 3,d
.noOVF
djnz affiche_ligne_caractere
; avancer le curseur

ld hl,(position_char) : inc hl : inc hl : inc hl : ld (position_char),hl
ret

charset ' ABCDEFGHIJKLMNOPQRSTUVWXYZ!()*+,-./0123456789:;<=>?@_abcdefghijklmnopqrstuvwxyz#',0
message defb 'Oh la belle fonte!',#FF
charset
position_char defw #C000
fonte incbin 'simpleFonte.bin'

Maintenant, on peut passer à [ l'article suivant ] pour voir comment stocker plusieurs fontes et libérer de la mémoire.

Roudoudou

★ ANNÉE: 2025
★ AUTEUR: Roudoudou

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.732-desktop
Page créée en 632 millisecondes et consultée 13 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.