Как скомпилировать свой загрузочный образ? (RT-11, MACRO)
- Technomancer
- Advanced Member
- Сообщения: 937
- Зарегистрирован: 12.06.2016,19:56
- Откуда: Рига
-
Конкурсы
Вклад в сообщество
Как скомпилировать свой загрузочный образ? (RT-11, MACRO)
Чисто ради интереса и тренировки. Вот, скажем, я хочу сделать простую программу, которая загружается напрямую с дискеты, а не SAV файл под RT-11. У меня есть простой код MACRO-11, который я успешно ассемблирую как SAV и запускаю. У меня непонятно:
1. Какие параметры я должен задавать LINK чтобы резултьтат был просто бинарный файл, а не SAV?
2. Как этот (и вообше любой) файл из RT-11 скопировать в 0. сектор дискеты?
То, что загрузчик проверяет первый байт загруженного кода я знаю, этого я добавлю в свой код потом.
1. Какие параметры я должен задавать LINK чтобы резултьтат был просто бинарный файл, а не SAV?
2. Как этот (и вообше любой) файл из RT-11 скопировать в 0. сектор дискеты?
То, что загрузчик проверяет первый байт загруженного кода я знаю, этого я добавлю в свой код потом.
Как скомпилировать свой загрузочный образ? (RT-11, MACRO)
Ну для начала - .SAV он как бы и есть бинарный файл Больше того, ещё и образ памяти - с небольшим количеством служебки в блоке 0.
Что бы без танцев с бубном загрузить прогу непосредственно с дискеты надо соблюсти три условия
- размер проги меньше 513 байт (что бы уместилась в один блок)
- старт с абсолютного адреса 0
- первая команда по этому адресу - NOP или её брат близнец с кодом 260
Сама прога переделывается так:
Забываем про все .PSECT, весь код должен располагаться в .ASECT, выглядит это примерно так (перед первой командой кода)
Компилируем, собираем, командой COP <наш .SAV>/FIL MY:/DEV/START:0
MY - для примера
С танцами с бубном (ака свой дозагрузчик) размер может быть любой и код располагаться в любых секция, но должна быть секция .ASECT с адреса 0, в корой первая команда NOP, а дальше дозагрузчик
Что бы без танцев с бубном загрузить прогу непосредственно с дискеты надо соблюсти три условия
- размер проги меньше 513 байт (что бы уместилась в один блок)
- старт с абсолютного адреса 0
- первая команда по этому адресу - NOP или её брат близнец с кодом 260
Сама прога переделывается так:
Забываем про все .PSECT, весь код должен располагаться в .ASECT, выглядит это примерно так (перед первой командой кода)
Код: Выделить всё
.ASECT
.=0
NOP
; дальше код программы
MY - для примера
С танцами с бубном (ака свой дозагрузчик) размер может быть любой и код располагаться в любых секция, но должна быть секция .ASECT с адреса 0, в корой первая команда NOP, а дальше дозагрузчик
- Technomancer
- Advanced Member
- Сообщения: 937
- Зарегистрирован: 12.06.2016,19:56
- Откуда: Рига
-
Конкурсы
Вклад в сообщество
Как скомпилировать свой загрузочный образ? (RT-11, MACRO)
Ого, это было быстро. А разве у SAV в начале сразу код? Я в подробности не искал, но как-то подумал, что там что-то другое для самой ОС. В любом случае, спасибо большое, иду пробовать.
Как скомпилировать свой загрузочный образ? (RT-11, MACRO)
Обычно - нет, обычно там служебка. Но если через .ASECT туда что то запихать, то это перекроет служебку. Я, например, таким образом делал содержимое ПЗУ для KDJ11-A и KDJ11-B обычным MACRO-ом и LINK-ом
Как скомпилировать свой загрузочный образ? (RT-11, MACRO)
Если вдруг что - сделаю дему и выложу код
- Technomancer
- Advanced Member
- Сообщения: 937
- Зарегистрирован: 12.06.2016,19:56
- Откуда: Рига
-
Конкурсы
Вклад в сообщество
Как скомпилировать свой загрузочный образ? (RT-11, MACRO)
Спасибо, еще раз, идея работают. Я еще должен дочитать чтобы обе команды понять до конца. Плюс, похоже, что ДВК считает только первые 128 байт, а не 512.
Как скомпилировать свой загрузочный образ? (RT-11, MACRO)
Обе команды?
Там случаем не DX?Technomancer писал(а): ↑07.04.2021,14:23 Плюс, похоже, что ДВК считает только первые 128 байт, а не 512.
- Technomancer
- Advanced Member
- Сообщения: 937
- Зарегистрирован: 12.06.2016,19:56
- Откуда: Рига
-
Конкурсы
Вклад в сообщество
Как скомпилировать свой загрузочный образ? (RT-11, MACRO)
Ой, я хотел сказать - начало кода и команду. Я после ночных работ, голова наполовину работают. :D
Да, DX. Я и ранше заметил что ДВК считает только первый сектор, а KXT-11 первые четыре. В любом случае, на обоих плат программа себя ведут по-другому. Почему на KXT-11 программа запускаются и выводит не то что задумано, это постараюсь сам разобратся.
Как скомпилировать свой загрузочный образ? (RT-11, MACRO)
Код программы можно разбросать по программным секция. Для чего - это отдельный вопрос, сейчас важно другое - секции бывают абсолютными и перемещаемыми. Абсолютные попадут по тем адресам, которые указаны (.ASECT .. .=0 - с адреса 0, .=256 - а адреса 256) и если вдруг, скажем, из разных файлов, будет попытка разместить по одним и тем же адресам - какая последней будет обрабатываться - та и выиграет. Местоположение перемещаемых (перемещаемая с пустым именем - это секция по умолчанию для MACRO) определится после компоновки ну и в общем случае не факт, что при загрузке она попадёт по тем адресам, которые для неё определит LINK. Перемещаемые обычно стыкуются по принципе - конец одной к началу другой (хотя тут есть нюансы, поскольку у перемещаемых есть ещё имя и стыковка идёт - сначала с совпадающими именами), но у них есть атрибут, который заставляет их размещать с одного общего адреса.
И что бы наш код гарантированно попал в нулевой сектор .SAV-а - нужна абсолютная секция с адреса - 0. .SAV - это по сути образ памяти, начиная с адреса 0
Я не много могу сказать про загрузку с устройств, у которых блок не 512 байт - это всё таки редкость. Вполне возможно, что загрузчики от DEC читают именно 512 байт (и если надо - несколько блоков), а наши деятели могли и не следовать этому правилу. А может быть, загрузчики для более ранних устройств читают по одному блоку, а для более поздних - не по одному, если надо... А может быть.. Короче - это как раз ситуация, когда надо смотреть конкретный загрузчик И подстраиваться под него, а не гадать - чего всё не так
И что бы наш код гарантированно попал в нулевой сектор .SAV-а - нужна абсолютная секция с адреса - 0. .SAV - это по сути образ памяти, начиная с адреса 0
Я не много могу сказать про загрузку с устройств, у которых блок не 512 байт - это всё таки редкость. Вполне возможно, что загрузчики от DEC читают именно 512 байт (и если надо - несколько блоков), а наши деятели могли и не следовать этому правилу. А может быть, загрузчики для более ранних устройств читают по одному блоку, а для более поздних - не по одному, если надо... А может быть.. Короче - это как раз ситуация, когда надо смотреть конкретный загрузчик И подстраиваться под него, а не гадать - чего всё не так
- alecv
- Advanced Member
- Сообщения: 6993
- Зарегистрирован: 05.10.2004,11:13
- Откуда: Санкт-Петербург
- Контактная информация:
-
Вклад в сообщество
Как скомпилировать свой загрузочный образ? (RT-11, MACRO)
Вот тут есть описание формата SAV.
http://bitsavers.trailing-edge.com/pdf/ ... _Aug91.pdf
У SAV в нулевом блоке хранится много полезного (оттуда не все в память загружается, а большинство данных чисто для операционной системы).
Например в ячейке 40 хранится адрес старта программы (его туда помещает линкер по дитективе ассемблера .END START).
Чаще всего 1000 но не обязательно. Я пробовал делать старт от 400 - работает. Ниже не дает, или трапается на больших PDP-11
(плохо помню уже).
http://bitsavers.trailing-edge.com/pdf/ ... _Aug91.pdf
У SAV в нулевом блоке хранится много полезного (оттуда не все в память загружается, а большинство данных чисто для операционной системы).
Например в ячейке 40 хранится адрес старта программы (его туда помещает линкер по дитективе ассемблера .END START).
Чаще всего 1000 но не обязательно. Я пробовал делать старт от 400 - работает. Ниже не дает, или трапается на больших PDP-11
(плохо помню уже).
-
- Advanced Member
- Сообщения: 5894
- Зарегистрирован: 02.08.2013,22:13
- Откуда: Павловский Посад Мск.обл.
- Контактная информация:
-
Вклад в сообщество
Как скомпилировать свой загрузочный образ? (RT-11, MACRO)
Можно посмотреть, как организован загрузчик с ДХ на 055 ПЗУ от МС1201.02.
Насчет перевода текста от DEC - к БК11 без "М" шла брошура "Форматы файлов", она же шла к ДВК-2 МС0501 и МС0502.
Насчет перевода текста от DEC - к БК11 без "М" шла брошура "Форматы файлов", она же шла к ДВК-2 МС0501 и МС0502.
Коллекционирование радиодеталей : http://collectingrd.kxk.ru/