Тема: RELDRIVE - драйвер перемещаемых файлов
Тут Вольдемар создал тему про Linker. Тема интересная, но Linker как таковой мне был в свое время не нужен, так как собирать файл из нескольких мне было не нужно, проще написать свой исходник. Но описания его работы я в своё время разбирал и формат перемещаемых файлов оттуда выкопал, а потом из описаний типа Benef Apple DOS.
R-файлы в Агат-9 умели нормально генерировать (к счастью) Ассемблер ИКП и ассемблер Сергея Громова, с которым я и работал больше, так как это было намного удобнее. В Ассмеблере ИКП была ошибка при генерации перемещения псевдокоманды DDB ! (у Громова эта ошибка была исправлена).
А вот программку "настройки" перемещаемых файлов я делал - "Программа настройки перемещаемых файлов". Это был кусочек кода, который должен был быть меньше 255 байт, написан так, чтобы не содержал в себе адресов абсолютных переходов (т.е. сам был был абсолютно перемещаем без всяких "настроек") ну и использовал бы только ячейки нулевой страницы для хранения временой информации с которой работает.
Этот кусок "Программа Настройки ..." помещалась перед сгенерированным в ассмеблере R-файлом. R-файл содержал в себе рабочий код программы и таблицу перемещения - адреса меток нуждающихся в "перемещении". При запуске такого файла с любого физического адреса, управление сначала попадало на "Настройщик", который определял абсолютный собственный адрес загрузки, зная свою длину, вычислял адрес начала программы пользователя (для её последующего запуска) и адрес начала таблицы перемещения. Затем пересчитывал все метки по таблице и запускал программу.
Такой R-файл мог работать в любом месте оперативной памяти.
Позже, я реализовал "Настройщик" сначала как драйвер (назывался RELDRIVE.BIN) , встраиваемый в ДОС 3.3 Бейсика Агат-9, а затем поместил поддержку перемещаемых файлов непосредственно "внутрь" Basic Master`95. R-файл мог загружаться командой BLOAD Name, Addr и загружаться и запускаться командой BRUN Name, Addr. Пересчет меток делался сразу для обеих команд.
Для истории АГАТа - основной код програмки простой и короткий, был написан мной (тогда 17 летним мальчишкой) без ПК на каникулах (на бумажке). Когда я приехал домой и набрал его он не работал ... Найти ошибку мне помог мой друг и соратник по программированию на Агате, полноправный член "фирмы" Friend`s software, Владимир Лузганов. Если бы не он возможно я был вообще бросил эту затею и никакой поддержки перемещаемых файлов у Агат-9 не было бы.
Драйвер RELDRIVE.BIN был описан в статье для газеты "Первое сентября" (оригинал статьи от 1994 г. можно скачать тут
http://www.agatcomp.ru/agat/Paper/Newspaper/1sent.shtml Эта статья кажется так и не вышла в той газете ... (Первое сентября и перемещаемые файлы это как земля и Космос).
Насколько я знаю, такой "поддержки перемещаемых файлов" в ДОС 3.3 Агат-7 никогда не было, а у APPLE, кажется было только в PRODOS (точно не знаю). Может знает кто ?
Попозже размещу код "Настройщика" тут.