Исправил ошибку определения свободного места в ОЗУ в программе "External Flash Disk". Внедряю программу в прошивку Специалиста_МХ2.
Исправил ошибку определения свободного места в ОЗУ в программе "External Flash Disk". Внедряю программу в прошивку Специалиста_МХ2.
HardWareMan, услышь меня! Я тут сталкнулся с переходом из 3-го (STD) во 2-й (MX) режим в Спеце_МХ2. На ассемблере как это писать. А то кроме отключения ПЗУ и включения 8-ми цветов в 3-м режиме я ничего не откопал:
ld a, #03
ld (#7ff8), a
Все верно. Только выполнять это надо в области памяти, общей для обоих режимов, чтобы там не всплыло какое-нибудь устройство. Я у себя это делал в экранной области ОЗУ, но можно и в другом, заведомо общем, месте.
Это всё ясно. Ну как мне практически перейти из одного режима в другой?
Для начала, давай вспомним карту памяти в разных режимах:
Очевидно, что для перехода между режимами нужно использовать тот тип памяти, который находится в обоих режимах. В нем располагаем шлюз. Это может быть ПЗУ (прыг из режима 3.0 в 2), или ОЗУ. Остальное, я думаю, сам догадаешься.
Для перехода из 3-го во 2-й режим я писал в ячейку F7FE данные (я думаю любые?), но никакого перехода не было. Хуже ситуация во 2-м режиме - при попытке записи в ячейку FFFF эмулятор (я использую от b2m) виснит. Вообще-то писать в ячейки FFFC...FFFE как-бы не есть хорошо (насчёт FFFF Афанасьев не упоминал), они предназначены для включения/выключения RAM/ROM дисков. А у тебя в них располагаются ячейки перехода в другие режимы.
С приведённой тобой таблицей я полностью согласен.
Может я не прав тогда объясни. Я хотел грузить свою программу из ROM диска пользователя (второй режим, из-под RAMFOS) в ОЗУ, потом прыгать в 3-й режим и там её (программу) запускать. Что-то не выходит.
Все верно. На железе оно работает - из монитора в 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Н, а все остальное (в том числе и стек) он сделает сам.
Последний раз редактировалось HardWareMan; 08.12.2012 в 13:52.
Всё понятно. HardWareMan, а ситуация сейчас такова, что кроме как записи в ROM-диск пользователя (кстати тоже усечённый с 32 до 16 кБ) больше никак программы не загрузить в Специалист_МХ2 (SD карта тобой в смысле драйвера не продвигается, магнитофон отстой использовать).
Остаётся одно - запускать с RAMFOSа программу из ROM-диска, переключаться в STD режим и там всё разворачивать. Охота по максимуму всё заюзать, в том числе и твои подпрограммы (не использующие подпрограммы Мониторов и RAMFOSа), а именно OutSymbol, OutText и другие. Как-то их нужно оформить прошитыми в пзу. Но свободное место есть только в первой половине твоей прошивки и будет работать только в STD. Что думаешь?
Расчехлил свой спец, буду пилить.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)