Еще лучше заклинить влево (в DD51-DD53 - нули). При падении каждого персонажа короткий звук-трель. После первой же трели за обработчиком прерывания появляется какой-то мусор. После второй он уже в обработчике.
Собственно порчу наводит процедура вывода атрибутов с D811. Но она не виновата, рассчитанные базовые адреса она восемь раз берет со стека. Уже после падения первого персонажа шесть адресов правильные, а два - нет.
Ну конечно, прерывание по-умолчанию считает, что на стеке есть хотя бы четыре байта, и сразу, например, сохраняет AF. Ну да, и аппаратно адрес возврата два байта займет сразу. В то же время стек с разрешенными прерываниями используется как источник адресов при массированной выгрузке в память атрибутов...
[свернуть]