CODINGCLASSEURS WEKA ★ Comment exploiter toutes les ressources et augmenter les performances de votre AMSTRAD CPC ★

4/5.3 Contrôle de l'affichageCoding Classeurs Weka
4/5.3 Contrôle de l'affichage

I. Format des nombres traités par Forth

Forth ne traite pas n'importe quels nombres. Ceux que vous avez utilisés en essayant les précédents exemples sont des entiers signés 16 bits. Le domaine de définition des entiers 16 bits est compris entre - 32768 et 32767.

Exemple :

32767 . affiche 32767

32768. affiche -32768

65535 . affiche - 1

Ces nombres peuvent être traités dans n'importe quelle base numérique, toutes les bases numériques situées entre 2 et 32 étant valides .

255 HEX . DECIMAL affiche FF

La base numérique courante est contrôlée par une variable nommée BASE et dont le contenu peut être modifié. Ainsi, pour passer en binaire, il suffit de stocker la valeur 2 dans BASE :

2 BASE !

et de taper DECIMAL pour revenir à la base numérique décimale.

Forth ne connaît pas les nombres en virgule flottante. Cependant, des routines peuvent être compilées pour exécuter des calculs sur ce type de nombres, mais ce sera au détriment de la vitesse de traitement. Si vous voulez traiter des quantités importantes, comme votre compte en banque ou le prix de votre prochaine voiture, vous pouvez utiliser les nombres double précision également nommés nombres 32 bits. Ceux-ci se distinguent des nombres entiers 16 bits en y accolant un point, une virgule ou une barre de fraction :

135246. D. affiche 135246

135246, D. affiche 135246

Le point, la virgule ou la barre de fraction peuvent être placés ailleurs qu'à l'extrémité du nombre :

135,246 D. affiche 135246

Les opérations possibles sur les nombres 32 bits sont

3. 5. D + correspond à 3 + 5

3. 5. D- correspond à 3-5

II. Formats d'affichage des nombres entiers et double précision

A première vue, F83 semble bien rustique concernant les possibilités d'affichage des nombres. Il n'en est rien. Si d'autres langages, comme Basic, utilisent des compléments d'instructions tel Using pour forcer un format d'affichage de nombre, F83 utilise des mots variés dont les combinaisons permettent de dépasser largement les performances des langages conventionnels dans ce domaine.

Les nombres entiers 16 bits situés au sommet de la pile peuvent être affichés de diverses manières par les mots suivants :

. Prononcer 'point'. Affiche un entier signé (intervalle -32768,32767)

U. Prononcer 'U-point'. Affiche un entier non signé (intervalle 0,65535)

.R Prononcer 'point-R'. Affiche un entier signé cadré à droite dans un champ de n caractères.

U.R Prononcer 'U-point-R'. Affiche un entier non signé cadré à droite dans un champ de n caractères.

Exemples :

7 - 10 . . affiche 7-10

45656 U. affiche 45656

-36.R affiche -6

154 6 .R affiche 154

45656 6 U.R affiche 45656

Les nombres double précision 32 bits situés au sommet de la pile peuvent être affichés par les mots suivants :

D. Prononcer 'D-point'. Affiche un nombre double précision signé.

UD. Prononcer 'U-D-point'. Affiche un nombre double précision non signé.

D.R Prononcer 'D-point-R'. Affiche un nombre double précision signé cadré à droite dans un champ de n caractères.

UD.R Prononcer 'UD-point-R'. Affiche un nombre double précision non signé cadré à droite dans un champ de n caractères.

Exemples

5. D. affiche 5

— 1 UD. affiche 4294967295

10. 12 D.R affiche 10

35.3 12 UD.R affiche 353

III. Définition de nouveaux formats d'affichage

Outre ces mots pré-définis, F83 dispose de primitives permettant d'adapter l'affichage d'un nombre à un format quelconque. Ces primitives ne traitent que des nombres double précision :

<# Débute une séquence de définition de format

# Insère un digit dans une séquence de définition de format

#S Equivaut à une succession de #

HOLD Insère un caractère dans une définition de format

#> Achève une définition de format et laisse sur la pile l'adresse et la longueur de la chaîne contenant le nombre à afficher.

Exemple, soit à afficher un nombre exprimant un montant libellé en francs avec la virgule comme séparateur décimal :

: FRANCS ( ud — )

