MSX Village forum

La Place des Développeurs Décompression Pletter (DSK2ROM) Help pour convertir de l'asm Z80 en C

Sylver Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 20/04/2018 à 15h26

Messages: 89

Le 22/02/2024 à 17h00

Reprise du message précédent

J'ai un autre cas particulier :
Si en sortie de décompression je n'ai qu'un seul octet, alors ça veut dire que c'est 512 fois cet octet

Mais au final si j'ai 256 octets, alors je ne sais pas si ce sont les 256 premiers ou dernier octets, j'ai réussi à reconstruire mon image DSK correctement en prenant comme supposition que l'octet répété était soit 0 soit FF et que suivant si le premier octet ou le dernier octet était une de ces valeurs alors je collais les 256 octets au début ou à la fin, mais cette hypothèse est fausse (j'ai testé en mettant des 55 et on se retrouve avec 256 octets décompressés)

J'ai trouvé un cas qui déconne encore :
Source : sector_size = 512
55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 EB FE 90 44 53 4B 54 4F 4F 4C 20 00 02 02 01 00 02 70 00 A0 05 F9 03 00 09 00 02 00 00 00 D0 ED 53 59 C0 32 C4 C0 36 56 23 36 C0 31 1F F5 11 79 C0 0E 0F CD 7D F3 3C CA 63 C0 11 00 01 0E 1A CD 7D F3 21 01 00 22 87 C0 21 00 3F 11 79 C0 0E 27 CD 7D F3 C3 00 01 58 C0 CD 00 00 79 E6 FE FE 02 C2 6A C0 3A C4 C0 A7 CA 22 40 11 9E C0 0E 09 CD 7D F3 0E 07 CD 7D F3 18 B2 00 4D 53 58 44 4F 53 20 20 53 59 53 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 42 6F 6F 74 20 65 72 72 6F 72 0D 0A 50 72 65 73 73 20 61 6E 79 20 6B 65 79 20 66 6F 72 20 72 65 74 72 79 0D 0A 24 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55
Compressed : plet_size = 184
55 FF FC 00 00 EB FE 90 44 53 4B 54 4F 01 4F 4C 20 00 02 02 01 00 03 70 00 A0 05 F9 03 00 48 09 09 00 00 D0 ED 00 53 59 C0 32 C4 C0 36 56 00 23 36 C0 31 1F F5 11 79 00 C0 0E 0F CD 7D F3 3C CA 01 63 C0 11 00 01 0E 1A 88 0B 21 34 22 87 0E C0 21 00 3F 1C 62 27 10 C3 18 10 58 C0 CD 3C 79 E6 FE 02 FE 02 C2 6A C0 3A 3F 02 A7 CA 22 40 11 9E 1E 61 09 1E 0E 07 80 04 18 B2 00 4D 53 02 58 44 4F 53 20 20 61 37 53 00 E0 00 42 6F 6F 74 00 20 65 72 72 6F 72 0D 0A 00 50 72 65 73 73 20 61 6E 09 79 20 6B 65 03 66 21 12 20 10 74 72 79 3F 18 24 78 FF FF FF FF FF 80
uncompressed data : 1 bytes
55


Je me retrouve avec un seul octet en décompression ... Edit : Si je vire la condition de sortie si length == 255 alors j'ai les bonnes données ! Edité par Sylver Le 22/02/2024 à 21h14
   
Mokona Membre non connecté

Vagabond

Rang

Avatar

Inscrit le : 16/10/2022 à 15h02

Messages: 9

Le 22/02/2024 à 19h39
Merci pour ces différents exemples, cela m'a permis de trouver l'erreur dans unpletter. J'ai mis à jour.

L'erreur venait du type de la longueur lors d'une référence arrière. J'avais bêtement utilisé le même type que pour les données, sur 8 bits. Or la longueur peut-être beaucoup plus grande que 255...

J'ai pu décompresser correctement tous les exemples que tu as donné avec ça et retrouvé les 512 octets d'origine.

J'ai reporté toutes les modifications dans la version en C.
Edité par Mokona Le 22/02/2024 à 19h49
   
Sylver Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 20/04/2018 à 15h26

Messages: 89

Le 22/02/2024 à 21h42
Ha tu gères de fou, merci infiniment :top
Ca marche nickel maintenant ! J'ai réussi à retrouver des images dsk identiques après un cycle de compression/décompression :)
Je remet mon code au propre et je mets à jour mon fork de dsk2rom

Edit: voilà le code est à jour sur mon fork !
J'ai créé un PR pour intégrer ça dans la version officielle mais je ne sais pas si l'auteur s'embêtera à regarder tout ça et à l'intégrer ... On verra bien ! Edité par Sylver Le 22/02/2024 à 22h35
   
MSXlegend Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 18/06/2010 à 22h42

Messages: 5796

Le 22/02/2024 à 23h15
vous avez l air de gerer de ouf :|

Question, comment etre sur de pouvoir compresser en 512k un dsk sans devoir verifier le fichier dans un editeur hexadecimal ?


Createur du KCX Bluetooth emitter au format cartouche compatible stereo moonsound
Sylver Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 20/04/2018 à 15h26

Messages: 89

Le 23/02/2024 à 17h01
MSXlegend :
vous avez l air de gerer de ouf :|

Question, comment etre sur de pouvoir compresser en 512k un dsk sans devoir verifier le fichier dans un editeur hexadecimal ?

Je suis pas sûr de comprendre la question, il suffit de vérifier la taille du fichier rom avec ton explorateur de fichiers non ?

Sinon bonne nouvelle, l'auteur de dsk2rom a intégré nos modifications dans le repository officiel ;)
   
MSXlegend Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 18/06/2010 à 22h42

Messages: 5796

Le 24/02/2024 à 00h26
je repose ma question autrement.
Comment savoir qu'une disquette 720ko va rentrer MEME avec compression dans une ROM de 512ko?

Comment savoir si ma ROM de 512ko est complete (compressé) apres convertion (dsk2rom) d'une 720ko Edité par MSXlegend Le 24/02/2024 à 00h28


Createur du KCX Bluetooth emitter au format cartouche compatible stereo moonsound
Sylver Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 20/04/2018 à 15h26

Messages: 89

Le 24/02/2024 à 08h41
Ok en fait toutes les données sont stockées dans la rom donc quoi qu’il arrive ta rom est forcément complète, juste elle fera plus de 512ko si ça ne rentre pas dans 512ko
   
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie