> defasc
Скорее всего ты её компилировал раньше в ассемблере Громова.
В доках к нему говорилось, что это бинарная (или дизассемблированная?) переделка ассемблера из "Диалогового Отладочного Комплекса" Школьницы. Добавлены некоторые команды (включая defasc) и что-то с буферами сделано (как-то расширенны). И вроде бы ещё там говорилось об изменённой работе с таблицей меток, что позволило сильно увеличить скорость компиляции.
Вот кус доки про defasc:
...
DEFASC
Позволяет в процессе ассемблирования перекодировать
текст, заданный командами ASC и REV, а также в форма-
те '<символ>', из кодов ASCII в произвольный код. Фо-
рмат команды:
DEFASC <имя файла>
Файл должен содержать таблицу перекодировки и может
иметь любой тип. Таблица строится так, чтобы в нужной
кодовой позиции стоял требуемый символ или код ASCII.
Из файла берутся первые 256 байт без контроля типа
файла. В связи с этим использование файлов типа B
нежелательно.
...
На форуме его не обсуждали, поскольку те, кто сейчас радикально влез в разработку, используют кросстрансляцию, а остальным хватает старого ДОК (он же "Ассемблер" в ИКП).
--
Заголовок FIL-контейнера всегда $28 байт. После него идёт тело файла посекторно, как он был в файловой системе dos33.
А то, что B- формат в своём теле содержит два байта адреса загрузки и два байта длины - это личное дело этого формата.
Также как A- содержит в начале своего тела два байта длины.
Если в dos33c2 открыть файл "как есть hex" - то эти байты будут видны в самом начале дампа.
Но дамп будет выводится как бы с офсета 0 (а не с "адреса загрузки").
В K- формат Виктор Цикоза вынес эти 4 байта в TSL вроде как для того, чтобы потом не морочиться со сложным чтением первого сектора (т.е. его нужно куда-то скинуть сперва в буфер, а потом отдельно скопировать, начиная с 4-го байта, в целевой регион ОЗУ). Вроде так в доках на Школьницу даже написано.
С другой стороны он получил проблему в том, что теперь копировщики, архиваторы и прочие проги вынуждены читать/хранить/копировать и кусок TSL, которая - формально - является служебными данными ОС и без прямого доступа к памяти ДОС недоступна (т.е. её нельзя получить через функции FileMan (так называется драйвер и его API файловой системы в dos33)). Для Цикозы-то это не было проблемой, потому что Школьница просто не имеет файловых утилит в своём составе. Всё ограничивается вызовами "читать/писать дамп ОЗУ с заданного адреса или с того, который храниться в ТСЛ". Причем прочитать в нулевую страницу нельзя, потому что именно смещение загрузки 0 в Школьнице как раз и означает "использовать данные ТСЛ" (причем для Т- формата оно недопустимо).
Ну и какой-нибудь старый-эпловский FID, вероятно, К- файл и не сможет правильно скопировать.
Он -то был разработан до Школьницы.
==
Немного о FileMan: эта часть совсем не упоминалась в агатовской документации, хотя она отлично существовала в dos33 семёрки. Она есть и в ИКП-Бейсике, но там до неё уже сложнее дотянуться.
FileMan позволяет обращаться к файлам любых типов, используя типичные вызовы fopen/fread/fwrite/lseek/fclose. Т.е. можно было прочитать любой кусок файла любого типа в заранее заданный буфер.
И bload именно так и поступает: запрашивает 4 первые байта из B- , думает над ними, потом запрашивает остальную часть файла, указывая уже известную точку загрузки и, таким образом, все сложности чтения неполного первого сектора падают на FileMan, который надрессирован на подобные запросы.
Но поскольку о FileMan практически никто из агатовских программеров не слышал (кроме тех, кто добыл книжки по эплу и перевёл их, что-то вроде "Под яблоней DOS"), то каждый изобретал свой велосипед, той или иной степени корявости. И даже вполне развитые BTK и The BEST имеют гораздо меньше возможностей по управлению файлами. Пожалуй, Спрайт-ОС была достаточно развита в этом отношении, но она - совсем другая история.