mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-07 16:18:04 -04:00
core, fix z80 irq handling, reset defaults (cz80, drz80)
This commit is contained in:
parent
bfe516c3a9
commit
ad43165afc
6 changed files with 35 additions and 40 deletions
|
@ -212,6 +212,8 @@ void Cz80_Reset(cz80_struc *CPU)
|
|||
{
|
||||
// I, R, CPU and interrupts logic is reset, registers are untouched
|
||||
memset(&CPU->R, 0, (FPTR)&CPU->BasePC - (FPTR)&CPU->R);
|
||||
Cz80_Set_Reg(CPU, CZ80_FA, 0xffff);
|
||||
Cz80_Set_Reg(CPU, CZ80_SP, 0xffff);
|
||||
Cz80_Set_Reg(CPU, CZ80_PC, 0);
|
||||
}
|
||||
|
||||
|
|
|
@ -711,15 +711,6 @@ OP_EI:
|
|||
USE_CYCLES(4)
|
||||
if (!zIFF1)
|
||||
{
|
||||
zIFF1 = zIFF2 = (1 << 2);
|
||||
while (GET_OP() == 0xfb)
|
||||
{
|
||||
USE_CYCLES(4)
|
||||
PC++;
|
||||
#if CZ80_EMULATE_R_EXACTLY
|
||||
zR++;
|
||||
#endif
|
||||
}
|
||||
if (CPU->IRQState)
|
||||
{
|
||||
CPU->Status |= CZ80_HAS_INT;
|
||||
|
@ -727,7 +718,7 @@ OP_EI:
|
|||
CPU->ICount = 0;
|
||||
}
|
||||
}
|
||||
else zIFF2 = (1 << 2);
|
||||
zIFF1 = zIFF2 = (1 << 2);
|
||||
goto Cz80_Exec_nocheck;
|
||||
|
||||
/*-----------------------------------------
|
||||
|
|
|
@ -407,29 +407,14 @@ OP_SBC16:
|
|||
RET(8)
|
||||
|
||||
/*-----------------------------------------
|
||||
RETN
|
||||
RETI/RETN
|
||||
-----------------------------------------*/
|
||||
|
||||
OPED(0x45): // RETN;
|
||||
OPED(0x55): // RETN;
|
||||
OPED(0x65): // RETN;
|
||||
OPED(0x75): // RETN;
|
||||
POP_16(res);
|
||||
SET_PC(res);
|
||||
if (!zIFF1 && zIFF2)
|
||||
{
|
||||
zIFF1 = (1 << 2);
|
||||
if (CPU->IRQState)
|
||||
{
|
||||
CPU->Status |= CZ80_HAS_INT;
|
||||
}
|
||||
}
|
||||
else zIFF1 = zIFF2;
|
||||
RET(10)
|
||||
|
||||
/*-----------------------------------------
|
||||
RETI
|
||||
-----------------------------------------*/
|
||||
// works the same, but Z80 PIO can detect the opcode
|
||||
OPED(0x45): // RETN
|
||||
OPED(0x55): // RETN
|
||||
OPED(0x65): // RETN
|
||||
OPED(0x75): // RETN
|
||||
|
||||
OPED(0x4d): // RETI
|
||||
OPED(0x5d): // RETI
|
||||
|
@ -437,6 +422,14 @@ OP_SBC16:
|
|||
OPED(0x7d): // RETI
|
||||
POP_16(res);
|
||||
SET_PC(res);
|
||||
if (!zIFF1 && zIFF2)
|
||||
{
|
||||
if (CPU->IRQState)
|
||||
{
|
||||
CPU->Status |= CZ80_HAS_INT;
|
||||
}
|
||||
}
|
||||
zIFF1 = zIFF2;
|
||||
RET(10)
|
||||
|
||||
/*-----------------------------------------
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue