--- xmil/z80x/z80x_sb.x86 2004/08/01 05:31:32 1.1 +++ xmil/z80x/z80x_sb.x86 2004/08/14 12:16:18 1.3 @@ -15,6 +15,9 @@ section .text extern @iocore_out@8 extern @iocore_inp@4 extern _ZSPtable + extern memfetch + extern _cycles_main + extern opcode_main align 16 @@ -31,12 +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: and byte [edi + R_Z80IFF], ~(1 << IFF_IRQ) - MRET +_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 + 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: MRET align 16 adc_hl_bc: ADCR16 R_Z80BC