--- xmil/z80x/z80x_sb.x86 2004/08/11 12:08:17 1.2 +++ xmil/z80x/z80x_sb.x86 2004/08/14 12:16:18 1.3 @@ -34,23 +34,24 @@ im_2: mov byte [edi + R_Z80IM], 2 align 16 -_retn: and byte [edi + R_Z80IFF], ~((1 << IFF_NMI) | (1 << IFF_IRQ)) +_retn: and byte [edi + R_Z80IFF], ~(1 << IFF_NMI) MRET align 16 -_reti: mov dl, [edi + R_Z80IFF] - test dl, ((1 << IFF_IFLAG) | (1 << IFF_NMI)) +_reti: mov eax, [edi + R_Z80IRQ] + lea edx, [eax - 1] + and eax, edx + test byte [edi + R_Z80IFF], ((1 << IFF_IFLAG) | (1 << IFF_NMI)) + mov [edi + R_Z80IRQ], eax jne short .mn - cmp dword [edi + z80core_t.reqirq], byte 0 + cmp dword [edi + R_Z80REQIRQ], byte 0 je short .mn mov eax, [edi + z80core_t.remainclock] cmp eax, byte 0 jle short .mn sub [edi + z80core_t.remainclock], eax sub [edi + z80core_t.baseclock], eax -.mn: and dl, ~(1 << IFF_IRQ) - mov [edi + R_Z80IFF], dl - MRET +.mn: MRET align 16 adc_hl_bc: ADCR16 R_Z80BC