Structure des fichiers binaires

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

Baptiste
Messages : 121
Inscription : 11 mars 2013 15:17
Localisation : Vernouillet (78)

Structure des fichiers binaires

Message par Baptiste »

Bonjour,

Je recherche de la doc sur la structure des fichiers binaires :
- Thomson MO / TO
- VG 5000
- Amstrad CPC

Pour le CPC ce sera juste une piqure de rappel (je sais qu'il y a un header spécifique a l'AMSDOS).
J'ai besoin de connaitre ces structures pour intégrer une fonction d'export depuis mon appli Java.

Merci.
Rien ne sert de courir, en plus tu risques de tomber.
Markerror
Messages : 2121
Inscription : 31 oct. 2011 19:21
Localisation : Orléans
Contact :

Re: Structure des fichiers binaires

Message par Markerror »

Bonjour Baptiste,

Pour le VG5000, j'ai fait une petite doc sur mes expérimentations.

http://tj.gpa.free.fr/temp/Structure_fichier_K7.txt

Ca devrait t'aider. Sinon, notre bible vivante du VG5000, Daniel, devrait pouvoir t'éclairer :-).

Markerror
Daniel
Messages : 17288
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Structure des fichiers binaires

Message par Daniel »

Pour Thomson, il n'y a rien dans la doc officielle.
Il y a peut-être des explications données par prehisto ou pulkomandy dans le forum logicielsmoto, il faudrait chercher.
De mon côté j'ai écrit quelques lignes dans l'ancien forum dcmoto : http://dcmoto.free.fr/forum/messages/591147_0.html

Pour le VG5000 je n'ai rien trouvé, mais s'il y a quelque chose Carl nous le dira, je lui fais confiance :wink:
Daniel
L'obstacle augmente mon ardeur.
Fool-DupleX
Messages : 2271
Inscription : 06 avr. 2009 12:07

Re: Structure des fichiers binaires

Message par Fool-DupleX »

Si, enfin plus exactement dans un livre : le manuel technique du Nanoreseau de Gilbert Cornillet, dans les annexes, p. 231, disponible ici : http://www.nanoreseau.net/lib/exe/fetch ... _chap5.pdf

Il est interessant de noter qu'avec le format binaire Thomson, il est possible d'ecrire partout dans la memoire et donc directement dans les I/Os pendant le chargement (ex d'utilisation: changer la couleur du bord d'ecran a chaque bloc de data ou patcher le BASIC pour faire un autorun a la fin du chargement).
Avatar de l’utilisateur
Carl
Modérateur
Messages : 13232
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: Structure des fichiers binaires

Message par Carl »

je viens de regarder dans mes docs mais rien de rien sur la structure...
mais les infos d'Hervé devrait te permettre de générer des fichiers bin...

Dominique, aurais tu des infos sur le sujet ?
j'ai parcouru les 55 pages de la doc Philips VG5000 Departement Formation Technique mais rien sur la structure d'un fichier bin.

Carl
Markerror
Messages : 2121
Inscription : 31 oct. 2011 19:21
Localisation : Orléans
Contact :

Re: Structure des fichiers binaires

Message par Markerror »

Je viens de relire ma petite doc sur les headers de fichiers VG5000, il y a quelques améliorations à apporter (des exemples !).

Je vais retaper ça ce soir...
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Structure des fichiers binaires

Message par __sam__ »

Les binaires thomson sont structurés par blocs logiques qui se suivent les uns les autres. Attention à ne pas confondre les blocs logiques avec les blocs physiques sur K7. Les blocs logiques sont indépendant du support physique sur lequel les données résident. Ils sont lus après que les blocs physiques (K7 ou D7) aient étés décodés et convertis en octets.

Un bloc commence avec un octet qui est son type suivi de deux octets qui sont sa longueur suivi éventuellement de deux octets d'adresse, et enfin des données.

Code : Tout sélectionner

