En analysant le fichier image de sauvegarde (autosave.img) de l'émulateur TEO (1.8.4) je me suis plongé dans les sources (merci de les avoir rendu disponibles !) et je pense avoir trouvé un bug. La fonction d'écriture du chunk diskctrl_Loader déclare écrire 128 bytes mais en écrit 80 (2+26+26+26) car NBDRIVE est à 4:
Code : Tout sélectionner
static void diskctrl_Saver(int chunk_id)
{
int drive;
fwrite_int16 (128);
fwrite_int16 (dkcurr);
for (drive=0; drive<NBDRIVE; drive++)
{
/* controller registers */
if ((drive&3) == 0)
{
fwrite_int8 (disk[drive].dkc->rr0);
fwrite_int8 (disk[drive].dkc->rr1);
fwrite_int8 (disk[drive].dkc->rr2);
fwrite_int8 (disk[drive].dkc->rr3);
fwrite_int8 (disk[drive].dkc->rr4);
fwrite_int8 (disk[drive].dkc->rr5);
fwrite_int8 (disk[drive].dkc->rr6);
fwrite_int8 (disk[drive].dkc->rr7);
fwrite_int8 (disk[drive].dkc->rr8);
fwrite_int8 (disk[drive].dkc->rr9);
fwrite_int8 (disk[drive].dkc->wr0);
fwrite_int8 (disk[drive].dkc->wr1);
fwrite_int8 (disk[drive].dkc->wr2);
fwrite_int8 (disk[drive].dkc->wr3);
fwrite_int8 (disk[drive].dkc->wr4);
fwrite_int8 (disk[drive].dkc->wr5);
fwrite_int8 (disk[drive].dkc->wr6);
fwrite_int8 (disk[drive].dkc->wr7);
fwrite_int8 (disk[drive].dkc->wr8);
fwrite_int8 (disk[drive].dkc->wr9);
fwrite_int8 (disk[drive].dkc->crc);
fwrite_int8 (disk[drive].dkc->write_door);
fwrite_int8 (disk[drive].dkc->process);
fwrite_int8 (disk[drive].dkc->process_cpt);
fwrite_int16 (disk[drive].dkc->auto_count);
}
/* drive registers */
if ((drive&1) == 0)
{
fwrite_int16 (disk[drive].drv->sector);
fwrite_int16 (disk[drive].drv->track.curr);
fwrite_int16 (disk[drive].drv->track.last);
fwrite_int16 (disk[drive].drv->pos.curr);
fwrite_int16 (disk[drive].drv->pos.last);
fwrite_int64 (disk[drive].drv->motor_start);
fwrite_int64 (disk[drive].drv->motor_stop);
}
}
(void) chunk_id;
}
Code : Tout sélectionner
54 45 4F 20 49 4D 41 47 45 20 46 49 4C 45 20 46 TEO IMAGE FILE FORMAT
4F 52 4D 41 54 20
0201 format_version
0301 TO8D
00 00 00 00 00 00 Reserved
01 00 mc6809_Loader
00 1F
D0 E7 AD 34 00 08 00 03 00 02 62 DA EE A0 00 00
00 00 05 77 6E 02 00 00 00 00 05 78 D5 66 01
02 00 mc6846_Loader
00 11
81 B1 3D BC 3D 46 30 D3 08 00 00 00 00 05 78 D5
66
03 00 mc6821_Loader
00 0A
3C FE 00 00 FE 3C 0F 06 F6 FF
03 10 mc6821_Loader
00 0A
DF 00 00 FF 00 C4 3F C0 C0 3F
04 00 modepage_Loader
00 0C
00 00 00 44 00 00 02 00 00 00 00 00
05 00 palchip_Loader = 16 couleurs
00 20
00 E0 1B E2 20 E0 1B E0 22 E5 24 E1 6F E1 FF EF
77 E7 15 E1 31 E1 9F E4 41 E8 3E E1 94 EF FE E4
06 00 diskctrl_Loader
00 80 => 80 bytes pas 128 !!
00 00 current drive
80 20 00 4E FF 00 00 00 00 00 00 20 40 00 00 0B
1B 9F 00 00 0B 00 00 00 00 00 00 00 00 00 FF FF
09 DA 18 44 00 00 00 00 00 D4 86 69 00 00 00 00
03 52 2E 33 00 00 00 00 FF FF 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00
07 00 mempager_Loader
00 0A
00 00 00 00 00 01 02 02 02 01
09 00 mb_Loader
00 09
00 00 00 00 05 77 6E 00 01
08 00=bank membank_Loader
3F 02 => data_size = 3F00
00 80 begin
Olivier