Это настолько банально, что даже оказалось неинтересно. Очередная причина бешенства и самоубийств среди школьников: пиратский FrankenStein. Опознать поцЫента можно по отсутствующей букве «N» в текстах по всей игре и искореженному логотипу «BANDAI».
Проблема, собственно, проста. Во втором уровне, при попытке прыгнуть на «островок», игра намертво зависала. Вот это место:
Дойти до него — не такая тривиальня задача, даже с читами. Насколько это было обидно, когда после всех мучений наступал неминуемый конец по независящим ни от кого причинам. Смех в том, что тут действительно причины фактически ни от кого не зависели. Все дело в банальном сбое в дампе, снятом с оригинального картриджа. По каким-то причинам в дампе изменилось всего три бита, причем практически на одной и той же комбинации младших битов адреса. Вот они:
$A23C 85 18 STA $18 $A23E 20 B7 81 JSR $C1B7 ; BAD 81 -> 80 $A241 BD 04 06 LDA $604,X ... $B13E 29 0F AND #$F $B140 C9 01 CMP #1 ; BAD C9 -> C8 (INX) $B142 F0 11 BEQ $B155 ... $B73E 30 04 BMI $B744 $B740 A9 FF LDA #$FF ; BAD A9 -> A8 (INY) $B742 D0 02 BNE $B746
В трех байтах пропал самый младший бит. Просто банально не считался. Все три бита попадают в область исполняемого кода, все три теоретически могли бы стать причиной сбоя, так как два из трех получившихся после сбоя опкодов имеют длину в 1 байт, вместо 2, а в одном опкоде изменился адрес перехода на подпрограмму. По стечению обстоятельств, он и стал причиной сбоя. Опкод находится в функции обработки приземления на «островок» и вызывает переход на BAD опкод, соответственно срабатывание IRQ прерывания и выход в бесконечный цикл системных прерываний по сбою.
6 Comments
Да, помнится бывало обидно застревать на этом месте, приходилось вводить код от последней стадии и пытаться пройти так 😦
Кстати, Санчез, а не расскажешь ли ты нам, почему игра karateka напрочь убивает игрока в доме с решёткой? 🙂 Или кто-то всё-таки смог пройти дальше.
А на эмуляторе пробовал?
Я пробовал — 1 раз каким-то чудом удалось решётку пробежать, но меня убил стражник за ней…
Will you dump more PIRATE CONTRA GAMES.
Ну вот, всего через 13 лет после попыток пройти это место, я наконец-то понял что сделал все возможное :).
Теперь моя геймерская душа спокойна!
Лежит у меня такой картридж. Ох и намучался я в детстве с ним! Понятно, что на втором уровне зависал, так еще нужно было долго шаманить, чтобы его запустить. Он зависал в самом начале — на заставке с надписью Франкенштейн. Потом он вообще перестал что-либо показывать.
И на нем, кстати, не было логотипа Бандаи, а буквы отображались нормально, пропусков не было.