Все верно. На железе оно работает - из монитора в STD я перехожу в МХ. Только после переключения надо прыгать в 0, чтобы ПЗУ проинициализировал режим МХ. Согласно карте, из ПЗУ это сделать нельзя.
Эмулятор разве поддерживает наш специалист? Если да, то полностью ли? По поводу ячейки FFFF тут все просто - оригинальная схема МХа разрешает только 3 состояния: 0, 1 и 2. Если поставить состояние 3, то оно автоматом заменяется на 2. Таким образом, для оригинального МХа FFFE и FFFF полностью одинаковые. И функция моих портов точно такая же, как и у оригинального (за исключением FFFF). Просто, FFFD перехватывает данные, чтобы можно было иметь больше одной страницы расширенного ОЗУ.
После загрузки программы из ROMдиска в ОЗУ тебе не обязательно оставаться в режиме 2, можно включить режим 0, как если бы ты собирался запустить эту программу в режиме МХа. А там уже карта проще. Ищешь свободное место в адресах 8000H...EFFFH и там располагаешь шлюз перехода. Ты же помнишь, что регистр цвета в режиме 3 еще и управляет ПЗУ, поэтому использовать 0000H...7FFFH опасно. Однако можно просто в регистр цвета записывать слово управления до переключения режима. Соответственно, действия должны быть такими:
[Режим 0, 1 или 2]
1. Записать в регистр цвета МХ нужный режим STD: 5/8 цвет и вкл/выкл ПЗУ (думаю, что раз ты грузишь программу, то скорее выкл ПЗУ).
2. Пишешь в ячейку включения режима 3 FFFFH.
[Режим 3]
3. Прыгаешь на нужный тебе адрес.
Опционально можно очистить экран перед прыгом, но большинство программ это делают сами. И еще ты должен помнить то, что карта поменяется и значит стек надо либо распологать так, чтобы при переключении карт памяти он не попал на ПЗУ или порты или переназначать его перед запуском загруженной в ОЗУ программы. Так же, в режиме STD наличие монитора в адресах C000H..CFFFH обязательно. Поэтому, наиболее оптимальным решением будет предварительная загрузка пропатченного монитора в эти адреса и потом уже переключение. Суть патча в том, чтобы после инициализации он сам прыгнул на запускаемую программу (монитор и адрес перехода в его теле могу подсказать). Тогда на шаге 3 нужно прыгать в С000Н, а все остальное (в том числе и стек) он сделает сам.





Ответить с цитированием