Section courante

A propos

Section administrative du site

Graphiques avancés

Graphiques définis par l'utilisateur

Lorsque ORIC est activé, les ensembles de caractères standard et alternatifs sont chargés dans la mémoire vive. L'ensemble de caractères standard contient tous les caractères ASCII habituels et l'ensemble de caractères alternatif contient des graphiques de télétexte. L'un ou l'autre ensemble peut être complètement ou partiellement écrasé.

Dans un jeu, vous souhaiterez peut-être utiliser du texte, ainsi que quelques caractères graphiques que vous aurez vous-même définis, peut-être de petits extraterrestres. Vous pouvez choisir un caractère standard n'étant pas utilisé fréquemment, par exemple «@» ou «©» et redéfinissez-le.

Dans une situation de traitement de texte, vous souhaiterez peut-être que l'ensemble de caractères ne contienne pas de caractères anglais, mais un alphabet grec ou russe.

Pour comprendre comment cela peut être réalisé, nous devons savoir comment les caractères sont entreposés à l'origine. L'examen de la carte mémoire nous montre que l'ensemble standard est entreposé entre les emplacements 46080 et 47104, c'est-à-dire qu'ils occupent 1 Ko (1024) octets. S'il y a 128 caractères, chacun doit utiliser 8 octets (128 x 8 = 1024). Cela peut vous amener à penser qu'ils sont entreposés dans un échiquier 8 x 8 comme dans certains ordinateurs. Cependant, ce n'est pas tout à fait ainsi que l'ORIC le gère. Dans chaque octet, seuls les six derniers bits contiennent des informations de caractère :

Emplacement mémoire Valeur binaire Équivalent décimal
46600 0 0 0 0 1 0 0 0 8
46601 0 0 0 1 0 1 0 0 2 0
46602 0 0 1 0 0 0 1 0 3 4
46603 0 0 1 0 0 0 1 0 3 4
46604 0 0 1 1 1 1 1 0 6 2
46605 0 0 1 0 0 0 1 0 3 4
46606 0 0 1 0 0 0 1 0 3 4
46607 0 0 0 0 0 0 0 0 0

Chaque caractère peut donc être considéré comme occupant 8 rangées de 6 points. Chaque ligne est un octet, dont les 6 derniers bits déterminent sa conception. Si un bit vaut 1 alors la cellule est activé et si 0 elle est désactivé.

Les cellules activé sont en couleur de premier plan, les cellules désactivé sont en arrière-plan. Pour regarder le contenu de n'importe quelle position de mémoire, nous utilisons PEEK. Pour modifier le contenu, nous utilisons POKE.

Les caractères de l'ensemble sont entreposés dans l'ordre de leurs codes ASCII. Le code ASCII pour A est 65, donc le modèle pour A doit être entreposé à 46080+ (65*8) c'est-à-dire 46600 et les 7 octets suivants.

46600                
46601                
46602                
46603                
46604                
46605                
46606                
46607                

Les zéros et les uns forment une lettre A. Il est très facile de la changer. Essaye ceci :

  1. POKE 46600,31
  2. POKE 46601,21
  3. POKE 46602,31
  4. POKE 46603,4
  5. POKE 46604,31
  6. POKE 46605,4
  7. POKE 46606,10
  8. POKE 46607,17

Tapez A maintenant - vous avez été envahi par ORIC ! Tout A apparaîtra maintenant sous sa nouvelle apparence, car vous avez redéfini la façon dont ORIC dessine un A. Il faudrait beaucoup de temps pour mettre un POKE les nombres un à la fois, il est donc préférable d'écrire un programme court pour redéfinir les caractères.

Voici un programme effrayant redéfinissant tout l'ensemble de caractères. Lorsque vous l'avez entré, LIST, puis RUN et regardez l'écran. C'est la domination extraterrestre totale ! La seule façon d'y échapper est d'appuyer sur le bouton de réinitialisation de l'ORIC, lorsque vous reviendrez à l'ensemble de caractères standard :

  1. 5 REM *** DOMINATION EXTRA-TERRESTRES ***
  2. 10 FOR X=46344 TO 47088 STEP 8
  3. 20 FOR I=0 TO 7
  4. 30 READ M
  5. 40 POKE I+X,M
  6. 50 NEXT I
  7. 60 RESTORE
  8. 70 NEXT X
  9. 80 DATA 18,12,30,45,45,30,18,0

