Немного истории

Давным-давно, в далекой-предалекой галактике… В общем была такая приставка «Денди». И было на нее море пиратских картриджей разной степени паршивости. Но один не давал мне покоя.

Через некоторое время после покупки желанной «Денди», я, как и все, столкнулся с проблемой, что комплектный картридж с «танчиками» уже не вставляет, как раньше. Назрела необходимость покупки нового, чтобы было хотя бы на что меняться с другими товарищами. Продавались картриджи с помпой по всей Москве, так что был выбран самый простой и удобный вариант — Универмаг Московский возле Ярославского вокзала. На третьем этаже был целый отдел с игрушками, причем не только от фирмы Steepler.

К выбору картриджа я подошел со всей тщательностью. Выбирал самый тяжелый и самый желтый картридж из всех. Чем тяжелее картридж, тем больше в него влезало игр, причем наклейка на этот показатель никак не влияла. Забегая вперед, скажу, что на моем в последствии наклейки не оказалось вовсе. Наконец, выбор был сделан: многоигровка 7-в-1 с «Черным плащом», «змейками» и «Magic Jewel».

Началась новая эра (лично для меня), после простеньких «уточек» и «марио» я получил сразу великолепнейшие и красивейшие игры с музыкой (сколько времени я убил на запись и прослушивание заставочной темы из Робокопа, это не передать словами).

Была лишь одна вещь, которая омрачала мою радость. Игра «Snake Rattle’n Roll» на этом картридже всегда намертво зависала в седьмом уровне на «фонтанчиках». Как только брался приз-часы, появлялся одинокий фонтанчик, а дальше следовала неминуемая смерть. Обидно было еще и потому, что даже с секретными переходами между уровнями, известными мне на тот момент, добраться до того места было ой как сложно. Впоследствии был, конечно же, найден переход из первого уровня сразу в восьмой, что несколько спасло дело, но это было уже достаточно поздно и всерьез игру пройти так и не удалось. Спустя время, картридж и вовсе затерялся в чьих-то закромах и так ко мне и не вернулся. Но история на этом не заканчивается, а начинается новая.

Некоторое время назад я получил по почте пачку картриджей (кстати, огромная просьба тем, кто мне что-то отправлял вне зависимости, хотел бы он вернуть картриджи обратно или нет, свяжитесь со мной по почте, и засвидетельствуйте принадлежность тех или иных посылок именно вам; память у меня плохая, а посылки скопились за довольно большое время, сам я уже могу и не вспомнить, кого за что благодарить). Среди тех картриджей оказался один, полу-живой, с явными следами вандало-ремонта, и показывал он только одну игру «Черный плащ» с глюками в графике. На плате значилось 12-в-1. После выпайки и считывания ПЗУ, оказалось, что это ни что иное, как тот самый родной картридж со «змейками». Вот он, герой рассказа, в коробке с оригинальной наклейкой:

7 в 1 "со змейками"

7 в 1 "со змейками"

Замулить маппер не составило большого труда, благо все игры имеются в отдельном виде, все (кроме простых) работают на оригинальной версии MMC1 от Nintendo и соответственно могут быть выделены нужные для переключения банки ПЗУ и для пиратского маппера. К слову сказать, несмотря на простоту, пиратский вариант сам по себе позволяет практически идеально имитировать работу большинства картриджей на базе MMC1, с тем лишь исключением, что каждую игру необходимо индивидуально модифицировать. В частности, «Робокоп» требовал от пиратов огромных усилий по модификации кода, потому как функции смены банков разбросаны в нем по всему ПЗУ, с чем доблестные тайваньцы успешно справились.

Пришла очередь узнать наконец, что же было причиной такого жестокого зависания «змеек».

То самое место

То самое место

Вот оно, проблемное место. Одно движение вниз, чтобы забрать приз-часы и прощай долгие часы трудов по прохождению до этого места. Экспериментально было найдено место, где игра срывается в бездну, а также исходный байт данных, который к этому ведет. Осталось только найти место, где он получает свое деструктивное значение. И такое место было найдено:

Оригинальный код

	$FFC9 8D FF BF   STA     $BFFF
	$FFCC 4A         LSR
	$FFCD 8D FF BF   STA     $BFFF
	$FFD0 4A         LSR
	$FFD1 8D FF BF   STA     $BFFF
	$FFD4 4A         LSR
	$FFD5 8D FF BF   STA     $BFFF
	$FFD8 4A         LSR
	$FFD9 8D FF BF   STA     $BFFF
	$FFDC 60         RTS

