Хм, нашел место, которое выполняется некорректно - сверял с эмулятором на том же ROM'е.
Исполняемый код:
Код:
seg005:F3F2 sub_F3F2:
seg005:F3F2 push bc
seg005:F3F3 push hl
seg005:F3F4 inir
seg005:F3F6 pop hl
seg005:F3F7 pop bc
Данный сегмент зануляет один столбец экрана и вызывается в цикле до конца экрана.
Команда INIR - читает из порта (C) и пишет в (HL), при этом увеличивая HL и уменьшая B, пока B не станет равен 0.
При выполнении этого кода "в железе"наблюдается отсутствие приращения для регистра HL - картинка с ЛА по ссылке
Буду копать причины такого поведения - до этого момента всё выполнялось вполне нормально.
Самый первый столбец обнуляется совсем другим кодом:
Код:
seg007:F448 sub_F448: ; CODE XREF: seg007:loc_F42Fp
seg007:F448 ; seg007:F438p
seg007:F448 push bc
seg007:F449 push hl
seg007:F44A ld d, a
seg007:F44B cpl
seg007:F44C ld e, a
seg007:F44D
seg007:F44D loc_F44D: ; CODE XREF: sub_F448+9j
seg007:F44D call sub_F3C0
seg007:F450 inc l
seg007:F451 djnz loc_F44D
seg007:F453 pop hl
seg007:F454 pop bc
seg007:F455 inc h
seg007:F456 dec c
seg007:F457 ret
seg004:F3C0 sub_F3C0: ; CODE XREF: sub_382E+1Ep
seg004:F3C0 ; sub_F448:loc_F44Dp
seg004:F3C0 ld a, (iy+0)
seg004:F3C3 and d
seg004:F3C4 ld c, a
seg004:F3C5 ld a, (hl)
seg004:F3C6 and e
seg004:F3C7 or c
seg004:F3C8 ld (hl), a
seg004:F3C9 ret
seg004:F3C9 ; End of function sub_F3C0
Сделано не самым оптимальным кодом, но авторам, видимо, было виднее...
PS: Очень бесит, что по одним и тем же адресам в памяти пишутся разные подпрограммы. Раз - одна записана, через пару вызовов - уже другая и с другим стартовым адресомМоя не понимать, зачем так писалось...
Завтра попробую понять причину некорректности обнуления памяти - из-за этого в дальнейшем каша на экране. А возможно и отсутствие символов связано с этим...