Зачем так усложнять? Найти код взаимодействий игроков. И там по ситуации смотреть, и не факт что даже цикл, ведь всего 2 игрока. Может просто функция быть, где X(attacker) и Y(target) номера слотов. И вначале она запускается как x=0/y=1, а потом x=1/y=0. Может быть даже 2 функции вообще подряд: JSR check_p1_vs_p2; JSR check_p2_vs_p1;.
Суть в том, чтобы сделать чтобы порядок чередовался, для этого достаточно любого счетчика кадрового или игрового если есть, точно также как и делают со спрайтами в играх, чередуя в каждом кадре их, чтобы отобразить больше, хоть и мерцанием.
LDA Frame_counter
AND #1
BEQ varian1
JSR check_2_vs_1
JSR check_1_vs_2
JMP next_code
varian1:
JSR check_1_vs_2
JSR check_2_vs_1
next_code:
....
Ну видимо там именно цикл, потому что кроме перебива ударов есть и другие глюки в пользу p2, например на p2 хитбоксы почему-то меньше, чем на p1. Причина этого мне не понятна, т.к. числовое значение для границ хитбоксов в РОМе и при расчётах в RAM одинаково, а на деле хитбоксы на p1 больше, чем на p2. Я даже видео сделал по этому поводу:
Ну, или просто скриншотик)

Короче, глючья в пользу этого p2 там навалом, и подозреваю, что оно идёт из одного и того же источника, и связано именно с "приоритетом в цикле".
Скажи, а можно сделать так, чтобы перебивал тот игрок, кто раньше кнопку нажал, вплоть до тысячных/миллионных долей секунды? Или НЕС такие трюки не позволяет?
Какая-то теория по этому вопросу есть тут -
http://wiki.nesdev.com/w/index.php/Clock_rate , но там всё не на русском, поэтому не очень понятно.