Посмотрел. Круто. Снимаю шляпу!
А как его транслировать и собирать? Там довольно сложные манипуляции с секциями, расположением и пр. Сходу не въедешь. Батничек... Ой, пардон, com-файлик не сохранился?
Посмотрел. Круто. Снимаю шляпу!
А как его транслировать и собирать? Там довольно сложные манипуляции с секциями, расположением и пр. Сходу не въедешь. Батничек... Ой, пардон, com-файлик не сохранился?
Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)
Просто компилировать MNT.MAC - там включается HEAD00.MAC, который уже подтягивает всё остальное.
- - - Добавлено - - -
Это исполняющая система, которая всё делает сама. Использована концепция "библиотеки исходников", потому что только при включении всех исходников в один "корневой" можно создавать переменные не в виде нулевых слов в коде, а в виде смещений от конца кода.
Увы, оно работает только под последними версиями RT-11. С какой версии начали передавать остаток командной строки с адреса 510 ? С 5.04, да? В общем, моя любимая RT-11DS (SJ) V5.01 в их число не попадает...
Ладно, буду думать.
Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)
Все о БК ДВК УКНЦ VAX Alpha
Архив ПО для ретрокомпьютеров
предоставляю бесплатный хостинг на PDP-11.RU для проектов о ретрокомпьютерах
В принципе, у файлов еще есть атрибуты. Причем флажки Hidden и System у нас не используются. Можно заюзать их. Смонтированному диску ставить HIDDEN, а тому, с которого загрузились, дополнительно - System. Для этого добавить в устройство команду "пометить диск, как загрузочный", а в первичном драйвере выдать ее.
Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)
Нужно переделать ввод командной строки:
Вызов .GTLIN при отсутствии командной строки рисует приглашение программы, а при наличии - переставляет две части введённой строки местами, помещая между ними символ "=" (и если не ошибаюсь - заменяя пробелы на запятые). Нужно написать обратное преобразование (когда-то давно для ввода командной строки в ранних версиях RT-11 я уже такое делал) и тогда единственным отличием станет появление приглашения программы при вызове программы без аргументов.Код:;************************************************************************ ;* * ;* Подпрограмма GETLIN * ;* * ;* - Назначение Ввод командной строки вызова программы * ;* в буфер с адресом в R0. * ;* * ;* При пустой командной строке возвращает * ;* SeC * ;* * ;************************************************************************ .Procedure GETLIN Mov R0, R1 Mov #510, R2 Mov (R2)+, R3 BEq 1$ Dec R3 BEq 1$ .GTLIN ; Нужно убрать командную строку из буфера KMON 2$: MovB (R2)+, (R1)+ SOB R3, 2$ ClrB (R1) Tst (PC)+ 1$: SeC Return .End.
- - - Добавлено - - -
Помечать загрузочный диск есть смысл только в том случае, когда предусмотрена автоматическая загрузка с ненулевого привода. Нужность такой опции (а значит - и всех связанных с её реализацией заморочек) представляется довольно сомнительной.
- - - Добавлено - - -
Использование флажков, как быстрого способа отличить смонтированный образ от обычного - хорошая идея только в том случае, когда контроллер не успевает фильтровать выдаваемый в ДВК список файлов на флешке по своему списку монтирования. Ведь флажок не может заменить список монтирования, а значит он имеет смысл только тогда, когда сильно экономит какие-то ресурсы (например - сильно упрощает написание алгоритма формирования списка доступных для монтирования файлов).
Последний раз редактировалось Patron; 18.06.2019 в 10:18.
Проблема, правда, возникнет, когда ДВК-шик вырубят внезапно. При плановом выключении (получив низкий на К ПИТН В) можно попытаться снять все эти атрибуты со смонтированных файлов, обещанных 10 мс от снятия К ПИТН В до снятия К ПОСТН В и отключения питания должно хватить. А вот внезапное вырубание всяких самодельных источников (которые сделаны из АТХ) - это ой!
Те файлы, которые прописаны в AZ.INI можно, конечно, смонтировать, игнорируя эти флаги (и потом поставить их, как надо). А вот с файлами, смонтированными на ходу, будут сложности...
- - - Добавлено - - -
Не факт. Я подаю команду BO AZ2:, и? А для того, чтобы не перемонтировать системный диск (любая ОС от такого, скорее всего, упадёт), в программе надо дополнительно контролировать это дело. Но это, скорее всего, можно будет обойти и как-то по-другому.
Тоже верно. В принципе, мне, по всей видимости, будет не особенно трудно проверить файл по списку монтирования. Ладно, это надо обдумать.
Мне казалось, что лучше было бы принять строку CSI и, если в ней указан какой-то файл, использовать его, как источник команд. Если же строки нет, то принимать последовательность команд через .GTLIN и отрабатывать их, зациклив программу. Через .GTLIN - это чтобы можно было править строку посредством SL. В общем, тоже надо обдумать.
- - - Добавлено - - -
И вообще, тут вот СуперМакс высказал предложение: сделать все эти дела внутри контроллера. Переключить контроллер в некоторое подобие терминала и общаться с юзером через терминал ДВК. Тогда программа в ДВК будет совсем маленькой, ее спокойно можно вписать в программу начальной загрузки, которую я пересылаю в ДВК при запуске. И это дело будет работать на голом железе, до загрузки любой ОС. В принципе, продублировать этот кусочек в виде отдельной программы под любую ОС, и можно будет рулить этими делами и на ходу, а не только при запуске.
Так, что информации к размышлению - море! Буду думать...
Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)
Да, переключить контроллер в терминальный режим и принимать/передавать потоки байтов через родной регистр данных контроллера. Тогда программа в ДВК должна просто "коммутировать" эти потоки с системным терминалом, а всё остальное будет делать контроллер - рисовать промпт, выводить HELP, разбирать и выполнять команды. Это самый крутой способ, максимально совместимый со всеми возможными применениями контроллера.
- - - Добавлено - - -
Но здесь есть и подводный камень - в многозадачном окружении контроллер должен запоминать фазу терминального обмена на время выполнения блочного обмена. Иначе когда (например) фоновая задача дефрагментирует какой-то диск, смонтировать новый образ в какой-то свободный привод не получится.
- - - Добавлено - - -
И как тогда в многозадачном окружении программа терминального обмена с контроллером должна сообщить контроллеру о готовности продолжить потоковый обмен, прерванный блочным обменом фоновой задачи? Ведь терминальная программа в многозадачной операционке вообще не знает, когда её выполнение прерывается операционкой. Если блокировать контроллер на всё время потокового обмена, то при замене кванта потоковой программы квантом блочной программы - блочная программа зависнет на всё время терминального обмена. В итоге байтовый обмен с контроллером лучше вести по одному терминальному байту за одну команду "прочитать терминальный байт" или "записать терминальный байт".
Таким образом "терминальный агент" оказывается более сложным - перед чтением или записью каждого потокового байта агент должен выдавать в контроллер специальную команду "прочитать терминальный байт" или "записать терминальный байт". В таком случае всё будет работать и в многозадачном окружении.
Последний раз редактировалось Patron; 18.06.2019 в 14:31.
да, для многозадачного решения надо будет продумать архитектуру, но пока начнем с простого - те однозадачный вариант
Все о БК ДВК УКНЦ VAX Alpha
Архив ПО для ретрокомпьютеров
предоставляю бесплатный хостинг на PDP-11.RU для проектов о ретрокомпьютерах
Проблему разрушенного содержания накопителя при внезапном снятии питания обычно решают приделыванием достаточно большого конденсатора на связку "контроллер-накопитель", и детектирования понижения входных +5в. до, например, +4.5 в.
В самой минимальной конфе такой аддон будет содержать сам электролит ( например ~~2200 мкф 6.3 в. ), несколько диодов Шоттки , участок измерения питающих +5в. и софтовую поддержку этого в ОЭВМ.
Для более сложного варианта можно приделать и 8-выв. DC-DC ИС, обеспечивающую стабильные +5в. 0.1 сек после снятия основного +5в.
Блог : http://collectingrd.kxk.ru/ . В ЛС прошу не писать, все сообщения MMTEMA@MAIL.RU
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)