[Thomson] Chargement de fichiers MAP sur TO7/70

Cette catégorie traite de développements récents pour nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

tjjq44
Messages : 220
Inscription : 26 oct. 2016 13:40

[Thomson] Chargement de fichiers MAP sur TO7/70

Message par tjjq44 »

__sam__ a écrit : 09 janv. 2022 17:53 Cherches UToPic sur mon github si tu veux te faire des images photorealistes sur thomson.
J'aimerais bien! d'autant plus que j'ai réussi à me débrouiller à comprendre comment utiliser tes plugins pour créer des fichiers MAP avec grafx2. Malheureusement toutes mes tentatives pour les charger sur mon TO7/70 via un petit programme basic ont échoué :(

J'ai passé en revue la quasi totalité des bouquins dédiés au TO7 dispos sur DCMOTO mais sans grand succès, la plupart sont très théoriques et les exemples dédiés à la sauvegarde et au chargement d'une page écran ne sont pas légion. J'en ai trouvé un qui fonctionne... à peu près (Il ne fonctionne que si le curseur est tout en bas de l'écran) et encore il a fallu que je corrige des coquilles (un "&" en trop avant PEEK, une ")" manquante, une variable "X0" lol...)! En revanche ça ne génère que des fichiers BIN (un pour la forme, l'autre pour les couleurs).

Voici le listing :
Image

J'ai essayé ça aussi : http://collection.thomson.free.fr/code/ ... XI=0&XJ=13 et ça http://www.silicium.org/forum/viewtopic.php?t=1325 sans succès là non plus.

Bref si quelqu'un peut m'aiguiller :?:
Dernière modification par tjjq44 le 10 janv. 2022 23:56, modifié 1 fois.
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Chargement de fichiers MAP sur TO7/70

Message par Daniel »

C'est bizarre, le texte décrit la procédure pour MO et l'exemple est pour TO.
Mais peu importe, c'est une procédure pour charger en mémoire vidéo des images non compressées.
Les fichiers .map sont différents : ils sont compressés. Il faut écrire le programme de décodage.
Daniel
L'obstacle augmente mon ardeur.
tjjq44
Messages : 220
Inscription : 26 oct. 2016 13:40

Re: [Thomson] Chargement de fichiers MAP sur TO7/70

Message par tjjq44 »

Justement, c'est dommage d'avoir deux logiciels de conversion : grafx2 avec plugin de Sam et bmp2mo5 de 6502man (même si le second se contente de la pure conversion sans algorithme d'adaptation) et même pas un petit listing basic dispo quelque part pour afficher tout ça sur la vraie machine... en effet en soi c'est "inutile" mais ça pourrait être intégré plus tard dans un programme plus global :wink: (faut bien que je m'occupe en attendant l'avènement de SDSTREAM :D )
Daniel a écrit : 10 janv. 2022 22:33C'est bizarre, le texte décrit la procédure pour MO et l'exemple est pour TO.
Comme quoi (sans compter les erreurs que le noob que je suis a sans mal relevé) y avait déjà à boire et à manger dans les bouquins à l'époque...

[mode troll on]
Daniel a écrit : 10 janv. 2022 22:33Il faut écrire le programme de décodage.
Tu t'y colles? :lol:
[mode troll off]
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Chargement de fichiers MAP sur TO7/70

Message par Daniel »

En Basic 128 les instructions LOADP, SAVEP, GET et PUT permettent de manipuler les fichiers MAP sans écrire de programme de codage/décodage.
En Basic 1.0 il faut écrire le programme de décompression. Exemple pour TO8 :

Code : Tout sélectionner

  *-----------------------------------*
  *                                   *
  * 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
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] Chargement de fichiers MAP sur TO7/70

Message par __sam__ »

Si tu regardes thomson.lua tu verra que si tu appuies sur echap durant la sauvegarde, tu trouvera en plus du fichier Map deux fichiers rama et ramb contenant le binaire brut non compresse de la ram vidéo.

Attention le format de la mémoire couleur entre les TO et les MO est différent il faudra sans doute adapter le fichier lua à ton besoin.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
tjjq44
Messages : 220
Inscription : 26 oct. 2016 13:40

Re: [Thomson] Chargement de fichiers MAP sur TO7/70

Message par tjjq44 »

Désolé pour mes questions de noooooooooob mais c'est pas évident de te suivre...

je vois bien le fichier thomson.lua dans le sous dossier lib mais si je le charge comme je chargeais ostro_to7.lua il ne se passe strictement rien... quant-à appuyer sur échap pendant la sauvegarde ça propose "abort? yes/no"... super!

en ouvrant thomson.lua avec un éditeur de texte j'ai bien repéré ceci mais ça m'aide pas davantage...

Code : Tout sélectionner

   -- save raw data as well ?
    local moved, key, mx, my, mb = waitinput(0.01)
    if key==4123 then -- shift-ESC ==> save raw files as well
		local ramA,ramB = {},{}
		for i=1,#thomson.ramA do 
			ramA[i] = thomson.ramA[i]
			ramB[i] = mo5to7(thomson.ramB[i])
		end
        savem(name .. ".rama", string.char(unpack(ramA)),0x4000)
        savem(name .. ".ramb", string.char(unpack(ramB)),0x4000)
        local pal = ""
        for i=0,15 do
            local val = thomson.palette(i)
            pal=pal..string.char(math.floor(val/256),val%256)
        end
        savem(name .. ".pal", pal, -1)
        saveb(name .. ".bas", thomson)
        messagebox('Saved MAP + RAMA/RAMB/PAL files.')
    end
tjjq44
Messages : 220
Inscription : 26 oct. 2016 13:40

Re: [Thomson] Chargement de fichiers MAP sur TO7/70

Message par tjjq44 »

Bon en attendant j'ai avancé sur le programme du bouquin cité plus haut. J'arrive désormais à sauvegarder l'écran et à le restituer, c'est déjà un début!
Voici mes deux fichiers basic, le dumper :

Code : Tout sélectionner

1000 LOCATE 0,0,0
1010 POKE&HE7C3,1
1020 SAVEM"TFORM.BIN",&H4000,&H5F3F,0
1030 POKE&HE7C3,0
1040 SAVEM"TCOUL.BIN",&H4000,&H5F3F,0
1050 LOCATE 0,23,1
Et le loader :

Code : Tout sélectionner

1000 LOCATE 0,0,0
1110 POKE&HE7C3,1
1120 LOADM"TFORM.BIN"
1130 POKE&HE7C3,0
1140 LOADM"TCOUL.BIN"
1150 I$=INKEY$
1160 IF I$="" THEN GOTO 1150
1170 LOCATE 0,0,1:SCREEN 4,6,6:CLS


Ici les fichiers bin obtenus : http://tjjq.free.fr/thomson/fichiers-ecran.zip
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Chargement de fichiers MAP sur TO7/70

Message par Daniel »

Attention, pour sélectionner la mémoire vidéo couleur ou forme, il ne faut pas mettre à 0 ou à 1 tout l'octet $E7C3, mais seulement le bit 0.
Il est possible que le programme fonctionne, mais c'est de la chance et ce n'est pas propre.
Daniel
L'obstacle augmente mon ardeur.
tjjq44
Messages : 220
Inscription : 26 oct. 2016 13:40

Re: [Thomson] Chargement de fichiers MAP sur TO7/70

Message par tjjq44 »

Ah zut, je suis pas encore au point lol :lol:

C'est mieux ainsi? (en tout cas ça fonctionne tout aussi bien chez moi)

Code : Tout sélectionner

1000 LOCATE 0,0,0
1010 POKE&HE7C3,PEEK(&HE7C3) AND 254
1020 SAVEM"TFORM.BIN",&H4000,&H5F3F,0
1030 POKE&HE7C3,PEEK(&HE7C3) OR 1
1040 SAVEM"TCOUL.BIN",&H4000,&H5F3F,0
1050 LOCATE 0,23,1

Code : Tout sélectionner

1000 LOCATE 0,0,0
1110 POKE&HE7C3,PEEK(&HE7C3) AND 254
1120 LOADM"TFORM.BIN"
1130 POKE&HE7C3,PEEK(&HE7C3) OR 1
1140 LOADM"TCOUL.BIN"
1150 I$=INKEY$
1160 IF I$="" THEN GOTO 1150
1170 LOCATE 0,0,1:SCREEN 4,6,6:CLS
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Chargement de fichiers MAP sur TO7/70

Message par Daniel »

tjjq44 a écrit : 11 janv. 2022 16:46 C'est mieux ainsi?
Parfait 8)
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] Chargement de fichiers MAP sur TO7/70

