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

Это настолько банально, что даже оказалось неинтересно. Очередная причина бешенства и самоубийств среди школьников: пиратский 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 прерывания и выход в бесконечный цикл системных прерываний по сбою.

Advertisements

6 Comments

  1. Exerion
    Posted 06/01/2010 at 22:12 | Permalink

    Да, помнится бывало обидно застревать на этом месте, приходилось вводить код от последней стадии и пытаться пройти так 😦

    Кстати, Санчез, а не расскажешь ли ты нам, почему игра karateka напрочь убивает игрока в доме с решёткой? 🙂 Или кто-то всё-таки смог пройти дальше.

  2. cah4e3
    Posted 06/05/2010 at 03:08 | Permalink

    А на эмуляторе пробовал?

  3. Guyver
    Posted 06/14/2010 at 20:21 | Permalink

    Я пробовал — 1 раз каким-то чудом удалось решётку пробежать, но меня убил стражник за ней…

  4. Posted 06/20/2010 at 01:14 | Permalink

    Will you dump more PIRATE CONTRA GAMES.

  5. Posted 10/20/2010 at 17:05 | Permalink

    Ну вот, всего через 13 лет после попыток пройти это место, я наконец-то понял что сделал все возможное :).

    Теперь моя геймерская душа спокойна!

  6. ben_hog
    Posted 01/22/2011 at 21:37 | Permalink

    Лежит у меня такой картридж. Ох и намучался я в детстве с ним! Понятно, что на втором уровне зависал, так еще нужно было долго шаманить, чтобы его запустить. Он зависал в самом начале — на заставке с надписью Франкенштейн. Потом он вообще перестал что-либо показывать.
    И на нем, кстати, не было логотипа Бандаи, а буквы отображались нормально, пропусков не было.

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

Required fields are marked *

*
*

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