Пиратский модифицированный код

	$FFC9 0A         ASL
	$FFCA 0A         ASL
	$FFCB 0A         ASL
	$FFCC 8D FF BF   STA     $BFFF
	$FFCF EA         NOP
	$FFD0 EA         NOP
	$FFD1 2C FF BF   BIT     $BFFF
	$FFD4 EA         NOP             
	$FFD5 2C FF BF   BIT     $BFFF
	$FFD8 4A         LSR
	$FFD9 2C FF BF   BIT     $BFFF
	$FFDC 60         RTS     

Часть своих данных игра хранит видео-ПЗУ и периодически ей надо их оттуда считывать. В частности, в видео-ПЗУ хранятся некоторые данные уровня, например, как раз данные активных объектов. Когда мы берем приз-часы, игровое поле модифицируется так, чтобы появились анимированные фонтанчики. Сначала вызывается функция смены банка видео-ПЗУ, а потом функция копирования данных из видео-ПЗУ в ОЗУ приставки. Обе функции вызываются одна за другой, первая с параметром номера банка в регистре А, вторая с параметром индекса массива данных, с которого необходимо начать копирование данных.

Не так явно бросается в глаза тот факт, что оригинальная функция смены банков всегда очищает регистр А, так как сдвигает его на 5 бит вправо, а число, в него записываемое, не превышает 31. Таким образом, в оригинальной игре, после вызова функции смены банка, функция копирования всегда должна инициализироваться нулевым значением в регистре А. У пиратов же, функция состоит из старой части, в которой опкоды MOV заменены на BIT, чтобы не влиять на пиратский маппер, а нужное значение для его собственного регистра получается сдвигом индекса банка графики на 3 влево. Таким образом, на выходе из этой функции регистр А не очищается, а его значение передается как индекс начала области данных для копирования. В определенный момент нужные данные пишутся не туда и приводят к фатальному сбою.

Исправить данный баг можно было бы всего лишь добавлением гарантированной очистки регистра А перед выходом из подпрограммы смены банка. Вот так, пиратская недоработка могла стоить кучи нервных клеток для молодого организма и кучи впустую потраченного времени на ее поиск у взрослого. 😉

Вот и сказочки конец, а кто дочитал до этого места, получит приз.

Advertisements

