Envoyer un e-mail à Collection ThomsonCollection Thomson
EditoForum 2002Liens
Nanoreseau
Docs
Logiciels
Matériel
Imprimer le document
Retour à la liste

Les fichiers graphiques Thomson

Rappel sur le codage des différents types d’écrans

Bitmap 16 (160*200):   Chaque segment affiche 2 points jointifs latéralement: AAAABBBB
                                     AAAA = numéro de la couleur pour le point x
                                     BBBB = Numéro de la couleur pour le point x+1
80 colonnes (640*200): Chaque bit à 1 est un point allumé (couleur 1)
                       Chaque bit à 0 est un point éteint (couleur 0).
Bitmap 4 (320*200):    Le plan de RAMA regroupe les points de couleur 2
                       Le plan de RAMB regroupe les points de couleur 1
                         Un pixel (x, y) à 0 sur la RAMA et à 0 sur la RAMB prend la couleur 0
                         Un pixel (x, y) à 0 sur la RAMA et à 1 sur la RAMB prend la couleur 1
                         Un pixel (x, y) à 1 sur la RAMA et à 0 sur la RAMB prend la couleur 2
                         Un pixel (x, y) à 1 sur la RAMA et à 1 sur la RAMB prend la couleur 3
40 colonnes (320*200): Le plan de RAMA regroupe les points de forme
                       Le plan de RAMB regroupe les segments codés selon le codage BVR TO7

Structure générale d’un fichier graphique

Les fichiers graphiques Thomson sont des fichiers binaires linéaires. Ils ont la structure suivante :

------------- Header du fichier binaire
- 1 octet à 0 (marquage binaire « on »)
- 2 octets indiquant le nombre de données
- 2 octets à 0 (adresse d’implantation)
------------- Fichier graphique (chargé dans la variable dimensionnée sous Basic)
- 1 octet pour le type d’affichage requis
                  $80 =  bitmap 80 (monochrome)
                  $40 = bitmap 16 (16 couleurs)
                  $00 = bitmap 4 (4 couleurs) ou bitmap 40 colonnes (TO7)
- 1 octet pour le nombre-1 de colonnes d’octets du graphique
- 1 octet pour le nombre-1 de lignes caractère (8 segments) du graphique
- X octets pour le corps du graphique Thomson
- Particule éventuelle de formats dérivés (TO-SNAP ou PPM)
------------- Fin du fichier binaire
- 1 octet à $FF (marquage binaire « off »)
- 2 octets à 0 (taille nulle)
- 2 octets à 0 (adresse d’exécution)

Le corps du graphique

Un corps de graphique est toujours compressé, même si la taille compressée dépasse la taille décompressée. Chaque colonne du graphique est compressée de haut en bas et de celle de gauche à celle de droite par le procédé suivant :
- Segments consécutifs identiques = 1 octet pour le nombre de répétitions (de 1 à 255) et 1 octet pour la valeur à répéter.
- Segments consécutifs différents = 1 octet à 0, 1 octet pour la taille n de la série ( de 1 à 255) et la série de segments sur n octets.
Le retour de pointeur est laissé à l’initiative du programmeur.

Compression                Décompression
  $00 $02 $FF $45            $FF $45
  $05 $00                    $00 $00 $00 $00 $00
  $00 $04 $FF $81 $01 $FF    $FF $81 $01 $FF
  $06 $42                    $42 $42 $42 $42 $42 $42
  ...                        ...

Les RAMA et RAMB des bitmap 40 et bitmap 4 sont compressées l’une à la suite de l’autre. Chacune de ces deux parties de compression est clôturée par deux 0.

Les colonnes de RAMA et RAMB des bitmap 16 et bitmap 80 sont compressées alternativement et cette partie de compression est clôturée par quatre 0, deux 0 pour chaque RAM écran.

