Как скомпилировать свой загрузочный образ? (RT-11, MACRO)

DEC Alpha, ARM, MIPS, PowerPC, SPARC, VAX, PDP-8 и другие устройства
Аватара пользователя
Technomancer
Advanced Member
Сообщения: 937
Зарегистрирован: 12.06.2016,19:56
Откуда: Рига

Конкурсы

Вклад в сообщество

Как скомпилировать свой загрузочный образ? (RT-11, MACRO)

Сообщение Technomancer » 07.04.2021,13:45

Чисто ради интереса и тренировки. Вот, скажем, я хочу сделать простую программу, которая загружается напрямую с дискеты, а не SAV файл под RT-11. У меня есть простой код MACRO-11, который я успешно ассемблирую как SAV и запускаю. У меня непонятно:
1. Какие параметры я должен задавать LINK чтобы резултьтат был просто бинарный файл, а не SAV?
2. Как этот (и вообше любой) файл из RT-11 скопировать в 0. сектор дискеты?

То, что загрузчик проверяет первый байт загруженного кода я знаю, этого я добавлю в свой код потом.

Hunta
Advanced Member
Сообщения: 427
Зарегистрирован: 31.08.2020,21:16
Откуда: Самара

Как скомпилировать свой загрузочный образ? (RT-11, MACRO)

Сообщение Hunta » 07.04.2021,14:02

Ну для начала - .SAV он как бы и есть бинарный файл :) Больше того, ещё и образ памяти - с небольшим количеством служебки в блоке 0.

Что бы без танцев с бубном загрузить прогу непосредственно с дискеты надо соблюсти три условия
- размер проги меньше 513 байт (что бы уместилась в один блок)
- старт с абсолютного адреса 0
- первая команда по этому адресу - NOP или её брат близнец с кодом 260

Сама прога переделывается так:
Забываем про все .PSECT, весь код должен располагаться в .ASECT, выглядит это примерно так (перед первой командой кода)

Код: Выделить всё

	.ASECT
	.=0
	NOP
	; дальше код программы
Компилируем, собираем, командой COP <наш .SAV>/FIL MY:/DEV/START:0

MY - для примера

С танцами с бубном (ака свой дозагрузчик) размер может быть любой и код располагаться в любых секция, но должна быть секция .ASECT с адреса 0, в корой первая команда NOP, а дальше дозагрузчик

Аватара пользователя
Technomancer
Advanced Member
Сообщения: 937
Зарегистрирован: 12.06.2016,19:56
Откуда: Рига

Конкурсы

Вклад в сообщество

Как скомпилировать свой загрузочный образ? (RT-11, MACRO)

Сообщение Technomancer » 07.04.2021,14:09

Ого, это было быстро. А разве у SAV в начале сразу код? Я в подробности не искал, но как-то подумал, что там что-то другое для самой ОС. В любом случае, спасибо большое, иду пробовать.

Hunta
Advanced Member
Сообщения: 427
Зарегистрирован: 31.08.2020,21:16
Откуда: Самара

Как скомпилировать свой загрузочный образ? (RT-11, MACRO)

Сообщение Hunta » 07.04.2021,14:17

Technomancer писал(а): 07.04.2021,14:09 А разве у SAV в начале сразу код?
Обычно - нет, обычно там служебка. Но если через .ASECT туда что то запихать, то это перекроет служебку. Я, например, таким образом делал содержимое ПЗУ для KDJ11-A и KDJ11-B обычным MACRO-ом и LINK-ом

Hunta
Advanced Member
Сообщения: 427
Зарегистрирован: 31.08.2020,21:16
Откуда: Самара

Как скомпилировать свой загрузочный образ? (RT-11, MACRO)

Сообщение Hunta » 07.04.2021,14:17

Если вдруг что - сделаю дему и выложу код

Аватара пользователя
Technomancer
Advanced Member
Сообщения: 937
Зарегистрирован: 12.06.2016,19:56
Откуда: Рига

Конкурсы

Вклад в сообщество

Как скомпилировать свой загрузочный образ? (RT-11, MACRO)

Сообщение Technomancer » 07.04.2021,14:23

Спасибо, еще раз, идея работают. Я еще должен дочитать чтобы обе команды понять до конца. Плюс, похоже, что ДВК считает только первые 128 байт, а не 512.

Hunta
Advanced Member
Сообщения: 427
Зарегистрирован: 31.08.2020,21:16
Откуда: Самара

Как скомпилировать свой загрузочный образ? (RT-11, MACRO)

Сообщение Hunta » 07.04.2021,14:24