30 Comments

  1. Posted 08/17/2009 at 14:10 | Permalink

    Why only in Russian?? I need to translate this:] Please add some comments in English.

  2. Fallved
    Posted 08/17/2009 at 16:25 | Permalink

    Я до читал до конца, где мой приз??? )))

  3. cah4e3
    Posted 08/17/2009 at 17:34 | Permalink

    dr88, lol, I can’t write so much in english, sorry 😉

  4. cah4e3
    Posted 08/17/2009 at 17:36 | Permalink

    Fallved, а приз — дамп этого картриджа лол, на CaH4e3’s Stuff Home.

  5. Posted 08/17/2009 at 18:03 | Permalink

    I always look for your updates:) Could be nice to translate them sometimes:P

  6. cah4e3
    Posted 08/17/2009 at 18:27 | Permalink

    I always translate my updates 😉 this one first I didn’t translate lol

  7. Crash Nicker
    Posted 08/17/2009 at 18:43 | Permalink

    Alright, if anyone wants, I can translate it for you, English-speakers. Just mail me on cr45h_it_away@mail.ru, my mailbox is always open for guests (but not for spam intruders, of course, tee-hee-hee…)

  8. Crash Nicker
    Posted 08/17/2009 at 18:45 | Permalink

    No worries Cah4e3, just want to get rid of mall the mistakes you usually make d;)

  9. RoxMarty
    Posted 08/18/2009 at 04:12 | Permalink

    И правда помню этот катридж был и у меня. Действительно, ситуация со змейкой на уровне с фонтанчиками долго вводила меня в ступор! Потом как-то и забылось…

    Буквально на днях решил пройти уже с помощью эмулятора этот Snake. Прошёл без проблем и фонтанчики. А вот в самом последнем уровне пришлось долго повозиться в самом конце, чтобы запрыгнуть в финишную «лунку». На приставке я бы это точно вряд ли прошёл — терпения бы столько не хватило 🙂

  10. Posted 08/19/2009 at 00:07 | Permalink

    Интересно! 🙂
    Хотя на денди мне эти «змейки» не разу не встречались…

  11. Grun D
    Posted 08/19/2009 at 01:17 | Permalink

    Спасибо Cah4e3, что ты есть. Интересно пишешь. Я отлично помню этих «змеек», игра мне не понравилась – очень сложная, и дальше 4-го уровня я не проходил. 🙂
    З.Ы. «сколько времени я убил на запись и прослушивание заставочной темы из Терминатора». Может все-таки из «Робокопа 3»? Я сам не мог наслушаться.:)

  12. Posted 08/19/2009 at 10:14 | Permalink

    Hello. Will you make more Contra dumps? Like Forest Contra, New Contra and the multicart?

  13. MopoZ
    Posted 08/21/2009 at 10:27 | Permalink

    У меня был точно такой карик=))
    только в змейках дальше 4 кроаня не доходил…

  14. Lex_05
    Posted 08/27/2009 at 19:47 | Permalink

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

  15. kinaman
    Posted 09/07/2009 at 21:16 | Permalink

    >>Началась новая эра (лично для меня), после простеньких «уточек» и «марио» я получил сразу великолепнейшие и красивейшие игры с музыкой (сколько времени я убил на запись и прослушивание заставочной темы из Робокопа, это не передать словами).<<

    Точь-в-точь про меня. :))) Я точно также после картриджа 9999in1, прилагавегося к приставке, вскоре потерял интерес к простым играм и приобрел заветную 7-игровку — абсолютно точно такую же как на фото. И о сколько времени я убил на "змеек". Страшно подумать сколько жизней изменил баг с очисткой регистра А… Спасибо, Cah4e3, что поведал наконец о причине этого чёртового глюка!

  16. VBKesha
    Posted 10/23/2009 at 19:08 | Permalink

    Мдя из за одного регисра A я тоже в свое время не смог пройти этот уровень.
    Была вот ещё одна игра Frankenstein — The Monster Returns с примерно темже глюком, зависала во втором уровне при прыжке на «кочку» на болоте. Причём перепробовал много картриджей глюк был на всех. Интесрено с чем там связано на эмуляторах идёт без проблем.

  17. cah4e3
    Posted 10/23/2009 at 21:40 | Permalink

    ну если найдется картридж, то легко. такой фигни было еще несколько, типа глюков на лифте в shatterhand, правда сам я его не помню ниразу.

  18. v4era
    Posted 11/25/2009 at 02:51 | Permalink

    cah4e3, спасибо 🙂

  19. Posted 12/16/2009 at 01:44 | Permalink

    Hello. Will you make more Contra pirate dumps?

  20. daNIL
    Posted 01/25/2010 at 02:41 | Permalink

    Спасибо за инфу 🙂 Тоже в детстве оч мучался, только переход с 1 на 8 или 5 на 8й решал… На самом деле, баг еще проявляется даже если не брать часы, а просто прыгнуть в пропасть право-вверх от часов. Видимо, там тоже банки переключаются 🙂

  21. AnimalBear
    Posted 01/26/2010 at 19:35 | Permalink

    It´s possible to emulate a rom call Where´s Bin Laden? That Cartrige is a clone of Where´s Wally is so rare i saw a image no the internet and i don´t now where is the image now :(.

  22. cah4e3
    Posted 01/27/2010 at 15:52 | Permalink

    It’s only possible if you find cartridge for me, even images didn’t help. 😉

  23. Руслан
    Posted 03/14/2010 at 05:27 | Permalink

    да,какой облом был когда игра зависла,я думал картридж заезжанный а оно вон оказывается как …
    лишь только спустя долгие годы прошел её на эмуляторе.

  24. Posted 04/25/2010 at 00:20 | Permalink

    Contra pirate dumps?

  25. Raptor
    Posted 04/29/2010 at 18:24 | Permalink

    Да-да, точь в точь как и я. Только у меня вместо танчиков наряду с уточками был «лоде руннер» :))).
    Со змейками парился аналогично. Более того, однажды совершил невозможное — дошёл до этого места один двумя змейками!!! (просто никто из друзей не мог дойти до туда) Хотел сделать такой трюк. Одну змейку подталкиваю пальцем ноги на часы, а вторую тут же пихаю в водопад. Фонтанчик брызнул один раз, змейка естественно с него свалилась и поплыла вниз. Потом стандартный «матрас» на экране.
    А ещё мне удалось на втором уровне заставить ногу упасть в море — наизабавнейший баг! 😉

  26. Posted 11/24/2012 at 23:25 | Permalink

    Мда. Носстальгия. Был у меня такой карт когда-то.

  27. must
    Posted 12/08/2012 at 09:06 | Permalink

    не помнишь, в каком году Dendy купил? какая модель?

  28. cah4e3
    Posted 12/08/2012 at 13:59 | Permalink

    Модель, конечно же, денди джуниор, а вот год — хоть убей не помню. 😉

  29. Posted 12/10/2012 at 17:04 | Permalink

    а у меня на 7-игровке со Змейками были Трёхглазый Мальчик и 3д-Пакман
    до седьмого уровня не доходил, хз. хотя игра очень нравилась

  30. Spectral
    Posted 02/04/2013 at 16:43 | Permalink

    Скачал ром с сайта http://cah4e3.shedevr.org.ru вот в этом архиве 7-in-1 [p1][U][!], но…не один эмулятор его не берёт. Чем открывали?

Прокомментировать

Required fields are marked *

*
*

%d такие блоггеры, как: