В теории, как говорится, все возможно :) Но сделать это тяжело и мороки будет много.
С первым подходом основной источник проблем - это начальный загрузчик.
Проблема 1. На семерке сразу после включения доступно только 32 Кб ОЗУ и неважно, сколько там модулей ДопОЗУ и ПсевдоПЗУ - они не инициализируются Монитором. Загрузчик обязан уместиться в эти 32 Кб и еще оставить место для меню и картинки ИКП. На девятке все 128 Кб доступны, поэтому там загрузчик грузится в другие адреса. Мало того, в загрузчике ИКП девятки есть код инициализации модулей ДопОЗУ, который на эти адреса завязан.
Проблема 2 - код для обнаружения плат расширения, который у разных архитектур разный. Если подковырять адрес загрузки относительно просто, то код для обнаружения плат расширения придется держать в двух версиях. А раз в двух версиях, значит, придется пересобирать загрузчик из исходников и делать переключение веток кода.
Проблема 3 - это самомодифицирующийся код. Загрузчик грузит меню ИКП, а меню ИКП патчит код загрузчика. Раз у нас две версии, то и патчить, скорее всего, придется две разных части загрузчика в зависимости от архитектуры. Ну и понятное дело, придется менять код меню тоже.
Проблема 4 - это "стартеры" приложений. В загрузчике есть такие куски кода, которые я называю "стартеры". Дело в том, что когда загружается какая-то часть пакета (например, Рапира или Бейсик), то эта часть ничего не знает про оборудование. Нужен специальный кусочек кода, который скажет той же Рапире, что принтер находится в этом слоте, дисковод в этом и т.д.
Кроме того, запуск той же Рапиры - это не передача управления в одну точку. Там отдельно инициализируется IOSUB, настраиваются процедуры переключения банков памяти и только потом управление передается Рапире.
Так вот, для каждой архитектуры стартеры разные. Так что их тоже придется держать в загрузчике в двух версиях.
Проблема 5 - размеры. Во-первых, увеличится загрузчик, так что поедет раскладка модулей по диску. Во-вторых, загрузчик ИКП работает с диском по линейным адресам (там просто номер сектора от 0 до 1023, трек вычисляется автоматом с учетом формата диска). Проблема в том, что этого может не хватить, поскольку все части пакета тоже будут в двух версиях.
Навскидку я не помню, сколько там секторов занимают компоненты ИКП, но помнится, что на диске 140 КБ места почти не остается, то есть, как раз секторов 400-500 они и занимают.
Второй подход тоже нифига не проще.
Самое сложное там - вызовы между страницами ПсевдоПЗУ. Что в Рапире, что в Бейсике подход примерно один: в ПсевдоПЗУ создается область для межстраничных вызовов. Когда нужно вызвать что-то в соседней странице, управление передается на одну из точек в этой области. Дальше вызывается процедура переключения страниц (она вынесена в основное ОЗУ, поскольку адреса модулей ПсевдоПЗУ пишутся при запуске прямо в код этой процедуры). После этого выполняется инструкция RТS и управление возвращается в область межстраничных вызовов, только это уже другая область, на другой странице ПсевдоПЗУ. И уже там находится код для вызова требующейся процедуры.
Если начать менять код, то будет меняться и его размер. Значит, поедут адреса и даже распределение процедур по страницам ПсевдоПЗУ.
Это будет неисчерпаемый источник проблем :) Если какую-то процедуру придется переместить, то надо будет учесть все сценарии ее использования и все зависимости от других процедур. Потому что на новом месте ей могут оказаться недоступны процедуры, которые были доступны ранее. Отлаживать это все - просто будет сказка. Страшная.
Я поражаюсь вообще терпению разработчиков Рапиры и Бейсика, которые все это отлаживали без эмуляторов и аппаратных отладчиков.