А теперь расскажите мне, как запускаются программы, написанные для RSX-11 - под VMS-11
А теперь расскажите мне, как запускаются программы, написанные для RSX-11 - под VMS-11
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Patron, читаю уже 11ю страницу и никак не могу понять что в итоге вы хотите получить:
1) возможность запускать "правильные"(использующи только системные вызовы) 16 разрядные прикладные программы внутри 32х разрядной ОС
2) возможность запустить 16 разрядную ОС или новую 32х разрядную
3) возможность запустить 16 разрядную ОС внутри 32х разрядной
4) возможность запустить несколько 16 разрядных ОС внутри 32х разрядной
5) возможность запускать 16 разрядные ОС внутри 32х разрядных программ, внутри 32х разрядной ОС
?
Я не знаю, что хочет получить Патрон.
Что хочу получить я - проц, идеологически построенный по принципам (не обязательно всем, но хочу такую же вкусную ортогональную систему команд) моего любимого PDP-11, но без его недостатков, основной из которых - 16-ти битность. Сильно желательно поддержка PDP-11 совместимого режима работы, что бы можно было с минимальными переделками запустить на нём мою любимую же RSX-11M-PLUS (подозреваю так же, что и RT-11 можно будет запустить с минимальными переделками) - что бы с самого начала была доступна кака-никака операционка. Думаю, что после запуска этих операционок проги, которые не лезут напрямую к железу, тоже будут работатьНаличие режима совместимости позволит так же собрать комп типа PDP-совместимых и при наличии соответствующего железа (типа КЦГД) (может быть в эмуляторе) и запускать проги типа игрушек.
Наличие (правильно спроектированного) 32-битного режима позволит (с бОльшими переделками) запустить RSX-11M-PLUS с большим объёмом ресурсов и создавать (более быстродействующие) программы менее гемморойным способом.
Для чего мне оно? А ни для чего - just for fun
- - - Добавлено - - -
И поскольку с моей точки зрения народ в этом топике начал не с того и пошёл не туда - я теперь слежу за ним только краем уха.
Желательно получить максимум возможного с минимальными накладными расходами. Для минимизации накладных расходов при виртуализации 16-разрядной архитектуры PDP-11 на 32-разрядной архитектуре - полезно иметь набор 32-разрядных команд процессора максимально похожим на набор 16-разрядных команд PDP-11.
- - - Добавлено - - -
Наличие в ядре 32-разрядного процессора декодера легаси-команд позволяет без больших накладных расходов использовать его для виртуализации PDP-11. Если (например) исполняется команда "вызвать 16-разрядный код", после которой регистры расширенного набора используются в качестве виртуального SP, а также в качестве сегментных для виртуального мапинга и для передачи процессору ссылки на блок контекста с начальным значением виртуального PSW и начальными значениями 16-разрядных R0..R5, а возврат в 32-разрядный режим происходит при передаче вызванным кодом управления за пределы текущего виртуального 16-разрядного сегмента кода ( при выполнении вызванным кодом команд RETURN, EMT и т.п. ). Можно иметь вариант вызова 16-разрядного кода, который использует текущие значения 32-разрядных R0..R5 и битов реального PSW в качестве начальных и возвращает результат в этих же регистрах ( понятно, что из виртуального 16-разрядного PSW в реальное 32-разрядное PSW при этом копируются только биты признаков ).
- - - Добавлено - - -
Нет смысла иметь в 32-разрядном процессоре отдельное 16-разрядное ядро для отдельного 16-разрядного режима работы. Гораздо проще иметь отдельный 16-разрядный сопроцессор, прошивку которого можно заливать индивидуально и который (благодаря специальному протоколу взаимодействия 32-разрядного процессора и 16-разрядного сопроцессора) подменяет на шине 32-разрядный процессор на время выполнения 16-разрядного кода.
Наличие в архитектуре отдельного 32-разрядного процессора ставит вопрос - хотим ли мы иметь в этом процессоре возможность исполнения 16-разрядного кода PDP-11 одновременно с 32-разрядным кодом, и если да - должна ли это быть чисто программная эмуляция или аппаратная виртуализация.
На мой взгляд - при нормальной виртуализации можно спокойно забыть об "аппаратном 16-разрядном режиме" и реализовывать любые "фантазии на тему PDP-11" в стандартном 32-разрядном режиме.
Последний раз редактировалось Patron; 17.09.2017 в 14:00.
Как нибудь сам.
И додумывать за меня не надо - я (пока) вообще не говорил - будет ли это один, будет ли их два, будет ли это аппаратная, будет ли это программная.
Вот руки дойдут (после того, как будут финансы на FPGA и после того как для начала посмотрю сам - чего оно там внутри и сделаю PDP-11 на FPGA) - тогда и буду детали прорабатывать. Когда будет понятно - чего и как умеет платформа реализации.
А может и не дойдут руки - забот хватает и без хобби
Но сделать сначала программный эмулятор (на мой взгляд) тоже полезно. Во всяком случае - благодаря данному обсуждению стало гораздо понятнее, какой может быть архитектура 32-разрядного процессора, максимально совместимого с PDP-11.
Если смотреть с точки зрения программного эмулятора, то на первом этапе проще реализовать 32-разрядного "наследника" процессора 1801ВМ2. Без диспетчера памяти, но с раздельными адресными пространствами ( т.е. "модами") системы и пульта. С 32-разрядными легаси-командами, без поддержки 16-разрядного кода. С плоским адресным пространством 4Гб, условно разбитым на страницы по 4Мб, в старшей из которых видно старшие 4Мб моды пульта со страницей ввода-вывода. Если первый блок памяти 512Кб отдать под область векторов и начального стека, то перекомпилированная RT-11 вполне должна нормально работать даже в конфигурации всего с двумя блоками памяти по 512Кб. Правда, ещё какое-то количество отдельного ОЗУ нужно для нормальной работы ПЗУ пульта.
Не совсем уверен. На мой (пока почти никакой) взгляд программирование FPGA - это всё таки не классическое программирование и если чем и поможет эмулятор - отладкой софта на этапе, когда FPGA варианта ещё нет. В принципе на нём можно прикинуть быстродействия того или иного архитектурного решения - но если ты уверенно представляешь себе - а как оно будет ложиться на FPGA.
- - - Добавлено - - -
Да да, меня Хунтой зовут
Хунта грубиян ! (модераторы такое общение допускают, а это плохо!)
(пусть ка в секте Воланда идёт грубить посмотрим как его там местное армянское радио округлит)
У меня по теме вопрос! Patron, а в чём разница ядро-16 или сопроцессор-16 если средства передачи управления
будут примерно одинаковы? Ядро-16 должно ведь быстрее работать (интеграция,миниатюризация )? То есть софт
то всё равно не поймёт разницы? Вот этот момент мне как не профи не совсем понятен. Тема очень интересная.
Разница в том, что при реализации в FPGA проще (на мой взгляд) иметь отдельный эмулятор (например) PDP-11/70, который работает при переключении архитектуры в чистый 16-разрядный режим, и отдельный эмулятор нового 32-разрядного процессора, который работает только в 32-разрядном режиме.
Софт для PDP-11 никогда не поймёт разницы, так же, как он не понимает разницы при запуске в программном эмуляторе PDP-11 под Windows. Разница есть только с точки зрения сложности разработки аппаратуры - какие функции есть смысл реализовать в FPGA 32-разрядного процессора, какие - в FPGA 16-разрядного сопроцессора, а какие - чисто программно.
Пара мыслей на тему виртуализации PDP-11 в 32-разрядном режиме.
32-разрядная архитектура вводит дополнительные 8 номеров регистров. При обсуждении виртуализации эти дополнительные регистры удобно называть RR0..RR7. Переход в режим виртуализации PDP-11 возможен только из 32-разрядного режима. Для этого надо загрузить в RR7 адрес таблицы виртуализации и выполнить Extended Legacy команду DO16 ( это может быть легаси-команда IOT с установленным битом Extended в старшем слове 32-разрядного кода команды ). При переходе в режим 16-разрядной виртуализации в PSW устанавливается специальный бит VM, позволяющий обрабатывать реальные прерывания с возвратом в режим виртуализации. В таком случае, при входе в прерывание - в стеке вместо 32-разрядного PC сохраняется адрес таблицы виртуализации. Логично, если в начале таблицы виртуализации будет содержаться 32-разрядный код команды JMP @(PC)+, а в следующей 32-разрядной ячейке таблицы будет сохранён адрес следующей команды после DO16. Тогда, если в ходе обработки прерывания будет сброшен флаг VM в сохранённом значении PSW - выход из прерывания приведёт к выходу из виртуализации в прерванном коде. Это может быть полезным при зависании 16-разрядного кода.
В режиме виртуализации младшие слова регистров RR выполняют роль 16-разрядных R0..R7, старшее слово RR6 играет роль 16-разрядного PSW, а в старшем слове RR7 содержится код текущей исполняемой команды. При выходе/вылете из режима виртуализации по любой причине - выполнение кода 32-разрядного режима продолжается с команды, следующей за DO16, а содержимое RR6 и RR7 остаётся таким же, каким было в момент выхода/вылета из виртуализации. Судьба содержимого других регистров зависит от флагов в таблице виртуализации, в которой также может сохраняться содержимое RR0..RR6, имевшееся на момент вызова.
- - - Добавлено - - -
Если бит VM будет установлен в загружаемом PSW из вектора прерывания, а сохраняемое значение PSW не содержит установленного бита VM - то для возврата из 16-разрядного обработчика в прерванный 32-разрядный код - в начале таблицы виртуализации, адресуемой вторым 32-разрядным значением из вектора прерывания - должна находиться команда RTI. Тогда любой выход/вылет из 16-разрядного обработчика реального прерывания приведёт к возврату в прерванный 32-разрядный код.
Если бит VM будет установлен в загружаемом PSW из вектора прерывания и сохраняемое значение PSW также содержит установленный бит VM ( т.е. выполнение 16-разрядного кода было прервано реальным прерыванием с переходом в 16-разрядный обработчик ) - для возврата из 16-разрядного обработчика в прерванный 16-разрядный код - в начале таблицы виртуализации, адресуемой вторым 32-разрядным значением из вектора прерывания - также должна находиться команда RTI.
- - - Добавлено - - -
Но в принципе - обрабатывать реальные "32-разрядные" прерывания виртуализованным 16-разрядным кодом - это уже за гранью добра и зла, поэтому проще запретить установку бита VM из вектора прерывания. Тогда для установки бита VM останутся только два способа - команда DO16 и команды RTI / RTT, загружающие в PSW содержимое с битом VM. Разница между этими способами в том, что при выполнении команды DO16 процессор сохраняет значение PC по смещению +4 от начала таблицы виртуализации ( и если надо - сохраняет в таблице виртуализации содержимое RR0..RR5 ), а при выполнении команд RTI / RTT содержимое таблицы виртуализации не меняется.
- - - Добавлено - - -
Всего возможны четыре уровня сложности виртуализации PDP-11:
1. Виртуализация PDP-11 невозможна. Команда DO16 вызывает Trap_10. Бит VM в PSW всегда нулевой.
2. Виртуализация приложений PDP-11. Без поддержки виртуальной страницы ввода-вывода и виртуальных прерываний.
3. Виртуализация 16-разрядной архитектуры PDP-11. С поддержкой виртуальной страницы ввода-вывода и виртуальных прерываний.
4. Виртуализация 22-разрядной архитектуры PDP-11. С поддержкой виртуальной страницы ввода-вывода, виртуальных прерываний и виртуального диспетчера памяти.
Реализация виртуализации PDP-11 максимального уровня сложности - потребует не меньше ресурсов FPGA, чем требуется (например) для полноценной эмуляции в FPGA чего-то вроде PDP-11/70 со всеми контроллерами эмулируемых внешних устройств. В идеале - стандарт должен предлагать рабочие модели всех четырёх вариантов виртуализации, а уже пользователь будет решать, какой из вариантов реализовать в железе.
Последний раз редактировалось Patron; 18.09.2017 в 17:47.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)