Exemple de fichier bitmap 40 / bitmap 4
[$00 $00 $1D $00 $00      Ouverture du fichier binaire]
  $00                       Marquage bitmap 40 / bitmap 4
  $01                       (1+1)   = 2 colonnes
  $00                       (0+1)*8 = 8 lignes graphiques
  $00 $02 $00 $7F           Sur l'écran ram A:  $00         $00
  $04 $40                                       $7F         $FE
  $00 $01 $7F                                   $40         $02
  $02 $00                                       $40         $02
  $00 $01 $FE                                   $40         $02
  $04 $02                                       $40         $02
  $00 $02 $FE $00                               $7F         $FE
                                                $00         $00
  $00 $00                  Clôture de la partie ram A
  $10 $C8                  Sur l'écran ram B :  $C8         $C8
                                                $C8         $C8
                                                $C8         $C8
                                                $C8         $C8
                                                $C8         $C8
                                                $C8         $C8
                                                $C8         $C8
                                                $C8         $C8
  $00 $00                  Clôture de la partie ram B
  [$FF $00 $00 $00 $00     Clôture du fichier binaire]
  
  
  Exemple de fichier bitmap 80 / bitmap 16
  [$00 $00 $1B $00 $00     Ouverture du fichier binaire]
  $80                      Marquage bitmap 80 ($40=Bitmap 16)
  $01                      (1+1)   = 2 colonnes
  $00                      (0+1)*8 = 8 lignes graphiques
  $00 $02 $00 $7F          Sur l'écran ram A:  $00  et ram B:  $00
  $04 $40                                      $7F             $FE
  $00 $01 $7F                                  $40             $02
  $02 $00                                      $40             $02
  $00 $01 $FE                                  $40             $02
  $04 $02                                      $40             $02
  $00 $02 $FE $00                              $7F             $FE
                                               $00             $00
  $00 $00                  Clôture de la partie ram A
  $00 $00                  Clôture de la partie ram B
  [$FF $00 $00 $00 $00     Clôture du fichier binaire]

Ce programme en assembleur de décompression d'un graphique Thomson vous permettra d'afficher un graphique dans n'importe quel mode d'affichage et de n'importe quelle taille inférieure ou égale à celle de l'écran. N'omettez pas de mettre en premier lieu votre écran dans le bon mode d'affichage.

