Поковырялся в эмуляторе, выяснил следующее:
На 9 строке маппер переключается на screen 1 для отрисовки верхнего статусбара, после чего проц крутится 6B=107 циклов для задержки, которая кончается на 14 строке;
Затем выполняется прочая логика, которая заканчивается на 21-22 строке;
Затем проц ждет Sprite 0 Hit в цикле для определения времени окончания отрисовки статусбара, и в норме выходит из него на 30 строке. В случае же зависания Sprite 0 Hit не случается и выход из цикла не произойдет никогда.
В японке задержка также раван 6B, однако Sprite 0 Hit происходит на 31 строке, по этому есть фора на 1 строку, что видимо дает хороший запас по времени, американка же зависает даже если счетчик уменьшить на 1, т.е. укладывается впритык.
И на первый взгляд вроде бы все должно работать нормально - ожидание Sprite 0 Hit длиться 9 строк, и непонятно из-за чего происходит сбой. Есть какие-то идеи?