--- xmil/z80c/z80c.c 2004/08/11 16:09:04 1.6 +++ xmil/z80c/z80c.c 2005/02/04 06:42:14 1.9 @@ -17,11 +17,12 @@ Z80CORE z80core; + UINT8 mainmem[0x10000]; - UINT8 ZSPtable[256]; - UINT8 z80inc_flag[256]; - UINT8 z80dec_flag[256]; + UINT8 z80inc_flag2[256]; + UINT8 z80dec_flag2[256]; UINT8 z80szc_flag[512]; + UINT8 z80szp_flag[256]; const UINT8 cycles_main[256] = { 4,10, 7, 6, 4, 4, 7, 4, 4,11, 7, 6, 4, 4, 7, 4, @@ -98,38 +99,30 @@ void CPUCALL z80c_initialize(void) { } } - ZSPtable[i] = (UINT8)f; + z80szp_flag[i] = (UINT8)f; - z80inc_flag[i] = (UINT8)(f & (~V_FLAG)); + z80inc_flag2[(i - 1) & 0xff] = (UINT8)(f & (~V_FLAG)); if (!(i & 0x0f)) { - z80inc_flag[i] |= H_FLAG; + z80inc_flag2[(i - 1) & 0xff] |= H_FLAG; } - z80dec_flag[i] = (UINT8)(f & (~V_FLAG)) | N_FLAG; + z80dec_flag2[(i + 1) & 0xff] = (UINT8)(f & (~V_FLAG)) | N_FLAG; if ((i & 0x0f) == 0x0f) { - z80dec_flag[i] |= H_FLAG; + z80dec_flag2[(i + 1) & 0xff] |= H_FLAG; } z80szc_flag[i] = (UINT8)(f & (~V_FLAG)); z80szc_flag[i+256] = (UINT8)(f & (~V_FLAG)) | C_FLAG; } - z80inc_flag[0x80] |= V_FLAG; - z80dec_flag[0x7f] |= V_FLAG; + z80inc_flag2[0x80 - 1] |= V_FLAG; + z80dec_flag2[0x7f + 1] |= V_FLAG; } void CPUCALL z80c_reset(void) { - z80c_initialize(); - ZeroMemory(&z80core.s, sizeof(z80core.s)); R_Z80R = rand_get(); } -REG8 CPUCALL z80c_ableinterrupt(void) { - - return((Z80_IFF & ((1 << IFF_IFLAG) | (1 << IFF_IRQ) | (1 << IFF_NMI))) - ?0:1); -} - void CPUCALL z80c_interrupt(REG8 vect) { REG16 pc; @@ -138,7 +131,7 @@ void CPUCALL z80c_interrupt(REG8 vect) { Z80_IFF ^= (1 << IFF_HALT); R_Z80PC++; } - Z80_IFF |= (1 << IFF_IRQ) | (1 << IFF_IFLAG); + Z80_IFF |= (1 << IFF_IFLAG); switch(R_Z80IM) { case 0: if ((vect != 0xdd) && (vect != 0xed) && (vect != 0xfd)) { @@ -181,7 +174,12 @@ void CPUCALL z80c_execute(void) { UINT op; - if (!dma.working) { +#if !defined(DMAS_STOIC) + if (!dma.working) +#else + if (!(dma.flag & DMAF_WORKING)) +#endif + { do { R_Z80R++; GET_PC_BYTE(op);