Pues no soy el más apropiado para contestarte (porque, como sabes, no tengo mucha idea de asm...) pero... yo juraría que el z80 inactiva las interrupciones cada vez que genera una... para evitar precisamente eso que cuentas.
Es por eso por lo que el código al que se llama ha de retornar con RETI / RETN , que se supone, es una especie de EI + RET en una sola instrucción.
Si miras el código de la interrupción IM1 en la ROM del Speccy, ves...
Código: Seleccionar todo
0038 MASK_INT:
PUSH AF
PUSH HL
LD HL, (FRAMES)
INC HL
LD (FRAMES), HL
LD A, H
OR L
JR NZ_KEY_INT
INC (IY+64)
0048 KEY_INT:
PUSH BC
PUSH DE
CALL KEYBOARD
POP DE
POP BC
POP HL
POP AF
EI
RET
Que, por cierto, acaba con EI + RET en lugar de RETI, que sería lo suyo, pero que así se ve más claramente aún...
Si en la práctica no te funciona así... siempre puedes poner un DI como primera instrucción en la interrupción