<# # # ASCII , HOLD #S #> TYPE . "Fr " ;

Exemples d'exécution :

0.35 FRANCS affiche 0,35 Fr

35.75 FRANCS affiche 35,75 Fr

10.15 35.75 D+ FRANCS affiche 45,90 Fr

La définition de FRANCS ne prend pas en compte le signe du résultat, ni la position de la virgule. Si vous tapez

35. FRANCS

Vous aurez à l'affichage 0,35 Fr.

Voici un exemple plus complexe démontrant la compacité du Forth. Il s'agit d'écrire un programme convertissant un nombre quelconque de secondes au format HH:MM:SS:

: :00 (---)

DECIMAL # 6 BASE ! # ASCII : HOLD DECIMAL ;

: HMS ( ud ---)

<# :00 : 00 # S # > TYPE SPACE ;

Exemples d'exécution

59. HMS affiche 0:00:59

60. HMS affiche 0:01:00

4500. HMS affiche 1:15:00

Le système d'affichage des secondes et des minutes est appelé système sexagésimal. Les 'unités' sont exprimées dans la base numérique décimale, les 'dizaines' sont exprimées dans la base six. Le mot :00 gère la conversion des 'unités' et des 'dizaines' dans ces deux bases pour la mise au format des digits correspondant aux secondes et aux minutes. Pour les heures, les digits sont tous décimaux.

Exercice 1 : Définissez un programme convertissant un nombre entier 16 bits décimal en binaire et l'affichant au format bbbb bbbb bbbb bbbb.

Solution page 6.

IV. Affichage des caractères et chaînes de caractères

L'affichage d'un caractère est réalisé par le mot EMIT:

65 EMIT affiche A

Les caractères affichables sont compris dans l'intervalle 32..255. Les codes compris entre 0 et 31 seront interprétés comme des codes de contrôle :

13 EMIT 10 EMIT exécute l'équivalent de CR (retour chariot)

Les chaînes de caractères sont affichées de diverses manières. La première, utilisable en compilation seulement, affiche une chaîne de caractères délimitée par le caractère " (guillemet) :

: TITRE MENU GENERAL" ;

TITRE affiche MENU GENERAL

La seconde, utilisable en interprétation seulement, affiche une chaîne de caractères délimitée par le caractère ) (parenthèse fermée) :

.< MENU GENERAL) affiche MENU GENERAL

Dans les deux cas, la chaîne est séparée du mot ou .( par au moins un caractère espace.

Une chaîne de caractères peut aussi être compilée par le mot " (guillemet! et délimitée par le caractère " (guillemet) :

: LIGNE1 " E..Enregistrement de données" ;

L'exécution de LIGNE1 dépose sur la pile de données l'adresse et la longueur de la chaîne compilée dans la définition. L'affichage est réalisé par le mot TYPE:

LIGNE1 TYPE affiche E..Enregistrement de données

En fin d'affichage d'une chaîne de caractères, le retour à la ligne doit être provoqué s'il est souhaité :

TITRE LIGNE1 affiche MENU GENERAL..Enregistrement de données

CR TITRE CR CR LIGNE 1 CR affiche

MENU GENERAL

E.. Enregistrement de données

Un ou des espaces peuvent être rajoutés en début ou fin d'affichage d'une chaîne alphanumérique :

SPACE affiche un caractère espace

n SPACES affiche n caractères espaces

Exercice 2 Créez un mot qui affiche une chaîne de caractères centrée par rapport à la largeur de l'écran.

Solution page 6.

V. Solutions des exercices

Exercice 1 : BBBB < -—)

# # # # 32 HOLD ;

: UB. ( u ---)

0 < # BBBB BBBB BBBB BBBB # > TYPE SPACE ;

  • Utilisation :

    33 UB. affiche 0000 0000 0010 0001 256

    UB. affiche 0000 0001 0000 0000

Exercice 2 : 80 CONSTANT LARGEUR-ECRAN

: .CENTRE ( adr long ---)

LARGEUR-ECRAN OVER - 2/ SPACES TYPE ;

  • Utilisation :

    : AFFICHE-CENTRE

    CR "Ce texte".CENTRE

    CR "est centré sur 80 caractères" CENTRE CR ;

    AFFICHE-CENTRE affiche

Ce texte est centré sur 80 caractères.

★ NOTE: 8e Complément

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 027 millisecondes et consultée 595 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.