Voici un programme plus utile. Vous pouvez l'utiliser pour redéfinir n'importe quel caractère du clavier, majuscule ou minuscule. Un tableau à 2 dimensions, Y, est configuré pour entreposer le nouveau caractère dans sa grande forme. C$ est la touche sur laquelle vous appuyez. A est le début de l'ensemble de caractères standard en mémoire, D est la position du premier octet du caractère choisi dans l'ensemble de caractères standard. Le sous-programme à la ligne 1000 PEEK S cet octet du caractère et convertit le contenu décimal de cet octet en un nombre binaire, c'est-à-dire que 45 serait converti en 00101101, et soit des zéros soit des uns chargés dans le tableau Y.

La dernière section pousse soit un bloc plein (128) si la cellule est un 1, soit un blanc (32) si la cellule est un 0 dans l'affichage à l'écran. Cela fait apparaître une grande version du personnage à l'écran. Le reste du programme donne à l'utilisateur la possibilité d'entrer de nouvelles données, une ligne à la fois, et d'examiner le résultat en taille réelle ou agrandie.

  1. 5 REM *** GENERATEUR DE CARACTERES ***
  2. 10 CLS
  3. 20 DIM X(8):DIM Y(8,8)
  4. 30 PRINT "VEUILLEZ ENTRER LE CARACTERE QUE VOUS SOUHAITEZ"," A REDEFINIR"
  5. 40 GET C$
  6. 50 PRINT C$
  7. 60 C=ASC(C$)
  8. 70 A=46080:D=C*8
  9. 80 GOSUB 1000
  10. 90 PRINT"ENTRER LES DONNEES"
  11. 100 FOR N=0 TO 7
  12. 110 PRINT"LIGNE ";N;
  13. 120 INPUT X(N)
  14. 130 IF X(N)>63 OR X(N)<0 THEN 120
  15. 140 POKE (A+D+N),X(N)
  16. 150 NEXT
  17. 160 GOSUB 1000
  18. 200 STOP
  19. 1000 REM *** SOUS-ROUTINE DE CARACTERES GENERER ***
  20. 1010 FOR N=0 TO 7
  21. 1020 X(N)=PEEK(A+D+N)
  22. 1030 FOR M=0 TO 7
  23. 1040 Y(N,M)=INT(X(N)/2;(7 -M))
  24. 1050 Z = ((X(N)/2(7-M)) - Y(N,M))*2(7 - M)
  25. 1060 X(N) = Z + 0.0001
  26. 1070 IF Y(N,M) = 0 THEN POKE 48220 + (N*40) + M,32
  27. 1080 IF Y(N,M) = 1 THEN POKE 48220 + (N*40) + M,128
  28. 1090 NEXT M
  29. 1100 NEXT N
  30. 1110 RETURN

Attributs de série

Pour envoyer des informations à l'écran, ORIC utilise des attributs de série. Cela signifie qu'un octet envoyé à l'écran peut être considéré comme un motif graphique ou comme un attribut contrôlant la couleur, le clignotement,...

La façon dont les bits sont définis détermine si l'octet est lu en tant qu'attribut ou non. Si les bits 6 + 5 sont tous les deux à zéro, alors les 5 bits restants sont considérés comme un attribut - il y en a 32. Si les bits 6 + 5 ne sont pas tous les deux à zéro, alors les bits 5 à 0 sont lus comme un motif.

En mode HIRES, les bits 0 à 5 sont les bits de motif. En mode TEXT et LORES, les bits 0 à 6 sont les codes de recherche ASCII. Les codes de contrôle (bits 6 + 5 mis à 0) deviennent des attributs. Le bit 7 contrôle si le caractère est inversé ou non, 1 est activé, 0 est désactivé.

Si un attribut est défini, il continue jusqu'à la fin de la ligne, sauf s'il est réinitialisé. Pour voir comment les attributs de série peuvent être utilisés pour contrôler l'affichage en mode TEXT, essayez ce programme :

  1. 10 FOR A=0 TO 255
  2. 20 FOR N=1 TO 24
  3. 30 PRINT A;"DU TEXTE POUR REMPLIR L'ECRAN"
  4. 40 NEXT N
  5. 50 FOR J=48042 TO 49002 STEP 40
  6. 60 POKE J,A
  7. 70 NEXT J,A

