Все равно не понял, про "+15 1 Кол-во записей"
а) Заполненный эксетент 80h
б) Заполненный эксетент 16 блоков по 512 байт = 8192 байта / 128 = 40h
Решил поставить эксперимент.
1) Создал образ с размером блока в 512 байт. Сохранил 3 файла,
с размерами: 200, 6192 и 32000 байт. Команда CAT выводит, что все
файлы нулевого размера и на диске свободно 0 байт. Первые два файла
загружаются нормально. При попытке загрузить последний файл выдается
ошибка "Wrong file type". Вот что записано в образе:
00 46 49 4C 45 31 20 20 20 20 20 20 00 00 00 02 .FILE1..........
04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 46 49 4C 45 32 20 20 20 20 20 20 00 00 00 37 .FILE2..........
05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 00 00 ................
00 46 49 4C 45 33 20 20 20 20 20 20 01 00 00 7B .FILE3.........{
13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 ................
E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ееееееееееееееее
E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ееееееееееееееее
Размер первого файла 2*128 = 256 байт. Размер второго файла 37h*128 =
7040 байт. Третий файл записан некорректно. Он должен занимать 64 блока
и 4 записи в каталоге. А блок всего один. Номера блоков явно из нулевого
экстента. Номер экстента равен 1, а нулевого экстента нет. Размер экстента
указан 7Bh*128 = 15744 байт, но это 31 блок.
Потом я записал с помощью своей программы файл размером 40 Кб. Команда
CAT так же пишет 0 байт, а при попытке загрузить файл выводится ошибка
"End of file foudned"
00 45 4C 49 54 45 20 20 │ 20 44 41 54 00 00 00 40 .ELITE...DAT...@
04 05 06 07 08 09 0A 0B │ 0C 0D 0E 0F 10 11 12 13 ................
00 45 4C 49 54 45 20 20 │ 20 44 41 54 01 00 00 40 .ELITE...DAT...@
14 15 16 17 18 19 1A 1B │ 1C 1D 1E 1F 20 21 22 23 .............!"#
00 45 4C 49 54 45 20 20 │ 20 44 41 54 02 00 00 40 .ELITE...DAT...@
24 25 26 27 28 29 2A 2B │ 2C 2D 2E 2F 30 31 32 33 $%&'()*+,-./0123
00 45 4C 49 54 45 20 20 │ 20 44 41 54 03 00 00 40 .ELITE...DAT...@
34 35 36 37 38 39 3A 3B │ 3C 3D 3E 3F 40 41 42 43 456789:;<=>?@ABC
00 45 4C 49 54 45 20 20 │ 20 44 41 54 04 00 00 40 .ELITE...DAT...@
44 45 46 47 48 49 4A 4B │ 4C 4D 4E 4F 50 51 52 53 DEFGHIJKLMNOPQRS
E5 E5 E5 E5 E5 E5 E5 E5 │ E5 E5 E5 E5 E5 E5 E5 E5 ееееееееееееееее
E5 E5 E5 E5 E5 E5 E5 E5 │ E5 E5 E5 E5 E5 E5 E5 E5 ееееееееееееееее
Короче, размер кластера в 256 байт не поддерживается в +3DOS.
В крайнем случае можно работать с файлами до 8 Кб.
---------- Post added at 10:55 ---------- Previous post was at 10:22 ----------
Эксперимент 2. Размер кластера 4096 байт.
Записал своей программой два файла: 6192 и 40801 байт.
00 45 4C 49 54 45 20 20 20 53 43 52 00 00 00 40 _ELITE___SCR___@
04 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ________________
00 45 4C 49 54 45 20 20 20 44 41 54 00 00 00 40 _ELITE___DAT___@
06 07 08 09 0A 0B 0C 0D 0E 0F 00 00 00 00 00 00 ________________
В итоге, первый файл загружается, второй нет. Команда CAT выводит
корректные размеры файлов (выровненные на 4 Кб), видимо она считает кластеры.
Попробовал записать в "+15 1 Кол-во записей" нули. CAT работает, а вот LOAD перестал.
Сохранил по команде SAVE файл размером 40 Кб. В отличии от моего, этот
файл загрузился по команде LOAD.
00 45 4C 49 54 45 20 20 │ 20 44 41 54 00 00 00 40 _ELITE___DAT___@
04 05 06 07 08 09 0A 0B │ 0C 0D 00 00 00 00 00 00 ________________
00 58 20 20 20 20 20 20 │ 20 20 20 20 02 00 00 3A _X_____________:
0E 0F 10 11 12 13 14 15 │ 16 17 00 00 00 00 00 00 ________________
Наверное экстент рассчитывается по формуле:
экстент = номер_записи_в_каталоге*(ра мер_блока/1024) + (длина+16383)/16384





Ответить с цитированием