Message par __sam__ »

C'est shift-esc pardon qu'il faut faire. Ma mémoire défaille (s'il n'y avait que ça... 😉)
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
tjjq44
Messages : 220
Inscription : 26 oct. 2016 13:40

Re: [Thomson] Chargement de fichiers MAP sur TO7/70

Message par tjjq44 »

Merci j'avais essayé ça aussi vu que c'était marqué dans le fichier mais pas mieux :(
tjjq44
Messages : 220
Inscription : 26 oct. 2016 13:40

Re: [Thomson] Chargement de fichiers MAP sur TO7/70

Message par tjjq44 »

En attendant j'ai pas mal avancé de mon côté. J'ai trouvé dans le magazine Téo n°1 un listing de compactage et décompactage d'image en .MAP !!
Le soucis c'est qu'il y a aussi un fichier binaire à générer, pour ça l'article fait référence au "chargeur hexadécimal habituel"... tellement habituel que son listing n'est pas présent dans le magazine en question :?

Un petite recherche google plus tard je tombe là dessus, le texte est archi mal mis en forme mais j'arrive tout de même à en extraire un listing fonctionnel que voici (CHARHEX.BAS) :

Code : Tout sélectionner

100 REM CHARGEUR HEXADECIMAL avec controle de saisie
110 SCREEN 3,0,0:CLS
120 INPUT "Adresse de DEPART ";DEP$
130 LET N = VAL ("&H"+DEP$):CLS
135 REM mise a zero du checksum
140 LET CK=0 : COLOR 1
150 PRINT HEX$(N)" ":COLOR3
155 REM saisie par groupes de 16 octets
160 FOR T=1 TO 16
170 LINEINPUT A$
175 PLAY"O5L5SO"
180 IF A$="" THEN 170
190 IF A$="FIN" THEN END
200 P=VAL("&H"+A$)
210 POKE N,P:LET N=N+1:LET CK=CK+P
220 NEXT T
230 COLOR 6:INPUT "CHECKSUM: ";CT
235 REM controle saisie par valeur du checksum
240 IF CK=CT THEN 260 ELSE N = N-16
250 BEEP:PRINT "ERREUR DE SAISIE ":GOTO 140
260 COLOR 2:PRINT "OK":GOTO 140
Grâce à ce programme je peux saisir le code hexa du magazine afin de générer le fichier binaire : http://tjjq.free.fr/thomson/cod-dcad.bin

Le listing du programme d'encodage (ENCMAP.BAS) :

Code : Tout sélectionner

10 CLEAR ,&H9FFF
12 INPUT "NOM DU FICHIER";NOM$
20 LOADM "COD-DCAD"
30 CODE=&HBB80:DECODE=CODE+3
50 DEBUT%=-&H6000
60 FIN%=0
100 LOCATE 0,0,0
1060 EXEC CODE,VARPTR(FIN%),DEBUT%,0,0,3
9,24
1070 SAVEM NOM$,DEBUT%,FIN%,0
1080 LOCATE 0,24,1
Le listing du programme de décodage (DECMAP.BAS) :

Code : Tout sélectionner

10 CLEAR ,&H9FFF
12 INPUT "NOM DU FICHIER";NOM$
15 LOCATE 0,0,0
20 LOADM "COD-DCAD"
30 CODE=&HBB80:DECODE=CODE+3
50 DEBUT%=-&H6000
60 FIN%=0
2010 LOADM NOM$
2020 EXEC DECODE,DEBUT%,0,0
2030 I$=INKEY$
2040 IF I$="" THEN GOTO 2030
2050 LOCATE 0,23,1
J'ai aussi mis à jour mon fichier SDDrive : http://tjjq.free.fr/thomson/thomas.sd

Ce truc fonctionne super bien, j'arrive à créer des fichiers map et à les re-charger :D Seul bémol il ne charge que les .MAP créés par lui-même, impossible de charger des .MAP générés avec grafx2 par exemple... ce format n'obéit pas à un standard :?:
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Chargement de fichiers MAP sur TO7/70

Message par Daniel »

Je ne suis pas spécialiste, mais je crois que le format map a évolué avec l'apparition des nouveaux modes graphiques de la dernière génération Thomson. Il est possible que les fichiers générés par GRAFX2 ne soient pas compatibles avec les premières versions de décodeurs, qui acceptent uniquement les images au format Thomson 320x200 en 16 couleurs.
Prehisto a écrit :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]
Daniel
L'obstacle augmente mon ardeur.
tjjq44
Messages : 220
Inscription : 26 oct. 2016 13:40

Re: [Thomson] Chargement de fichiers MAP sur TO7/70

Message par tjjq44 »

__sam__ a écrit : 11 janv. 2022 17:19 C'est shift-esc pardon qu'il faut faire. Ma mémoire défaille (s'il n'y avait que ça... 😉)
Ca y est j'ai réussi! En fait il faut faire shift-esc pendant que la conversion se fait! J'avais écarté cette idée au début car ça bloque l'évolution de l'affichage du pourcentage de conversion, mais la conversion se poursuit quand même et au final un petit message comme quoi les fichiers "rama" et "ramb" ont été créés et ils le sont :D .Ca génère en plus un ".BAS" d'une bonne centaine de Ko et un ".PAL", aucune idée de leur utilité. Enfin j'ai quand même essayer de lancer le ".BAS" pour voir mais sans succès.

Du coup en considérant que rama c'est pour la mémoire couleur et ramb pour la mémoire forme, je peux charger tout ce petit monde là avec le programme "LOADER.BAS".


Trop cool, merci les gars! Pour le chargement des ".MAP" je verrais ça ce WE avec les indications que tu viens de poster Daniel, je reprends le taf demain et faut aller au dodo :wink:
Répondre