Les lignes 20 à 40 remplissent l'écran de texte. Lignes 50 + 60 POKE variable A sur l'écran. Vous devriez pouvoir voir quelles valeurs de A contrôlent la couleur, le clignotement,... et lesquelles entraînent l'affichage d'un texte normal ou inversé. Lorsque A est compris entre 24 et 3 1, l'écran sera très étrange. C'est parce que vous modifiez temporairement la synchronisation.

Ce programme montre comment les attributs de série peuvent contrôler la couleur d'un caractère prédéfini sur l'écran TEXT.

  1. 5 REM ** ABANDONNER LES EXTRA-TERRESTRES **
  2. 10 GOSUB 1000:CLS
  3. 20 FOR M=1 TO 20
  4. 30 PAPER INT(RND(1)*4)+4
  5. 40 A=RND(1)*32+1
  6. 50 ZAP
  7. 60 FOR N=0 TO 1100 STEP 40
  8. 70 POKE 48039+N+A,1
  9. 80 POKE 48040+N+A,64
  10. 90 POKE 48039+N+A+6,2
  11. 100 POKE 48040+N+A+6,64
  12. 110 POKE 48039+N+A+3,3
  13. 120 POKE 48040+N+A+3,64
  14. 130 SOUND 1,N/2,0
  15. 140 PLAY 1,0,5,5
  16. 150 POKE 48040+N+A, 32
  17. 160 POKE 48040+N+A+6,32
  18. 170 POKE 48040+N+A+3,32
  19. 180 NEXT N
  20. 190 EXPLODE
  21. 200 WAIT RND(1)*200+100
  22. 210 NEXT M
  23. 1000 REM *** DEFINITION DE CARACTERE ***
  24. 1010 FOR N=0 TO 7
  25. 1020 READ X:POKE 46080+(64*8)+N,X
  26. 1030 NEXT N
  27. 1040 DATA 18,12,30,45,45,30,18,0
  28. 1050 RETURN

Vous verrez à partir de ce programme que vous pouvez avoir toutes les couleurs de premier plan sur l'écran en même temps, ainsi que changer les couleurs d'arrière-plan. Vous n'avez pas besoin de POKE dans l'affichage de l'écran - PLOT fonctionnera également.

Normalement, les colonnes protégées à gauche de l'écran contrôlent les couleurs INK et PAPER pour tout l'écran. Si vous POKE un attribut sur l'écran, il occupe une case de caractère et affecte tous les carrés de caractère à sa droite à moins que vous appliquer un POKE à un autre attribut de couleur après lui. Comme l'attribut INK est distinct de l'attribut PAPER, il n'est pas nécessaire de l'annuler sauf si d'autres caractères apparaissent à sa droite. Ceux-ci prendraient alors la couleur de l'attribut le plus proche à leur gauche.

En mode HIRES, il est possible d'avoir une résolution couleur de 200 lignes par 40 colonnes de caractères. Encore une fois, vous devez POKE la position juste à gauche de la position que vous souhaitez modifier.

Ce programme applique des POKE aux attributs d'arrière-plan au centre de l'écran et les attributs de premier plan à l'extrême gauche. Les cercles dessinés prennent la couleur des attributs selon leur position à l'écran :

  1. 5 REM ** CERCLE SPLIT **
  2. 10 HIRES
  3. 20 FOR N = 41060 TO 48979 STEP 40
  4. 30 POKE N,INT(RND(1)*7) + 1
  5. 40 POKE N-45,INT(RND(1)*7) + 16
  6. 50 NEXT N
  7. 60 CURSET 120,100,3
  8. 70 FOR X = 95 TO 1 STEP -1
  9. 80 CIRCLE X,1
  10. 90 NEXT X

Le second programme montre comment un graphe peut avoir un début multicolore puis être d'une seule couleur pour une section prédéfinie. Vous pouvez, bien sûr, POKE des attributs clignotants ou à double hauteur sur l'écran en utilisant cette méthode :

  1. 5 REM ** SINUS EN COULEUR **
  2. 10 HIRES
  3. 20 FOR N=40960 TO 49079 STEP 40
  4. 30 POKE N,INT(RND(1)*7) + 1
  5. 40 POKE N+100,1
  6. 50 NEXT N
  7. 60 FOR A = -PI TO PI STEP 0.02
  8. 70 CURSET A*38 + 120,SIN(A)*99+99,1
  9. 80 NEXT A


Dernière mise à jour : Mardi, le 7 mars 2023