Technomancer писал(а): 07.04.2021,14:23 чтобы обе команды понять до конца
Обе команды?
Technomancer писал(а): 07.04.2021,14:23 Плюс, похоже, что ДВК считает только первые 128 байт, а не 512.
Там случаем не DX? :)

Аватара пользователя
Technomancer
Advanced Member
Сообщения: 937
Зарегистрирован: 12.06.2016,19:56
Откуда: Рига

Конкурсы

Вклад в сообщество

Как скомпилировать свой загрузочный образ? (RT-11, MACRO)

Сообщение Technomancer » 07.04.2021,14:34

Hunta писал(а): 07.04.2021,14:24Обе команды?
Ой, я хотел сказать - начало кода и команду. Я после ночных работ, голова наполовину работают. :D
Hunta писал(а): 07.04.2021,14:24 Там случаем не DX?
Да, DX. Я и ранше заметил что ДВК считает только первый сектор, а KXT-11 первые четыре. В любом случае, на обоих плат программа себя ведут по-другому. Почему на KXT-11 программа запускаются и выводит не то что задумано, это постараюсь сам разобратся.

Hunta
Advanced Member
Сообщения: 427
Зарегистрирован: 31.08.2020,21:16
Откуда: Самара

Как скомпилировать свой загрузочный образ? (RT-11, MACRO)

Сообщение Hunta » 07.04.2021,14:49

Код программы можно разбросать по программным секция. Для чего - это отдельный вопрос, сейчас важно другое - секции бывают абсолютными и перемещаемыми. Абсолютные попадут по тем адресам, которые указаны (.ASECT .. .=0 - с адреса 0, .=256 - а адреса 256) и если вдруг, скажем, из разных файлов, будет попытка разместить по одним и тем же адресам - какая последней будет обрабатываться - та и выиграет. Местоположение перемещаемых (перемещаемая с пустым именем - это секция по умолчанию для MACRO) определится после компоновки ну и в общем случае не факт, что при загрузке она попадёт по тем адресам, которые для неё определит LINK. Перемещаемые обычно стыкуются по принципе - конец одной к началу другой (хотя тут есть нюансы, поскольку у перемещаемых есть ещё имя и стыковка идёт - сначала с совпадающими именами), но у них есть атрибут, который заставляет их размещать с одного общего адреса.

И что бы наш код гарантированно попал в нулевой сектор .SAV-а - нужна абсолютная секция с адреса - 0. .SAV - это по сути образ памяти, начиная с адреса 0

Я не много могу сказать про загрузку с устройств, у которых блок не 512 байт - это всё таки редкость. Вполне возможно, что загрузчики от DEC читают именно 512 байт (и если надо - несколько блоков), а наши деятели могли и не следовать этому правилу. А может быть, загрузчики для более ранних устройств читают по одному блоку, а для более поздних - не по одному, если надо... А может быть.. Короче - это как раз ситуация, когда надо смотреть конкретный загрузчик :) И подстраиваться под него, а не гадать - чего всё не так :)

Аватара пользователя
alecv
Advanced Member
Сообщения: 6993
Зарегистрирован: 05.10.2004,11:13
Откуда: Санкт-Петербург
Контактная информация:

Вклад в сообщество

Как скомпилировать свой загрузочный образ? (RT-11, MACRO)

Сообщение alecv » 07.04.2021,19:41

Вот тут есть описание формата SAV.
http://bitsavers.trailing-edge.com/pdf/ ... _Aug91.pdf

У SAV в нулевом блоке хранится много полезного (оттуда не все в память загружается, а большинство данных чисто для операционной системы).
Например в ячейке 40 хранится адрес старта программы (его туда помещает линкер по дитективе ассемблера .END START).
Чаще всего 1000 но не обязательно. Я пробовал делать старт от 400 - работает. Ниже не дает, или трапается на больших PDP-11
(плохо помню уже).

MM
Advanced Member
Сообщения: 5894
Зарегистрирован: 02.08.2013,22:13
Откуда: Павловский Посад Мск.обл.
Контактная информация:

Вклад в сообщество

Как скомпилировать свой загрузочный образ? (RT-11, MACRO)

Сообщение MM » 07.04.2021,20:04

Можно посмотреть, как организован загрузчик с ДХ на 055 ПЗУ от МС1201.02.

Насчет перевода текста от DEC - к БК11 без "М" шла брошура "Форматы файлов", она же шла к ДВК-2 МС0501 и МС0502.
Коллекционирование радиодеталей : http://collectingrd.kxk.ru/

Ответить