<type> <len-hi> <len-lo> [<adr-hi> <adr-lo>] [<data> <data> ...]  
<type> <len-hi> <len-lo> [<adr-hi> <adr-lo>] [<data> <data> ...]  
...
La longeur <len> = <len-hi>*256 + <len-lo>. Un bloc fait donc entre 0 et 65535 octets et peut débuter à n'importe quelle adresse mémoire <adr> = <adr-hi>*256 + <adr-lo> (i.e. MSB-first). Les différents types de blocs que je connais sont:
  • 255 : bloc de fin, auquel cas l'adresse est l'adresse d’exécution du binaire (0 si pas d'adresse)
  • 0 : bloc de données. L'adresse est l'adresse de début de chargement du bloc
Les autres valeurs sont a priori des blocs inconnus de <len> octets consécutifs qu'il faut ignorer.

Comme l'a dit fool, dans un binaire il est possible d'avoir des blocs qui ne font qu'un seul octet démarrant dans la zone d'I/O, et qui permettent donc de faire des trucs "sympa" (commutation fond/forme de l'écran, changement du tour ou du mode graphique, voire programmation de la palette de couleur). La difficulté est que les blocs I/O sont très différents entre les machines, même d'une même game (TO7 vs TO9 vs TO8), ce qui fait que le programme ainsi écrit ne marchera que sur un type exclusif de machine.

On peut les décoder avec le programme PERL suivant:

Code : Tout sélectionner

#!/bin/perl
#
# decode un fichier binaire thomson
#
# Samuel DEVULDER, Novembre 2012.
#

for(my $c=&getb; $c>=0; $c=&getb) {
	my($len) = &getw; last if $len<0;
	if($c==255) {
		printf "TYPE: FIN\nEXEC: 0x%04x\n\n", &getw; 
	} elsif($c==0) {
		print "TYPE: DATA\nSIZE: $len\n";
		my($adr) = &getw;

		my($l) = "";
		for(my $i=0; $i<$len; ++$i, ++$adr) {
			printf "%04x:", $adr if ($i&15)==0;
			my($b) = &getb; last if $b<0;
			printf " %02x", $b;
			$l .= $b>=32 && $b<=126 ? chr($b) : ".";
			if(($i&15) == 15) {print " $l\n"; $l = "";}
		}
		print " $l", " " x (15-($len&15)), "\n" if $len & 15;
		print "\n";
	} else {
		print "TYPE: $c\nSIZE: $len\n";
		for(my $i=0; $i<$len; ++$i) {
			my($b) = &getb; last if $b<0;
			printf " %02x", $b;
			print "\n" if ($i&15) == 15;
		}
		print "\n" if $len & 15;
	}
}

# lit un word
sub getw {
	my($b1) = &getb; return $b1 if $w<0;
	my($b2) = &getb; return $b2 if $w<0;
	return $b1*256 + $b2;
}

# lit un octet
sub getb {
	$glb_line = <> unless length($glb_line)>0;
	return defined $glb_line?ord(substr($glb_line, 0,1, "")):-1;
}
Dernière modification par __sam__ le 10 juil. 2013 11:52, modifié 2 fois.
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
Fool-DupleX
Messages : 2271
Inscription : 06 avr. 2009 12:07

Re: Structure des fichiers binaires

Message par Fool-DupleX »

Les deux types de blocs mentionnés par Sam (0 et 255) sont ceux dans le format binaire simple, celui utilisé partout excepté dans le Nanoréseau. Le format étendu rajoute deux nouveaux types (1 et 2) permettant par exemple de charger l'extension 64K sur le MO5. On peut généralement ignorer cette extension toutefois.

Grâce à ce format, on peut faire un élégant chargeur automatique avec la simple commande LOADM sans paramètre en BASIC, le fichier binaire allant directement patcher l'interpréteur BASIC pour sauter au programme chargé. C'est ce qui a été fait par exemple dans le jeu Mandragore.
Dernière modification par Fool-DupleX le 10 juil. 2013 09:26, modifié 1 fois.
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Structure des fichiers binaires

Message par __sam__ »

Merci pour la précision fool. Pas étonnant que sur TO je n'ai jamais rencontré de blocs de type 1 ou 2 en effet.
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
Avatar de l’utilisateur
Dominique
Messages : 814
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: Structure des fichiers binaires

Message par Dominique »

Carl a écrit :Dominique, aurais tu des infos sur le sujet ?
j'ai parcouru les 55 pages de la doc Philips VG5000 Departement Formation Technique mais rien sur la structure d'un fichier bin.
Je vais justement voir Jean François à 14 H, je lui demande.
Baptiste
Messages : 121
Inscription : 11 mars 2013 15:17
Localisation : Vernouillet (78)

Re: Structure des fichiers binaires

Message par Baptiste »

Bonjour,

Merci pour vos réponses, je pense que je vais pouvoir m'en sortir.
Rien ne sert de courir, en plus tu risques de tomber.
Markerror
Messages : 2121
Inscription : 31 oct. 2011 19:21
Localisation : Orléans
Contact :

Re: Structure des fichiers binaires

Message par Markerror »

Petite mise à jour de la doc sur les headers de fichiers VG5000.

http://tj.gpa.free.fr/temp/Structure%20fichier%20K7.txt [Edit] Lien corrigé

Ya pas mal de choses en plus dedans (surtout des exemples). On s'aperçoit au final que certaines
commandes Basic du VG5000 sont difficilement exploitables à l'usage (et comme par hasard, je n'ai
trouvé aucun exemple dans les bouquins traitant du VG5000.... ).

Je pensais que seul l'Exelvision avait des routines de sauvegarde de données merdiques, mais le VG5000
n'est pas mal non plus dans ce domaine :-).

Il y a encore des petites choses à valider (checksum dans le header par exemple, j'ai la
flemme ce soir de prendre ma calculette), on verra ça plus tard...

Markerror
Dernière modification par Markerror le 11 juil. 2013 22:02, modifié 2 fois.
Avatar de l’utilisateur
Carl
Modérateur
Messages : 13232
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: Structure des fichiers binaires

Message par Carl »

Hervé, n'y a t-il pas un soucis avec ton lien ?

Carl
Avatar de l’utilisateur
fneck
Site Admin
Messages : 17389
Inscription : 01 avr. 2007 12:03
Localisation : Drôme Provençale (26)
Contact :

Re: Structure des fichiers binaires

Message par fneck »

Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Markerror
Messages : 2121
Inscription : 31 oct. 2011 19:21
Localisation : Orléans
Contact :

Re: Structure des fichiers binaires

Message par Markerror »

Aie, désolé, j'ai modifié le nom du fichier sans m'en rendre compte :-(.
Répondre