Section courante

A propos

Section administrative du site

 Langage  Elément  Tutoriel  Annexe  Aide 
ABAP/4
Ada
Assembleur
Assembly & bytecode
ASP (Active Server Pages)
Basic
C
C++
C# (C Sharp)
Cobol
ColdFusion
Fortran
HTML
Java
JavaScript
LISP
Logo
LotusScript
Oberon
Pascal
Perl
PHP
PL/1
Prolog
Python
Rebol
REXX
Ruby
SAS
NoSQL
SQL
Swift
X++ (Axapta)
GNAT
SMALLAda
VHDL
Assembleur 370
Assembleur 1802
Assembleur 4004
Assembleur 6502
Assembleur 6800
Assembleur 68000
Assembleur 8080 et 8085
Assembleur 8089
Assembleur 80x86
Assembleur AGC4
Assembleur ARM
Assembleur DPS 8000
Assembleur i860
Assembleur Itanium
Assembleur MIPS
Assembleur PDP-11
Assembleur PowerPC
Assembleur RISC-V
Assembleur SPARC
Assembleur SuperH
Assembleur UNIVAC I
Assembleur VAX
Assembleur Z80
Assembleur Z8000
Assembleur z/Architecture
ASSEMBLER/MONITOR 64
Micol Assembler
GFA Assembler
A86
MASM (Macro Assembler)
TASM (Turbo Assembler)
CIL
Jasmin
LLVM
MSIL
Parrot
P-Code (PCode)
SWEET16
G-Pascal
ASP 1.0
ASP 2.0
ASP 3.0
ASP.NET
ASP.NET Core
ABasiC (Amiga)
Adam SmartBASIC
Altair BASIC
AmigaBASIC (Amiga)
AMOS Basic (Amiga)
Atari Basic (Atari 400, 600 XL, 800, 800XL)
Basic Apple II (Integer BASIC/APPLESOFT)
Basic Commodore 64 (CBM-BASIC)
Basic Commodore 128 (BASIC 7.0)
Basic Commodore VIC-20 (CBM-BASIC 2.0)
Basic Coco 1 (Color Basic)
Basic Coco 2 (Extended Color Basic)
Basic Coco 3 (Extended Color Basic 2.0)
BASICA (PC DOS)
Basic Pro
BBC BASIC
Blitz BASIC (Amiga)
DarkBASIC
Dartmouth BASIC
GFA-Basic (Atari ST/Amiga)
GWBASIC (MS-DOS)
Liberty BASIC
Locomotive BASIC (Amstrad CPC)
MSX-Basic
Omikron Basic (Atari ST)
Oric Extended Basic
Power Basic
Quick Basic/QBasic (MS-DOS)
Sinclair BASIC (ZX80, ZX81, ZX Spectrum)
ST BASIC (Atari ST)
Turbo Basic
Vintage BASIC
VBScript
Visual Basic (VB)
Visual Basic .NET (VB .NET)
Visual Basic pour DOS
Yabasic
BeckerBASIC
SIMONS' BASIC
Basic09 d'OS-9
Disk Extended Color Basic
Basic09 d'OS-9
Disk Extended Color Basic
Access
Excel
Visual Basic pour Windows
Visual Basic .NET pour Windows
C Shell Unix (csh)
C pour Amiga
C pour Atari ST
C pour DOS
C pour Falcon030
C pour GEMDOS (Atari ST)
C pour Linux
C pour PowerTV OS
C pour OS/2
C pour Unix
C pour Windows
Aztec C
CoCo-C
GNU C
HiSoft C
IBM C/2
Introl-C
Lattice C
Microsoft C
MinGW C
MSX-C
Open Watcom C
OS-9 C Compiler
Pure C
Quick C
Turbo C
HiSoft C for Atari ST
HiSoft C for CP/M (Amstrad CPC)
C++ pour OS/2
C++ pour Windows
Borland C++
C++Builder
IBM VisualAge C++
Intel C++
MinGW C++
Open Watcom C++
Symantec C++
Turbo C++
Visual C++
Visual C++ .NET
Watcom C++
Zortech C++
C# (C Sharp) pour Windows
Apple III Cobol
Microsoft Cobol
BlueDragon
Lucee
OpenBD
Railo
Smith Project
Microsoft Fortran
WATFOR-77
CSS
FBML
Open Graph
SVG
XML
XSL/XSLT
LESS
SASS
GCJ (GNU)
JSP
Jython
Visual J++
Node.js
TypeScript
AutoLISP
ACSLogo
LotusScript pour Windows
Amiga Oberon
Oberon .NET
Apple Pascal
Delphi/Kylix/Lazarus
Free Pascal
GNU Pascal
HighSpeed Pascal
IBM Personal Computer Pascal
Lisa Pascal
Maxon Pascal
MPW Pascal
OS-9 Pascal
OSS Personal Pascal
Pascal-86
Pascal du Cray Research
Pascal/VS
Pascal-XT
PURE Pascal
QuickPascal
RemObjets Chrome
Sun Pascal
THINK Pascal
Tiny Pascal (TRS-80)
Turbo Pascal
UCSD Pascal
VAX Pascal
Virtual Pascal
Turbo Pascal for CP/M-80
Turbo Pascal for DOS
Turbo Pascal for Macintosh
Turbo Pascal for Windows
CodeIgniter (Cadre d'application)
Drupal (Projet)
Joomla! (Projet)
Phalanger (PHP .NET)
phpBB (Projet)
Smarty (balise)
Twig (balise)
Symfony (Cadre d'application)
WordPress (Projet)
Zend (Cadre d'application)
PL360
PL/M-80
PL/M-86
Turbo Prolog
CPython
IronPython
Jython
PyPy
AREXX
Regina REXX
JMP
Btrieve
Cassandra
Clipper
CouchDB
dBASE
Hbase
Hypertable
MongoDB
Redis
Access
BigQuery
DB2
H2
Interbase
MySQL
Oracle
PostgreSQL
SAP HANA
SQL Server
Sybase
U-SQL
Introduction
Les remarques
Référence de commandes et fonctions
Configuration de l'ordinateur
Programmation en BASIC
Couleur et graphiques
Modification des programmes BASIC
Calcul des nombres
Les mots
Graphiques avancés
Le son
Enregistrement de programmes sur bande magnétique
Programmes en code machine
Utilisation d'une imprimante
Cartographie de la mémoire
Caractères de contrôle
Attributs
Code A.S.C.I.I. (décimal)
Table de conversion binaire/hexadécimal/décimal
Tableau de sortie des broches
Fonctions dérivées
Codes d'erreur
Le microprocesseur 6502 du ORIC
Préface
Notes légal
Dictionnaire
Recherche

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


PARTAGER CETTE PAGE SUR
Dernière mise à jour : Mardi, le 7 mars 2023