Ce programme de décompression graphique Thomson est fourni à titre d'exemple, il ne saurait constituer une référence en la matière.

  *-----------------------------------*
  *                                   *
  * Décompression d'un fichier ".MAP" *
  *   (c) Prehis-To novembre 1998     *
  *                                   *
  *-----------------------------------*
  *
  * X = Pointeur sur graphique compacté
  DECMAP LDB    $E7C3
         ORB    #1      Initialisation écran Ram A
         STB    $E7C3
         LDD    ,X++    A = Type d'affichage / B = Nombre de colonnes
         INCB           Nombre de colonnes + 1
         PSHS   A,B
         LDB    ,X+     Hauteur
         INCB           Hauteur + 1
         LDA    #8
         MUL            (Hauteur + 1) * 8
         TFR    D,Y     Nombre de lignes du graphique
  DECM1  LDA    1,S     Initialisation du compteur de colonnes
         LDU    #$4000  Pointeur écran
  DECM2  PSHS   A,Y,U
  DECM3  LDB    ,X+     Suite inégale ?
         BNE    DECM7   Si non, module de séquence d'égalité
         LDB    ,X+     Compteur de données
  DECM4  LDA    ,X+     Capture d'une donnée
         STA    ,U      Affichage de la donnée
         LEAU   40,U    Déplacement du pointeur écran
         LEAY   -1,Y    Fin de la colonne ?
         BEQ    DECM6   Si oui, retour en haut du graphique
  DECM5  DECB           Fin de la séquence ?
         BNE    DECM4   Si non, donnée suivante
         BRA    DECM3   Si oui, séquence suivante
  DECM6  PULS   A,Y,U   Récupération des registres
         BSR    DECM12  Déplacement pointeur écran selon mode d'affichage
         DECA           Dernière colonne ?
         PSHS   A,Y,U  
         BNE    DECM5   Si non, continue la décompression
         BRA    DECM10  Si oui, ram écran suivante éventuelle
  DECM7  LDA    ,X      Capture d'une donnée
         STA    ,U      Affichage de la donnée
         LEAU   40,U    Déplacement du pointeur écran
         LEAY   -1,Y    Fin de la colonne ?
         BEQ    DECM9   Si oui, retour en haut du graphique
  DECM8  DECB           Fin de la séquence ?
         BNE    DECM7   Si non, donnée suivante
         LEAX   1,X   
         BRA    DECM3   Si oui, séquence suivante
  DECM9  PULS   A,Y,U   Récupération des registres
         BSR    DECM12  Déplacement pointeur écran selon mode d'affichage
         DECA           Dernière colonne ?
         PSHS   A,Y,U
         BNE    DECM8   Si non, continue la décompression
         LEAX   1,X     Si oui, sort du programme
  DECM10 PULS   A,Y,U   Récupération des registres
         TST    ,S      Mode bitmap 40/ bitmap 4 ?
         BNE    DECM11  Si non, sortie du programme
         LDB    $E7C3   Si oui,...
         BITB   #1      Ecran Ram B ?
         BEQ    DECM11  Si oui, sortie du programme
         ANDB   #$FE    Si non, passage à l'écran Ram B
         STB    $E7C3
         LEAX   2,X     Passage des octets de clôture
         BRA    DECM1   Retour au début du programme
  DECM11 LEAS   2,S     Sortie du programme
         RTS
  DECM12 PSHS   B
         TST    3,S     Mode bitmap 40 / bitmap 4 ?
         BEQ    DECM13  Si oui, colonne suivante
         LDB    $E7C3   Si non,...
         EORB   #1      Commutation des rams écran
         STB    $E7C3
         ANDB   #1      Ecran ram A ?
         BEQ    DECM14  Si oui, sortie sans déplacement du pointeur écran
  DECM13 LEAU   1,U     Si non, déplacement du pointeur écran
  DECM14 PULS   B,PC

La particule pour le format TO-SNAP

La particule TO-SNAP est ajoutée à la fin du fichier. Le format TO-SNAP a plusieurs avantages :
- Le suffixe des fichiers est « .MAP », ce qui rend ce format compatible avec tous les logiciels créés sur Thomson, puisque le traitement du fichier se réfère à ce suffixe.
- Le format indique en plus la valeur pour la couleur du tour d’écran ainsi que le SCRMOD pour l’affichage éventuel d’un texte.

Les offsets ont pour base l’octet :
Offsets 0-1 : Mode vidéo hard
A cet endroit est stockée la valeur de SCRMOD ($605F). L’initialisation de ce registre permet quelquefois des fantaisies pour l’affichage d’un texte ou le traitement de l’image. Pour un convertisseur, il vaut mieux se limiter aux valeurs standard :
- $00 pour le 40 colonnes
- $01 pour le bitmap 4
- $40 pour le bitmap 16
- $80 pour le 80 colonnes
Offsets 2-3 : Couleur pour le tour d’écran
Il s’agit simplement du numéro de la couleur pour le tour d’écran, de 0 à 15, activée lors du chargement par un SCREEN,,X.
Offsets 4-5 : Mode vidéo basic
Il s’agit ici du type d’écran X activé lors du chargement par un CONSOLE,,,,X.
Offsets 6-37 : Palette BVR
La palette, codée au format 16 bits BVR, selon l’instruction PALETTE sous basic. Les couleurs sont au nombre de 16 quelle que soit la résolution et sont mémorisées dans l’ordre croissant. Si une couleur est négative, remplacer par -(couleur+1)
Offsets 38-40 : Marquage TO-SNAP
Le format TO-SNAP se reconnaît à la présence de la valeur $A55A (-23206 en décimal) à cet offset.

