User Tag List

Показано с 1 по 10 из 143

Тема: Адаптация программ к системе +3DOS

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #6

    Регистрация
    07.01.2006
    Адрес
    г. Москва
    Сообщений
    3,442
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    12
    Поблагодарили
    6 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Адаптация серии игр DIZZY

    Задумал сделать коллекцию DIZZY на одном диске, причем, качественные версии с минимальными отличиями от оригинала. До этого я уже адаптировал части 1, 2, 3.5 и 5. Также в коллекции 107 игр западной адаптации на третьем диске имеются части 5,6 и7. То есть фактически не хватает только 3 и 4 части! Однако я все же решил все переделать. Мои адаптации были сделаны с образов tr-dos коллекций Волгодонска и Дупанова, эти версии оставляли желать лучшего, тогда я еще не отработал технологию переноса и выбирал варианты с легко раскрываемым загрузчиком, поэтому версии попались совсем кривые судя по вечным жизням, отсутствию музыки и т.п. Версии западной адаптации я толком не смотрел, но, судя по файлам игр, там тоже что-то делали, несколько непонятных блоков странного объема. В общем, я решил обратиться к образам кассет. Не уверен в их оригинальности, ксорок там нет, защиты как таковой тоже, просто применяется кодовый загрузчик, но что приятно, все заставки оригинальные, одним стандартным файлом 16384,6912, сама игра идет одним большим блоком, плюс один музыкальный блок, кроме соответственно первой части, так как там музыки АУ не было. Просмотр кода показал, что ничего лишнего там нет, все стройно и четко, посему считаю, что на этих тапках оригинальные образы кассет, а если и не совсем оригинальные, то с корректно снятой защитой и аккуратно структурированные.

    DIZZY1

    В теме Slider’а уже было обсуждение по поводу проблемы не запуска этой части из под режима 128к. Я не буду сильно повторяться, скажу только то, что проблема в затирании системных переменных основным кодом игры. Существует множество способов решения этой проблемы, но я преследовал цель адаптировать как можно ближе к оригиналу, то есть хотел сохранить, как загружаемы блоки в исходном виде, так и те адреса, куда они грузятся, и произвести только минимальные доработки, без которых просто игра не пойдет в системе +3. В общем, я изменил только кодовый загрузчик, соответственно поменял процедуры чтения с ленты на процедуры чтения с диска и для обхода затирания системных переменных 128к загрузил кодовый загрузчик в нормальные адреса ОЗУ выше 23755. Однако, как в случае ленточной версии просто перенести загрузчик в системные переменные в машинном коде уже не получилось, так как процедуры +3 DOS в отличие от процедур ленты используют эти переменные. Поэтому я по максимуму сделал все в нормальных адресах ОЗУ: инициализацию ДОС, включение мотора, открытие файла для чтения, а уже непосредственно чтение и выключение мотора произвел из адресов системных переменных! К счастью процедура чтения файла эти переменные, которые затираются, не использует.
    В итоге получилась качественная версия для +3 DOS с сохранение оригинальных блоков (картинки и самой игры) с изменением только загрузчика, что объективно и логично при адаптации.

    DIZZY2

    С этой частью пришлось повозиться. Она в отличие от всех других просто отказывалась работать в системе 128к в варианте ZX+3, даже при загрузке с тапки. И если первая часть глючила в любом ZX, для нее проблемой был режим 128к, то здесь глюк возникал только в системе +3. Причем если грузить с тапки в системе +3 в режиме 48к без музыки АУ все работало, как часы!
    Долгие и кропотливые разбирательства позволили установить, что причиной этому есть переделка ПЗУ (банк 48к). Процедура RST38 была изменена! После ее выполнения банк памяти устанавливается в соответствие с переменной BANK_M. В стандартной синклеровской прошивке этого не было. Сделано это из-за того, что для +3DOS заюзана 7-я страница и ее периодически нужно включать, когда отрабатывается процедура +3DOS в бейсике. Поэтому если в игре банк памяти переключается некорректно (без сохранения содержимого порта 7FFDh в переменной BANK_M), то при возникновении прерывания первого рода IM1 отрабатывает процедура RST38 и меняет банк памяти на тот, который записан в переменной BANK_M. В случае DIZZY2 происходит несанкционированное переключение банка 6, куда подгружена музыка, на банк 0, где расположен основной код игр. Это приводит к зависанию в самом начале при воспроизведении приветственного крика.
    Решить эту проблему можно. Если делать это в лоб, то, наверное, нужно в игре, где щелкаются банки добавить сохранение текущей настройки регистра 7FFDh в системной переменной BANK_M. Сделать это не так просто, нужно курочить код, делать выноски искать свободные места, причем переключений много и структура игрушки мне не известна, да и решение будет частным только для этой игры. А ведь наверняка такая проблема может возникнуть и в других играх!
    Я придумал очень остроумное и хорошее решение!
    Вот часть процедуры RST38, в которой происходит глюк:

    3873h
    BIT 4,(5C3Bh)
    JR Z,387Ch
    CALL 387Fh
    Последняя команда и переключает это банк. Суть в том, что если 4-й флаг системы бейсик включен, то происходит переключения банка на 7-й и декремент ячейки в нем по адресу E600h – это, скорее всего, какая-то переменная +3DOS, которая создается в 7-ом банке при инициализации +3DOS. Но для функционирования игры это не нужно, поэтому в самом конце загрузки, когда +3DOS больше не будет использоваться, целесообразно сбросить 4-й флаг в системе бейсика, расположен он по адресу 5C3Bh. Исходно там содержится байт 221, при выключении 4-го бита будет 205!
    Таким образом, очередной артефакт +3DOS лечится в загрузчике перед финальным RANDOMIZE USR путем введения POKE 23611,205!!!

    Что касается остальной адаптации, то в отличие от оригинала все блоки я загрузил в бейсике в их оригинальные адреса, а не в машинном коде, так как это позволял адрес начала загрузки 24576 основного кодового блока. Подгрузка файла музыки в страницу 6 осуществил обычной процедурой LDIR в машинном коде, процедура предварительно подзагружается из файла с расширением ldr. Затем все затирается основным блоком игры, который грузится последним.


    На данный момент адаптированы также DIZZY3 и DIZZY4 без особых проблем (артефактов), поэтому пока про их адаптацию ничего не пишу, потом по всей оставшейся кучи напишу пару строк , если и там ничего серьезного не обнаружится.

    DIZZY5 - побежден в ходе упорных и кровопролитных боёв.
    Последний раз редактировалось rajdee; 24.11.2017 в 15:18.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Компилирование готовых программ
    от CityAceE в разделе Программирование
    Ответов: 19
    Последнее: 12.10.2025, 15:25
  2. Адаптация текстового редактора
    от Raydac в разделе Софт
    Ответов: 1
    Последнее: 09.06.2008, 14:27
  3. Ответов: 75
    Последнее: 26.01.2006, 03:06
  4. TR-DOS -> 3DOS?
    от dhau в разделе Оси
    Ответов: 4
    Последнее: 02.02.2005, 16:29
  5. Тестирование программ
    от Vitamin в разделе Программирование
    Ответов: 5
    Последнее: 23.01.2005, 21:46

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •