z80, fix for cz80 handling of A register

This commit is contained in:
kub 2021-10-25 19:22:51 +02:00
parent cbc2ca037a
commit 0be9a92e77
4 changed files with 40 additions and 27 deletions

View file

@ -196,7 +196,7 @@ void Cz80_Init(cz80_struc *CPU)
CPU->pzR16[0] = pzBC; CPU->pzR16[0] = pzBC;
CPU->pzR16[1] = pzDE; CPU->pzR16[1] = pzDE;
CPU->pzR16[2] = pzHL; CPU->pzR16[2] = pzHL;
CPU->pzR16[3] = pzAF; CPU->pzR16[3] = pzFA;
zIX = zIY = 0xffff; zIX = zIY = 0xffff;
@ -339,13 +339,13 @@ UINT32 Cz80_Get_Reg(cz80_struc *CPU, INT32 regnum)
{ {
case CZ80_PC: return (CPU->PC - CPU->BasePC); case CZ80_PC: return (CPU->PC - CPU->BasePC);
case CZ80_SP: return zSP; case CZ80_SP: return zSP;
case CZ80_AF: return zAF; case CZ80_FA: return zFA;
case CZ80_BC: return zBC; case CZ80_BC: return zBC;
case CZ80_DE: return zDE; case CZ80_DE: return zDE;
case CZ80_HL: return zHL; case CZ80_HL: return zHL;
case CZ80_IX: return zIX; case CZ80_IX: return zIX;
case CZ80_IY: return zIY; case CZ80_IY: return zIY;
case CZ80_AF2: return zAF2; case CZ80_FA2: return zFA2;
case CZ80_BC2: return zBC2; case CZ80_BC2: return zBC2;
case CZ80_DE2: return zDE2; case CZ80_DE2: return zDE2;
case CZ80_HL2: return zHL2; case CZ80_HL2: return zHL2;
@ -378,13 +378,13 @@ void Cz80_Set_Reg(cz80_struc *CPU, INT32 regnum, UINT32 val)
break; break;
case CZ80_SP: zSP = val; break; case CZ80_SP: zSP = val; break;
case CZ80_AF: zAF = val; break; case CZ80_FA: zFA = val; break;
case CZ80_BC: zBC = val; break; case CZ80_BC: zBC = val; break;
case CZ80_DE: zDE = val; break; case CZ80_DE: zDE = val; break;
case CZ80_HL: zHL = val; break; case CZ80_HL: zHL = val; break;
case CZ80_IX: zIX = val; break; case CZ80_IX: zIX = val; break;
case CZ80_IY: zIY = val; break; case CZ80_IY: zIY = val; break;
case CZ80_AF2: zAF2 = val; break; case CZ80_FA2: zFA2 = val; break;
case CZ80_BC2: zBC2 = val; break; case CZ80_BC2: zBC2 = val; break;
case CZ80_DE2: zDE2 = val; break; case CZ80_DE2: zDE2 = val; break;
case CZ80_HL2: zHL2 = val; break; case CZ80_HL2: zHL2 = val; break;

View file

@ -79,12 +79,12 @@ extern "C" {
#define zR8(A) (*CPU->pzR8[A]) #define zR8(A) (*CPU->pzR8[A])
#define zR16(A) (CPU->pzR16[A]->W) #define zR16(A) (CPU->pzR16[A]->W)
#define pzAF &(CPU->AF) #define pzFA &(CPU->FA)
#define zAF CPU->AF.W #define zFA CPU->FA.W
#define zlAF CPU->AF.B.L #define zlFA CPU->FA.B.L
#define zhAF CPU->AF.B.H #define zhFA CPU->FA.B.H
#define zA zhAF #define zA zlFA
#define zF zlAF #define zF zhFA
#define pzBC &(CPU->BC) #define pzBC &(CPU->BC)
#define zBC CPU->BC.W #define zBC CPU->BC.W
@ -107,11 +107,11 @@ extern "C" {
#define zH zhHL #define zH zhHL
#define zL zlHL #define zL zlHL
#define zAF2 CPU->AF2.W #define zFA2 CPU->FA2.W
#define zlAF2 CPU->AF2.B.L #define zlFA2 CPU->FA2.B.L
#define zhAF2 CPU->AF2.B.H #define zhFA2 CPU->FA2.B.H
#define zA2 zhAF2 #define zA2 zhFA2
#define zF2 zlAF2 #define zF2 zlFA2
#define zBC2 CPU->BC2.W #define zBC2 CPU->BC2.W
#define zDE2 CPU->DE2.W #define zDE2 CPU->DE2.W
@ -187,13 +187,13 @@ enum
{ {
CZ80_PC = 1, CZ80_PC = 1,
CZ80_SP, CZ80_SP,
CZ80_AF, CZ80_FA,
CZ80_BC, CZ80_BC,
CZ80_DE, CZ80_DE,
CZ80_HL, CZ80_HL,
CZ80_IX, CZ80_IX,
CZ80_IY, CZ80_IY,
CZ80_AF2, CZ80_FA2,
CZ80_BC2, CZ80_BC2,
CZ80_DE2, CZ80_DE2,
CZ80_HL2, CZ80_HL2,
@ -232,7 +232,7 @@ typedef struct cz80_t
union16 BC; union16 BC;
union16 DE; union16 DE;
union16 HL; union16 HL;
union16 AF; union16 FA;
}; };
}; };
@ -244,7 +244,7 @@ typedef struct cz80_t
union16 BC2; union16 BC2;
union16 DE2; union16 DE2;
union16 HL2; union16 HL2;
union16 AF2; union16 FA2;
union16 R; union16 R;
union16 IFF; union16 IFF;

View file

@ -200,9 +200,15 @@ OP_LD_mNN_xx:
POP POP
-----------------------------------------*/ -----------------------------------------*/
OP(0xf1): // POP AF
OP_POP_AF:
POP_16(res)
zA = res >> 8;
zF = res & 0xFF;
RET(10)
OP(0xc1): // POP BC OP(0xc1): // POP BC
OP(0xd1): // POP DE OP(0xd1): // POP DE
OP(0xf1): // POP AF
OP_POP_RR: OP_POP_RR:
data = CPU->pzR16[(Opcode >> 4) & 3]; data = CPU->pzR16[(Opcode >> 4) & 3];
@ -215,9 +221,14 @@ OP_POP:
PUSH PUSH
-----------------------------------------*/ -----------------------------------------*/
OP(0xf5): // PUSH AF
OP_PUSH_AF:
PUSH_16((zA << 8) | zF);
RET(11)
OP(0xc5): // PUSH BC OP(0xc5): // PUSH BC
OP(0xd5): // PUSH DE OP(0xd5): // PUSH DE
OP(0xf5): // PUSH AF
OP_PUSH_RR: OP_PUSH_RR:
data = CPU->pzR16[(Opcode >> 4) & 3]; data = CPU->pzR16[(Opcode >> 4) & 3];
@ -232,9 +243,9 @@ OP_PUSH:
OP(0x08): // EX AF,AF' OP(0x08): // EX AF,AF'
OP_EX_AF_AF2: OP_EX_AF_AF2:
res = zAF; res = zFA;
zAF = zAF2; zFA = zFA2;
zAF2 = res; zFA2 = res;
RET(4) RET(4)
OP(0xeb): // EX DE,HL OP(0xeb): // EX DE,HL

View file

@ -194,8 +194,9 @@ switch (Opcode)
OPXY(0xc1): // POP BC OPXY(0xc1): // POP BC
OPXY(0xd1): // POP DE OPXY(0xd1): // POP DE
OPXY(0xf1): // POP AF
goto OP_POP_RR; goto OP_POP_RR;
OPXY(0xf1): // POP AF
goto OP_POP_AF;
OPXY(0xe1): // POP IX OPXY(0xe1): // POP IX
goto OP_POP; goto OP_POP;
@ -206,8 +207,9 @@ switch (Opcode)
OPXY(0xc5): // PUSH BC OPXY(0xc5): // PUSH BC
OPXY(0xd5): // PUSH DE OPXY(0xd5): // PUSH DE
OPXY(0xf5): // PUSH AF
goto OP_PUSH_RR; goto OP_PUSH_RR;
OPXY(0xf5): // PUSH AF
goto OP_PUSH_AF;
OPXY(0xe5): // PUSH IX OPXY(0xe5): // PUSH IX
goto OP_PUSH; goto OP_PUSH;