Le programme d’affichage sera donc le suivant :

  10 DIM T%(10000)
  20 DEFFNC(R)=MAX(-R-1,R)                                    Pour la bonne valeur de couleur
  30 LOADP "DESSIN",T%(10000)
  40 T=T%(10000)                                              Pointe sur la fin du fichier
  50 T=T+1 ;: IF T%(T)<>-23206 THEN END                       Vérifie si format TO-SNAP
  60 FOR I=15 TO 0 STEP -1:T=T+1:PALETTE I,FNC(T%(T)):NEXT    Initialise la palette
  70 T=T+1 : CONSOLE,,,,T%(T)                                 Commute sur le bon mode d’affichage
  80 T=T+1 : SCREEN,,T%(T)                                    Fixe la couleur de tour d ‘écran
  90 T=T+1 : POKE &H605F,T%(T)                                Fixe le SCRMOD
  100 PUT(0,0),T%(10000)                                      Affiche le graphique

La particule pour le format PPM

La particule PPM est ajoutée à la fin du fichier.
Les offsets ont pour base l’octet :
Offsets 0-31 : Palette BVR
La palette, codée au format BVR, selon l’instruction PALETTE sous basic. Les couleurs sont au nombre de 16 quelle que soit la résolution et sont mémorisées dans l’ordre décroissant. Si une couleur est négative, remplacer par -(couleur+1)
Offsets 32-33 : Mode vidéo basic
Il s’agit ici du type d’écran X activé lors du chargement par un CONSOLE,,,,X.
Offsets 34-35 : Marquage PPM
Le format PPM se reconnaît à la présence du marquage « HL » ($484C ou 18508) à cet offset.

Le programme d’affichage sera donc le suivant :

  10 DIM T%(10000)
  20 DEFFNC(R)=MAX(-R-1,R)                            Pour la bonne valeur de couleur
  30 LOADP "DESSIN",T%(10000)
  40 T=T%(10000)                                      Pointe sur la fin du fichier
  50 T=T+1 : IF T%(T)<>&H484C THEN END                Vérifie si format PPM
  60 T=T+1 : CONSOLE,,,,T%(T)                         Commute sur le bon mode d’affichage
  70 FOR I=0 TO 15:T=T+1:PALETTE I,FNC(T%(T)):NEXT    Initialise la palette
  80 PUT(0,0),T%(10000)                               Affiche le graphique

Les fichiers Graffiti

Les fichiers Graffiti sont des fichiers graphiques Thomson bruts accompagnés du fichier de leur palette.

Ils sont reconnaissables par leur suffixe :
Fichier graphique bitmap 40 ".MAP" + fichier palette ".DST"
Fichier graphique bitmap 16 ".M16" + fichier palette ".D16"
Fichier graphique bitmap 4 ".M04" + fichier palette ".D04"
Fichier graphique bitmap 80 ".M02" + fichier palette ".D02"

Le programme basic suivant vous permettra de récupérer une palette Graffiti:

OPEN "I",#1,"DESSIN.D16"                        Ouvre le fichier
  INPUT #1,A,B                          Passe hauteur/largeur
    FOR I=0 TO 15                        |
     INPUT #1,B,BR,V,VR,R,PR            Charge composantes
     PALETTE I,B+V+R                    Affiche couleur
    NEXT I                               |
  CLOSE #1                              Ferme le fichier

Les fichiers ".PHO"

Les fichiers de suffixe ".PHO" sont des fichiers graphiques Thomson bitmap 16 bruts. La palette est sous-entendue comme étant un dégradé de couleur du noir au blanc. Ces fichiers sont créés avec le logiciel de digitalisation d'images "TO-PHOTO".

Site
Plus
Forums
Code
Créations

*Site en favoris
*Page en favoris
*Site en démarrage
*Page en démarrage


Haut de page

Collection Thomson 2015 © Ghislain Fournier & François Mouret