
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 (Адрес запуска);
