1) если я и DATA и CODE размещаю в одном окне (W1 - #4000 или W2 - #8000, неважно), то при вызове set_videomode глобальные переменные (errno, g_text_attr) не меняют своих значений. если же DATA и CODE находятся в разных окнах (не важно где DATA - в W1 или W2, главное что не в том где CODE) - то при вызове se_videomode значения глобальных переменных меняются То есть похоже что для DATA не назначается отдельный блок памяти а назначается только для CODE Это полностью соответствует документации - если приложение менее 16К (как у нас) то ему выделяется только одна страница. И получается что работа со второй страницей идет несанкционированно (ей память не выделена). Потому предлагается 1) сейчас размещать ВСЕ в одной странице (и DATA и CODE и стек) - в W2. 2) дальше - добавить в нашу обертку sprinter-cc режимы памяти - -tiny - все приложение помещается в одну страницу - в W2 (и DATA и CODE и стек) -small - приложение помещается в две страницы - CODE в W1, DATA и стек - в W2. в этом режиме над отдельно выделять и маппить страницу в W2 для DATA и стека -big - DATA, CODE и стек помещаются в одну страницу W2 как в -tiny, добавляется поддержка banked в W1, страница W3 остается служебной и для работы с граффикой из banked code -huge - приложение помещается в двух страницах как и -small но так же добавляется поддержка banked но уже в страницу W3 Из документации - > Теперь адресса #4000..#7FFF,#8000..#BFFF,#C000..#FFFF, когда ДСС передаёт управление эти прогораммам, какие банки там нахадятся по умолчанию? В зависимости от адреса загрузки и размера приложения DSS выделяет необходимое число страниц памяти. Так при размере меньше 16К будет выделена одна страница, при размере больше 16К - две, и т.д. В окна с "неиспользуемым" адресном пространством будет подключатся специальная страница #FF.Если приложению требуется памяти больше чем зарезервировано в exe-файле, оно должно выделить себе дополнительный блок памяти самостоятельно. > В конфигурации спринтер > по #0000..#3FFF, при работе ДСС находится сама ДСС с её Резетами, > чтоб использывать когда сюда подставленна страница пользователся > резеты не доступны!. Это так в нижних 16K находится DSS / BIOS в остальных 48К приложение, но с определенными особенностями. Стек не должен быть выше #BFFF при вызове DSS и ниже #8000 при вызове некоторых функций BIOS. Так же посмотри вот сюда - возможно нам придется для режимов -small и -huge делать свой первичным загрузчиком - Из документации - Выполнение EXE-файла осуществляется по следующим пунктам: 1) Открывает exe-файл на чтение; 2) Считывает в рабочую область префикс exe-файла; 3) Выделяет блок памяти, требуемый для загрузки всего файла или первичного загрузчика, если его размер не равен нулю; 4) Сохраняет стек; 5) Подключает страницы из выделенного блока; 6) Строит префикс запуска программы и устанавливает на него регистр IX; 7) Считывает файл по адресу указанному в смещении 16 (Адрес расположения кода в памяти); 8) Закрывает exe-файл, если это не первичный загрузчик; 9) Устанавливает стек равным значению из смещения 20 (Адрес расположения стека); 10) Передает управление по адресу указанному в смещении 18 (Адрес запуска);