L'ensemble de caractères
Les lettres, chiffres, signes de ponctuation,... pouvant apparaître dans les chaînes de caractères sont appelés caractères et constituent l'alphabet ou l'ensemble de caractères utilisé par le ZX Spectrum. La plupart de ces caractères sont des symboles uniques, mais il y en a d'autres, appelés jetons, représentant des mots entiers, tels que PRINT, STOP, <> et ainsi de suite.
Il y a 256 caractères, et chacun a un code entre 0 et 255. Pour convertir entre codes et caractères, il y a deux fonctions, CODE et CHR$.
CODE est appliqué à une chaîne de caractères, et donne le code du premier caractère de la chaîne de caractères (ou 0 si la chaîne de caractères est vide).
CHR$ est appliqué à un nombre et donne la chaîne de caractères unique dont le code est ce nombre.
Ce programme affiche tout l'ensemble de caractères :
En haut, vous pouvez voir un espace, 15 symboles et signes de ponctuation, les dix chiffres, sept autres symboles, les majuscules, six autres symboles, les minuscules et cinq autres symboles. Ceux-ci sont tous (sauf £ et ©) tirés d'un ensemble de caractères largement utilisé connu sous le nom d'ASCII (pour American Standard Codes for Information Interchange); ASCII attribue également des codes numériques à ces caractères, et ce sont les codes utilisés par le ZX Spectrum.
Les autres caractères ne font pas partie de l'ASCII et sont propres au ZX Spectrum. Les premiers d'entre eux sont un espace et 15 motifs de taches noires et blanches. Ceux-ci sont appelés symboles graphiques et peuvent être utilisés pour dessiner des images. Vous pouvez les saisir à partir du clavier, en utilisant ce qu'on appelle le mode graphique. Si vous appuyez sur GRAPHICS (CAPS SHIFT avec 9), le curseur se changera en G. Maintenant les touches des chiffres 1 à 8 donneront les symboles graphiques : à elles seules elles donneront les symboles dessinés sur les touches ; et avec l'un ou l'autre des décalages enfoncés, ils donnent le même symbole mais inversé, c'est-à-dire que le noir devient blanc, et vice versa.
Indépendamment des SHIFT, le chiffre 9 vous ramène au mode normal (L) et le chiffre 0 est DELETE.
Voici les seize symboles graphiques :
Symbole | Code | Comment l'obtenir | Symbole | Code | Comment l'obtenir |
---|---|---|---|---|---|
128 | G 8 |
143 | G SHIFT 8 |
||
129 | G 1 |
142 | G SHIFT 1 |
||
130 | G 2 |
141 | G SHIFT 2 |
||
131 | G 3 |
140 | G SHIFT 3 |
||
132 | G 4 |
139 | G SHIFT 4 |
||
133 | G 5 |
138 | G SHIFT 5 |
||
134 | G 6 |
137 | G SHIFT 6 |
||
135 | G 7 |
136 | G SHIFT 7 |
Après les symboles graphiques, vous verrez ce qui semble être une autre copie de l'alphabet de A à U. Ce sont des caractères que vous pouvez redéfinir vous-même, bien que lorsque la machine est allumée pour la première fois, ils sont définis comme des lettres - ils sont appelés utilisateur- graphiques définis. Vous pouvez les saisir à partir du clavier en passant en mode graphique, puis en utilisant les touches de lettres de A à U.
Pour définir un nouveau caractère pour vous-même, suivez cette recette - elle définit un caractère à afficher π :
- Déterminez à quoi ressemble le caractère. Chaque caractère a un carré de 8x8 points, chacun pouvant indiquer soit la couleur du papier, soit la couleur de
l'encre. Vous dessineriez un diagramme comme celui-ci, avec des carrés noirs pour la couleur de l'encre :
Nous avons laissé une marge de 1 carré autour du bord car les autres lettres en ont toutes une (sauf pour les lettres minuscules avec des queues, où la queue va jusqu'en bas).
- Déterminez quel graphique défini par l'utilisateur doit afficher π - disons celui correspondant à P, de sorte que si vous appuyez sur P en mode graphique, vous obtenez π.
- Enregistrez le nouveau motif. Chaque graphique défini par l'utilisateur a son modèle entreposé sous la forme de huit nombres, un pour chaque ligne. Vous pouvez
écrire chacun de ces nombres sous la forme BIN suivi de huit 0 ou 1 - 0 pour le papier, 1 pour l'encre - de sorte que les huit nombres pour notre caractère π sont :
(Si vous connaissez les nombres binaires, cela devrait vous aider de savoir que BIN est utilisé pour écrire un nombre en binaire au lieu de la décimale habituelle.)
Ces huit nombres sont entreposés en mémoire, dans huit emplacements, chacun ayant une adresse. L'adresse du premier octet, ou groupe de huit chiffres, est USR "P" (P car c'est ce que nous avons choisi en deuxième point), celle du second est USR "P"+1, et ainsi de suite jusqu'au huitième, qui a l'adresse USR "P"+7.
USR est ici une fonction pour convertir un paramètre de chaîne de caractères en l'adresse du premier octet en mémoire pour le graphique défini par l'utilisateur correspondant. Le paramètre de chaîne de caractères doit être un caractère unique pouvant être soit le graphique défini par l'utilisateur lui-même, soit la lettre correspondante (en majuscule ou en minuscule). Il y a une autre utilisation pour USR, quand son paramètre est un nombre, qui sera traité.
Même si vous ne comprenez pas cela, le programme suivant le fera pour vous :
Il s'arrêtera pour les données INPUT huit fois pour vous permettre de saisir les huit numéros BIN ci-dessus - saisissez-les dans le bon ordre, en commençant par la ligne du haut.
L'instruction POKE entrepose un nombre directement dans l'emplacement mémoire, en contournant les mécanismes normalement utilisés par le BASIC. L'opposé de POKE est PEEK, et cela nous permet de regarder le contenu d'un emplacement mémoire bien que cela ne modifie pas réellement le contenu de cet emplacement.
Après les graphiques définis par l'utilisateur viennent les jetons.
Vous aurez remarqué que nous n'avons pas affiché les 32 premiers caractères, avec les codes 0 à 31. Ce sont des caractères de contrôle. Ils ne produisent rien d'affichable, mais ont un effet moins tangible sur la télévision, ou ils sont utilisés pour contrôler autre chose que la télévision, et la télévision affiche 7 pour montrer qu'elle ne les comprend pas.
Trois que la télévision utilise sont ceux avec les codes 6, 8 et 13 ; dans l'ensemble, CHR$ 8 est le seul que vous trouverez probablement utile.
CHR$ 6 affiche les espaces exactement de la même manière qu'une virgule dans une instruction PRINT par exemple :
fait la même chose que :
- PRINT 1,2
Évidemment, ce n'est pas une façon très claire de l'utiliser. Une façon plus subtile est de dire :
CHR$ 8 est un "backspace" : il déplace la position d'affichage d'un endroit en arrière - essayez :
affichant jusqu'à 1235.
CHR$ 13 est «nouvelle ligne» : il déplace la position d'affichage au début de la ligne suivante.
Le téléviseur utilise également ceux avec les codes 16 à 23.
En utilisant les codes pour les caractères, nous pouvons étendre le concept de «ordre alphabétique» pour couvrir les chaînes de caractères contenant n'importe quel caractère, pas seulement des lettres. Si, au lieu de penser en termes d'alphabet habituel de 26 lettres, nous utilisons l'alphabet étendu de 256 caractères, dans le même ordre que leurs codes, alors le principe est exactement le même. Par exemple, ces chaînes de caractères sont dans leur ordre alphabétique ZX Spectrum. (Remarquez la caractéristique plutôt étrange que les lettres minuscules viennent après toutes les majuscules : donc «a» vient après «Z» ; aussi, les espaces ont de l'importance.)
Voici la règle pour savoir dans quel ordre deux chaînes de caractères entrent. D'abord, comparez les premiers caractères. S'ils sont différents, alors l'un d'eux a son code inférieur à l'autre, et la chaîne de caractères dont il provient est la plus ancienne (la plus petite) des deux chaînes de caractères. S'ils sont identiques, passez à la comparaison des caractères suivants. Si, dans ce processus, l'une des chaînes s'épuise avant l'autre, cette chaîne de caractères est la plus ancienne ; sinon ils doivent être égaux.
Les relations =, <, >, <=, >= et <> sont utilisées aussi bien pour les chaînes de caractères que pour les nombres : < signifie «vient avant» et > signifie «vient après», de sorte que :
- "AA homme"<"AARDVARK"
- "AARDVARK">"AA homme"
sont tous les deux vrais.
<= et >= fonctionnent de la même manière que pour les nombres, de sorte que :
- "La meme chaine de caracteres"<="La meme chaine de caracteres"
c'est vrai, mais :
- "La meme chaine de caracteres"<"La meme chaine de caracteres"
c'est faux.
Expérimentez tout cela en utilisant le programme ici, entrant deux chaînes de caractères et les mettant dans l'ordre :
Notez comment nous devons introduire c$ à la ligne 20 lorsque nous échangeons a$ et b$ :
n'aurait pas l'effet escompté. Ce programme met en place des graphiques définis par l'utilisateur pour afficher les pièces d'échecs :
- P pour pion
- R pour tour
- N pour cavalier
- B pour le fou
- K pour roi
- Q pour reine
Pièces d'échec :
- 5 LET b=BIN 01111100: LET c=BIN 00111000: LET d=BIN 00010000
- 10 FOR n=1 TO 6: READ pS: REM 6 pieces
- 20 FOR f=0 TO 7: REM lire le morceau en 6 octets
- 30 READ a: POKE USR p$+f,a
- 40 NEXT f
- 50 NEXT n
- 100 REM fou
- 110 DATA "b",0,d, BIN 00101000, BIN 01000100
- 120 DATA BIN 01101100,c,b,0
- 130 REM roi
- 140 DATA "k",0,d,c,d
- 150 DATA c, BIN 01000100,c,0
- 160 REM tour
- 170 DATA "r",0, BIN 01010100,b,c
- 180 DATA c,b,b,0
- 190 REM reine
- 200 DATA "q",0, BIN 01010100, BIN 00101000,d
- 210 DATA BIN 01101100,b,b,0
- 220 REM pion
- 230 DATA "p",0,0,d,c
- 240 DATA c,d,b,0
- 250 REM cavalier
- 260 DATA "n",d,c, BIN 01111000
- 270 DATA BIN 00011000,c,b,0
Notez que 0 peut être utilisé à la place de BIN 00000000.
Lorsque vous avez exécuté le programme, regardez les pièces en passant en mode graphique.