Przepraszam za brak wyjaśnień (późna pora), ale jest dokładnie tak jak pisali przedmówcy. Chodzi o to, że rejestr IY jest przez ROM wykorzystywany jako wektor po zmienne systemowe.
Z ROM Dissasembly:
LD IY,+5C3A IY holds +ERR-NR always.
I trzeba się przerzucić na IM2 lub kod z wykorzystaniem IY robić z wyłączonymi przerwaniami zabezpieczając ten rejestr na stosie w czasie działających przerwań.
Problem wyniknął podczas zabawy z SDCC, program mi przestawał rysować po naciśnięciu spacji. Okazało się, że zmienia mi się wartość zmiennej, do której skompilowany kod dobierał się przez IY. Na szczęście twórcy SDCC przewidzieli problemy z ROMami i wystarczy dodać parametr
--reserve-regs-iy aby pozbyć się IY z kompilatu.