Acid Paper #02 |
|
C кассеты на диск - перенос и адаптация программ с кассеты на диск.
С кассеты на диск. Эта тема поднималась неоднократно во многих электронных изданиях для Спекки, но я ни разу не встретил разумного изложения. Попробую поделиться своими методами. Итак, имеется примерно такой вариант: basic-файл. заставка headerless блок1 headerless длина 20000 байт блок2 headerless длина 20536 байт блок3 headerless длина 1536 байт (или около того). Грузим все файлы в память и начинаем гонять от точки старта STS'ом или чем-то подобным. Так как игра явно сброшена мультифейсом или похожим извратом, то попадаем на процедуру восстановления регистров, режима прерываний и стека. Проходим ее и попадаем куда-то в середину опроса клавиатуры или вывода на экран. Далее для ускорения поиска я переношу PC в #0052 и гоняю по шагам несколько раз. Рано или поздно STS приводит меня к старту.(STS делает, а думаю я;). Затем неплохо просмотреть старый, как правило фирменный basic, который сидит в памяти. Оттуда можно извлечь и стартовый адрес, и (иногда!) параметры нормального кодового блока. Длину кодов можно определить еще и так: от usr"A" двигаться вниз по памяти. Как правило, в конце памяти есть 2-3 свободных килобайта. Следующий шаг - упаковка и написание загрузчика. Обычно я пакую картинку с помощью Screen Crasher'а, который в среднем неплохо сжимает картинку. Затем в распаковщике изменяется три(!) байта, что позволяет распаковать заставку в память по адресу #8000 или #С000, а затем красиво вывести ее на экран. Кодовый блок пакуется по вкусу. Крайне редко приходится резать его на два, и на моей памяти только одна(!) игра не позволила так надругаться над собой. Это Fairlight I для 48Кб. Мне так и не удалось сделать полный дисковый аналог кассетной версии из-за нехватки памяти. Теперь остался один момент. Почти все игрушки фирмы ULTiMaTe не работают в 128-м и 48-м с открытым портом. Поэтому обычно я использую корректный переход в 48-й режим и устанавливаю защелку 48 Кб(бит 5 порта #7FFD). Кстати, раньше был такой непризнанный стандарт: если вторая буква имени файла была маленькой, то boot переходил в 48-й режим перед запуском такого файла. Это важнее, чем сортировка каталога;). В российских программах я, как правило, исправляю два момента: - некорректный turboloader - мне и с #3d13 неплохо. - некорректный опрос kempston joystick - ставлю автоопределение. Именно благодаря второму пункту в нашем городе получили признание ViRuS 2, Hexxagon и другие. А в Hexxagon'е я добавил еще управление AY-mouse, но эта версия не распространялась. Все вышесказанное относится к стандартной игре. В особых случаях программа имеет уровни, сохраняет/загружает состояние игры или просто глючит. Про это разговор особый. И в заключение одна из последних адаптаций. Это I of Mask 1. Игрушка 1984 года, довольно крутая для того времени. Я нашел ее на компакт-диске, который продает UNBEL!EVER. Итак, файл формата tzx, поддерживающего многие нестандартные способы записи на кассету(читай: защиту от копирования). А прикол вот в чем: после basic'a идет длинный(около 50 Кб) файл, в котором хранится все. Причем картинка идет по увеличению адресов, а атрибуты - по уменьшению и т.д. В загрузчике 8 или 9 вызовов процедуры загрузки - примерно 200 килобайт. Но! Четвертый по порядку блок перекрывает загрузчик и модифицирует его. Самое смешное в том, что загрузка оказалась невинным цветочком. А ягодкой стал подсчет контрольной суммы кусков памяти, которая стала ключом для ксорки. В итоге я дождался окончания загрузки и выгрузил всю память, которую благополучно порезал на куски и разбил на нормальные блоки. Кстати, в basic'е была такая строчка:"Hi, Bill! Another hacker?" И это все фигня. На том же диске, в том же формате есть очень похожая на фирменную RanaRama. Там тоже один здоровый блок, который выводит заставку и потом крутит счетчик и по ходу загрузки печатает инструкцию. Умели делать, а? GoBLiN/BeerManZ p.s. "Mortal Kombat Hackers Group выпустил все пристойное, что было на Спектруме. Остался один KAL". KAN0/RPSG. Отвечаем: Андрей, ты не прав!
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября