CODINGApprendre pas à pas la programmation en assembleur Z80 ★ Programmation avancée, une interface utilisateur complète ★

Faire sa propre IU - Gestion d'un champ numérique

Un champ numérique


Pour gérer un champ numérique, on va avoir besoin d'afficher la valeur du champ, d'avoir éventuellement une référence mémoire depuis laquelle lire et copier la valeur.

struct s_numerique8
struct s_gui gui ; commun à tous les objets de la GUI
adresse_ecran defw ; position écran
adresse_valeur defw 0 ; pointeur sur la valeur
panneauChar defs 2 ; pour afficher le mini-panneau
valeurTexte defs 3 ; valeur en texte +1 terminateur
endstruct
struct s_numerique16
struct s_gui gui ; commun à tous les objets de la GUI
adresse_ecran defw ; position écran
adresse_valeur defw 0 ; pointeur sur la valeur
panneauChar defs 2 ; pour afficher le mini-panneau
valeurTexte defs 5 ; valeur en texte +1 terminateur
endstruct


Nous aurons seulement des touches de contrôle à gérer sur ces champs (pas de saisie texte prévue pour le moment)

Le curseur haut/bas pour incrémenter, la touche Shift pour incrémenter le poids fort des valeurs 16 bits, et le TAB pour sortir du champ. Le reste est trivial et similaire aux autres objets.


GUINumerique8
GuiObjetActionParDefaut (void)
cp CODE_HAUT : jp z,.incremente
cp CODE_BAS : jp z,.decremente
.texte
ret

.incremente ld hl,(ix+s_numerique8.adresse_valeur) : inc (hl) : jr .affiche
.decremente ld hl,(ix+s_numerique8.adresse_valeur) : dec (hl)

.affiche
ld hl,(ix+s_numerique8.adresse_valeur) : ld a,(hl) ; A=valeur 8 bits
ld de,ix : ld hl,s_numerique8.valeurTexte : add hl,de ; HL=destination texte
call .explode8
ld a,(ix+s_gui.selectionne) : add a : add hautBasSprites
;ld (ix+s_numerique8.panneauChar),a : inc a : ld (ix+s_numerique8.panneauChar+1),a
ld de,ix : ld hl,s_numerique8.panneauChar : add hl,de : ld (hl),a : inc hl : inc a : ld (hl),a : dec hl : exx
ld de,(ix+s_numerique8.adresse_ecran)
jp GUIDisplayString

.explode8 push af : rrca : rrca : rrca : rrca : and #F : call .store4
pop af : and #F
.store4 cp 10 : jr c,.decimal : add 'A'-10 : ld (hl),a : inc hl : ret
.decimal add '0' : ld (hl),a : inc hl : ret


Et la version 16 bits qui dispose de deux types d'incréments

GUINumerique16
GuiObjetActionParDefaut (void)
ld hl,shiftCTRL : ld l,(hl) : bit 5,l : jr z,.avecShift ; preserve A
cp CODE_HAUT : jp z,.incremente
cp CODE_BAS : jp z,.decremente
.avecShift
cp CODE_HAUT : jp z,.incrementeFort
cp CODE_BAS : jp z,.decrementeFort

.texte
ret

.getval16 ld hl,(ix+s_numerique16.adresse_valeur) : ld e,(hl) : inc hl : ld d,(hl) : ex hl,de : ret
.incremente call .getval16 : inc hl : jr .setval16
.decremente call .getval16 : dec hl : jr .setval16
.incrementeFort call .getval16 : ld bc,#100 : add hl,bc : jr .setval16
.decrementeFort call .getval16 : ld bc,-#100 : add hl,bc
.setval16 ex hl,de : ld (hl),d : dec hl : ld (hl),e : jr .afficheDE
.affiche
call .getval16 : ex hl,de ; DE=valeur 16 bits
.afficheDE
ld bc,ix : ld hl,s_numerique16.valeurTexte : add hl,bc ; HL=destination texte
call .explode16
ld a,(ix+s_gui.selectionne) : add a : add hautBasSprites
ld de,ix : ld hl,s_numerique16.panneauChar : add hl,de : ld (hl),a : inc hl : inc a : ld (hl),a : dec hl : exx
ld de,(ix+s_numerique16.adresse_ecran)
jp GUIDisplayString

.explode16 ld a,d : call GUINumerique8.explode8 : ld a,e : jp GUINumerique8.explode8


Avec une petite accélération des répétitions dans la gestion clavier, on peut naviguer sans difficulté dans les valeurs.

Comme les sources changent tous et un peu partout, je vous ai fait un petit [ ZIP ]

★ 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/c
Page créée en 632 millisecondes et consultée 10 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.