summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan C <ianc@noddybox.co.uk>2021-08-03 21:43:06 +0000
committerIan C <ianc@noddybox.co.uk>2021-08-03 21:43:06 +0000
commit0d08766ccc80cacfe0690cb8a1ea8f13038e404b (patch)
tree15eb862285cf96fef26b8fffb31dc60cd233a51c
parentb7e8b634595445325d10f8fcddcb7d6cdaa8a922 (diff)
Sped up Z80 emulation
-rw-r--r--include/spec.h4
-rw-r--r--include/z80.h26
-rw-r--r--include/z80_config.h9
-rw-r--r--include/z80_private.h20
-rw-r--r--source/main.c6
-rw-r--r--source/spec.c45
-rw-r--r--source/z80_decode.c535
7 files changed, 311 insertions, 334 deletions
diff --git a/include/spec.h b/include/spec.h
index 85fb5e7..8171a4f 100644
--- a/include/spec.h
+++ b/include/spec.h
@@ -67,13 +67,9 @@ void SPECReconfigure(void);
/* Interfaces for the Z80
*/
-Z80Byte SPECReadMem(Z80 *z80, Z80Word addr);
-void SPECWriteMem(Z80 *z80, Z80Word addr, Z80Byte val);
Z80Byte SPECReadPort(Z80 *z80, Z80Word port);
void SPECWritePort(Z80 *z80, Z80Word port, Z80Byte val);
-#define SPECReadDisassem SPECReadMem
-
/* Interface for snap
*/
void SPECWriteMemSNAP(Z80Word addr, Z80Byte val);
diff --git a/include/z80.h b/include/z80.h
index ab095d8..c9bd107 100644
--- a/include/z80.h
+++ b/include/z80.h
@@ -56,20 +56,30 @@ typedef signed char Z80Relative;
typedef unsigned short Z80Word;
-/* A Z80 16-bit register. To access the HI/LO component use the indexes
- Z80_HI_WORD and Z80_LO_WORD which will be initialised once Z80Init has been
- called.
+/* A Z80 16-bit register made up of 2 8-bit registers.
*/
+#ifdef Z80_LITTLE_ENDIAN
+typedef struct
+{
+ Z80Byte lo;
+ Z80Byte hi;
+} Z80RegPair;
+#endif
+
+#ifdef Z80_BIG_ENDIAN
+typedef struct
+{
+ Z80Byte hi;
+ Z80Byte lo;
+} Z80RegPair;
+#endif
+
typedef union
{
Z80Word w;
- Z80Byte b[2];
+ Z80RegPair b;
} Z80Reg;
-extern int Z80_HI_WORD;
-extern int Z80_LO_WORD;
-
-
/* The processor
*/
struct Z80Private;
diff --git a/include/z80_config.h b/include/z80_config.h
index 8d9ee79..2a56cb1 100644
--- a/include/z80_config.h
+++ b/include/z80_config.h
@@ -36,6 +36,11 @@
*/
#define ENABLE_DISASSEM
+/* Pick one of these as appropriate for your real CPU
+#define Z80_BIG_ENDIAN
+*/
+#define Z80_LITTLE_ENDIAN
+
/* Define this to enable the array-based memory model. In this mode
an externally visible Z80Byte array called Z80_MEMORY must be
@@ -44,11 +49,11 @@
In this mode the signature of Z80Init changes so that the memory functions
are not passed. ALL processor instances share the same memory.
-#define ENABLE_ARRAY_MEMORY
*/
+#define ENABLE_ARRAY_MEMORY
#ifdef ENABLE_ARRAY_MEMORY
-#define RAMBOT 0x0000
+#define RAMBOT 0x4000
#define RAMTOP 0xffff
#endif
diff --git a/include/z80_private.h b/include/z80_private.h
index e0b3381..a7022d8 100644
--- a/include/z80_private.h
+++ b/include/z80_private.h
@@ -121,13 +121,15 @@ extern Z80Byte Z80_MEMORY[];
#define SET(v,b) (v)|=b
#define CLR(v,b) (v)&=~(b)
-#define SETFLAG(f) SET(cpu->AF.b[LO],f)
-#define CLRFLAG(f) CLR(cpu->AF.b[LO],f)
+#define SETFLAG(f) SET(cpu->AF.b.lo,f)
+#define CLRFLAG(f) CLR(cpu->AF.b.lo,f)
#ifdef ENABLE_ARRAY_MEMORY
#define PEEK(addr) Z80_MEMORY[addr]
+/* This can't be a macro as the macro is used as PEEKW(FETCH_WORD)
+*/
static inline Z80Word PEEKW(Z80Word addr)
{
return (PEEK(addr) | (Z80Word)PEEK(addr+1)<<8);
@@ -168,12 +170,12 @@ static inline Z80Word PEEKW(Z80Word addr)
#endif
-#define IS_C (cpu->AF.b[LO]&C_Z80)
-#define IS_N (cpu->AF.b[LO]&N_Z80)
-#define IS_P (cpu->AF.b[LO]&P_Z80)
-#define IS_H (cpu->AF.b[LO]&H_Z80)
-#define IS_Z (cpu->AF.b[LO]&Z_Z80)
-#define IS_S (cpu->AF.b[LO]&S_Z80)
+#define IS_C (cpu->AF.b.lo&C_Z80)
+#define IS_N (cpu->AF.b.lo&N_Z80)
+#define IS_P (cpu->AF.b.lo&P_Z80)
+#define IS_H (cpu->AF.b.lo&H_Z80)
+#define IS_Z (cpu->AF.b.lo&Z_Z80)
+#define IS_S (cpu->AF.b.lo&S_Z80)
#define CARRY IS_C
@@ -219,7 +221,7 @@ static inline Z80Word PEEKW(Z80Word addr)
cpu->SP+=2; \
} while(0)
-#define SETHIDDEN(res) cpu->AF.b[LO]=(cpu->AF.b[LO]&~(B3_Z80|B5_Z80))|\
+#define SETHIDDEN(res) cpu->AF.b.lo=(cpu->AF.b.lo&~(B3_Z80|B5_Z80))|\
((res)&(B3_Z80|B5_Z80))
#define CALL do \
diff --git a/source/main.c b/source/main.c
index b7d3318..d78a910 100644
--- a/source/main.c
+++ b/source/main.c
@@ -248,11 +248,7 @@ int main(int argc, char *argv[])
FB_Init();
- z80 = Z80Init(SPECReadMem,
- SPECWriteMem,
- SPECReadPort,
- SPECWritePort,
- SPECReadDisassem);
+ z80 = Z80Init(SPECReadPort, SPECWritePort);
if (!z80)
{
diff --git a/source/spec.c b/source/spec.c
index ef132d4..1a5eba2 100644
--- a/source/spec.c
+++ b/source/spec.c
@@ -78,9 +78,9 @@
#define OFF_X ((GFX_W-SCR_W)/2)
#define OFF_Y ((GFX_H-SCR_H)/2)
-#define ATTR_AT(x,y) mem[ATTR+(x)+((y)/8)*32]
+#define ATTR_AT(x,y) Z80_MEMORY[ATTR+(x)+((y)/8)*32]
-Z80Byte mem[0x10000];
+Z80Byte Z80_MEMORY[0x10000];
static int border;
static int scanline;
@@ -189,12 +189,12 @@ static void RomPatch(void)
for(f=0;save[f]!=0xff;f++)
{
- mem[ROM_SAVE+f]=save[f];
+ Z80_MEMORY[ROM_SAVE+f]=save[f];
}
for(f=0;load[f]!=0xff;f++)
{
- mem[ROM_LOAD+f]=load[f];
+ Z80_MEMORY[ROM_LOAD+f]=load[f];
}
}
@@ -337,21 +337,21 @@ static int EDCallback(Z80 *z80, Z80Val data)
switch((Z80Byte)data)
{
case ED_SAVE:
- z80->AF.b[Z80_LO_WORD] &= ~eZ80_Carry;
+ z80->AF.b.lo &= ~eZ80_Carry;
break;
case ED_LOAD:
- if (TAPLoad(z80->AF.b[Z80_HI_WORD],
+ if (TAPLoad(z80->AF.b.hi,
&z80->IX.w,
&z80->DE.w,
SPECWriteMemSNAP))
{
- z80->AF.b[Z80_LO_WORD] |= eZ80_Carry;
+ z80->AF.b.lo |= eZ80_Carry;
z80->BC.w=0xb001;
}
else
{
- z80->AF.b[Z80_LO_WORD] &= ~eZ80_Carry;
+ z80->AF.b.lo &= ~eZ80_Carry;
z80->BC.w = 0xff01;
}
break;
@@ -379,7 +379,7 @@ void SPECInit(Z80 *z80)
/* Load the ROM
*/
- memcpy(mem,spec48_bin,ROMLEN);
+ memcpy(Z80_MEMORY,spec48_bin,ROMLEN);
/* Patch the ROM
*/
@@ -429,26 +429,11 @@ void SPECHandleKey(SoftKey key, int is_pressed)
}
-Z80Byte SPECReadMem(Z80 *z80, Z80Word addr)
-{
- return mem[addr];
-}
-
-
-void SPECWriteMem(Z80 *z80, Z80Word addr, Z80Byte val)
-{
- if (addr>=ROMLEN)
- {
- mem[addr]=val;
- }
-}
-
-
void SPECWriteMemSNAP(Z80Word addr, Z80Byte val)
{
if (addr>=ROMLEN)
{
- mem[addr]=val;
+ Z80_MEMORY[addr]=val;
}
}
@@ -538,7 +523,7 @@ void SPECReset(Z80 *z80)
r=0;
for(f=0;f<SCRL;f++)
{
- line[f]=mem+SCRDATA+(c*8*TXT_W)+(r*TXT_W);
+ line[f]=Z80_MEMORY+SCRDATA+(c*8*TXT_W)+(r*TXT_W);
c++;
@@ -562,9 +547,9 @@ void SPECSaveSnapshot(FILE *fp)
{
int f;
- for(f=0; f<sizeof mem; f++)
+ for(f=0; f<sizeof Z80_MEMORY; f++)
{
- PUT_Byte(fp, mem[f]);
+ PUT_Byte(fp, Z80_MEMORY[f]);
}
for(f=0; f<sizeof matrix; f++)
@@ -580,9 +565,9 @@ void SPECLoadSnapshot(FILE *fp)
{
int f;
- for(f=0; f<sizeof mem; f++)
+ for(f=0; f<sizeof Z80_MEMORY; f++)
{
- mem[f] = GET_Byte(fp);
+ Z80_MEMORY[f] = GET_Byte(fp);
}
for(f=0; f<sizeof matrix; f++)
diff --git a/source/z80_decode.c b/source/z80_decode.c
index 614f384..f5c7352 100644
--- a/source/z80_decode.c
+++ b/source/z80_decode.c
@@ -36,13 +36,6 @@ static Z80Byte Ptable[512];
static Z80Byte Stable[512];
static Z80Byte Ztable[512];
-
-int Z80_HI_WORD;
-int Z80_LO_WORD;
-
-#define HI Z80_HI_WORD
-#define LO Z80_LO_WORD
-
/* ---------------------------------------- MISC FUNCTIONS
*/
void Z80_InitialiseInternals(void)
@@ -54,17 +47,7 @@ void Z80_InitialiseInternals(void)
*/
r.w=0x1234;
- if (r.b[0] == 0x12)
- {
- HI=0;
- LO=1;
- }
- else if (r.b[1] == 0x12)
- {
- HI=1;
- LO=0;
- }
- else
+ if (r.b.hi != 0x12 || r.b.lo != 0x34)
{
exit(1);
}
@@ -150,12 +133,12 @@ do { \
do { \
Z80Byte VAL=ONCE; \
unsigned w; \
- w=cpu->AF.b[HI]+(unsigned)VAL; \
- cpu->AF.b[LO]=SZtable[w]; \
- if ((cpu->AF.b[HI]^w^VAL)&H_Z80) cpu->AF.b[LO]|=H_Z80; \
- if ((VAL^cpu->AF.b[HI]^0x80)&(VAL^w)&0x80) cpu->AF.b[LO]|=P_Z80; \
+ w=cpu->AF.b.hi+(unsigned)VAL; \
+ cpu->AF.b.lo=SZtable[w]; \
+ if ((cpu->AF.b.hi^w^VAL)&H_Z80) cpu->AF.b.lo|=H_Z80; \
+ if ((VAL^cpu->AF.b.hi^0x80)&(VAL^w)&0x80) cpu->AF.b.lo|=P_Z80; \
SETHIDDEN(w); \
- cpu->AF.b[HI]=w; \
+ cpu->AF.b.hi=w; \
} while(0)
@@ -163,12 +146,12 @@ do { \
do { \
Z80Byte VAL=ONCE; \
unsigned w; \
- w=(cpu->AF.b[HI]+(unsigned)VAL+CARRY)&0x1ff; \
- cpu->AF.b[LO]=SZtable[w]; \
- if ((cpu->AF.b[HI]^w^VAL)&H_Z80) cpu->AF.b[LO]|=H_Z80; \
- if ((VAL^cpu->AF.b[HI]^0x80)&(VAL^w)&0x80) cpu->AF.b[LO]|=P_Z80; \
+ w=(cpu->AF.b.hi+(unsigned)VAL+CARRY)&0x1ff; \
+ cpu->AF.b.lo=SZtable[w]; \
+ if ((cpu->AF.b.hi^w^VAL)&H_Z80) cpu->AF.b.lo|=H_Z80; \
+ if ((VAL^cpu->AF.b.hi^0x80)&(VAL^w)&0x80) cpu->AF.b.lo|=P_Z80; \
SETHIDDEN(w); \
- cpu->AF.b[HI]=w; \
+ cpu->AF.b.hi=w; \
} while(0)
@@ -176,12 +159,12 @@ do { \
do { \
Z80Byte VAL=ONCE; \
unsigned w; \
- w=(cpu->AF.b[HI]-(unsigned)VAL)&0x1ff; \
- cpu->AF.b[LO]=SZtable[w]|N_Z80; \
- if ((cpu->AF.b[HI]^w^VAL)&H_Z80) cpu->AF.b[LO]|=H_Z80; \
- if ((VAL^cpu->AF.b[HI])&(cpu->AF.b[HI]^w)&0x80) cpu->AF.b[LO]|=P_Z80; \
+ w=(cpu->AF.b.hi-(unsigned)VAL)&0x1ff; \
+ cpu->AF.b.lo=SZtable[w]|N_Z80; \
+ if ((cpu->AF.b.hi^w^VAL)&H_Z80) cpu->AF.b.lo|=H_Z80; \
+ if ((VAL^cpu->AF.b.hi)&(cpu->AF.b.hi^w)&0x80) cpu->AF.b.lo|=P_Z80; \
SETHIDDEN(w); \
- cpu->AF.b[HI]=w; \
+ cpu->AF.b.hi=w; \
} while(0)
@@ -189,10 +172,10 @@ do { \
do { \
Z80Byte VAL=ONCE; \
unsigned w; \
- w=(cpu->AF.b[HI]-(unsigned)VAL)&0x1ff; \
- cpu->AF.b[LO]=SZtable[w]|N_Z80; \
- if ((cpu->AF.b[HI]^w^VAL)&H_Z80) cpu->AF.b[LO]|=H_Z80; \
- if ((VAL^cpu->AF.b[HI])&(cpu->AF.b[HI]^w)&0x80) cpu->AF.b[LO]|=P_Z80; \
+ w=(cpu->AF.b.hi-(unsigned)VAL)&0x1ff; \
+ cpu->AF.b.lo=SZtable[w]|N_Z80; \
+ if ((cpu->AF.b.hi^w^VAL)&H_Z80) cpu->AF.b.lo|=H_Z80; \
+ if ((VAL^cpu->AF.b.hi)&(cpu->AF.b.hi^w)&0x80) cpu->AF.b.lo|=P_Z80; \
SETHIDDEN(VAL); \
} while(0)
@@ -201,12 +184,12 @@ do { \
do { \
Z80Byte VAL=ONCE; \
unsigned w; \
- w=(cpu->AF.b[HI]-(unsigned)VAL-CARRY)&0x1ff; \
- cpu->AF.b[LO]=SZtable[w]|N_Z80; \
- if ((cpu->AF.b[HI]^w^VAL)&H_Z80) cpu->AF.b[LO]|=H_Z80; \
- if ((VAL^cpu->AF.b[HI])&(cpu->AF.b[HI]^w)&0x80) cpu->AF.b[LO]|=P_Z80; \
+ w=(cpu->AF.b.hi-(unsigned)VAL-CARRY)&0x1ff; \
+ cpu->AF.b.lo=SZtable[w]|N_Z80; \
+ if ((cpu->AF.b.hi^w^VAL)&H_Z80) cpu->AF.b.lo|=H_Z80; \
+ if ((VAL^cpu->AF.b.hi)&(cpu->AF.b.hi^w)&0x80) cpu->AF.b.lo|=P_Z80; \
SETHIDDEN(w); \
- cpu->AF.b[HI]=w; \
+ cpu->AF.b.hi=w; \
} while(0)
@@ -215,9 +198,9 @@ do { \
Z80Word VAL=ONCE; \
Z80Val w; \
w=(REG)+(Z80Val)VAL; \
- cpu->AF.b[LO]&=(S_Z80|Z_Z80|V_Z80); \
- if (w>0xffff) cpu->AF.b[LO]|=C_Z80; \
- if (((REG)^w^VAL)&0x1000) cpu->AF.b[LO]|=H_Z80; \
+ cpu->AF.b.lo&=(S_Z80|Z_Z80|V_Z80); \
+ if (w>0xffff) cpu->AF.b.lo|=C_Z80; \
+ if (((REG)^w^VAL)&0x1000) cpu->AF.b.lo|=H_Z80; \
SETHIDDEN(w>>8); \
(REG)=w; \
} while(0)
@@ -228,12 +211,12 @@ do { \
Z80Word VAL=ONCE; \
Z80Val w; \
w=(REG)+(Z80Val)VAL+CARRY; \
- cpu->AF.b[LO]=0; \
- if ((w&0xffff)==0) cpu->AF.b[LO]=Z_Z80; \
- if (w&0x8000) cpu->AF.b[LO]|=S_Z80; \
- if (w>0xffff) cpu->AF.b[LO]|=C_Z80; \
- if ((VAL^(REG)^0x8000)&((REG)^w)&0x8000) cpu->AF.b[LO]|=P_Z80; \
- if (((REG)^w^VAL)&0x1000) cpu->AF.b[LO]|=H_Z80; \
+ cpu->AF.b.lo=0; \
+ if ((w&0xffff)==0) cpu->AF.b.lo=Z_Z80; \
+ if (w&0x8000) cpu->AF.b.lo|=S_Z80; \
+ if (w>0xffff) cpu->AF.b.lo|=C_Z80; \
+ if ((VAL^(REG)^0x8000)&((REG)^w)&0x8000) cpu->AF.b.lo|=P_Z80; \
+ if (((REG)^w^VAL)&0x1000) cpu->AF.b.lo|=H_Z80; \
SETHIDDEN(w>>8); \
(REG)=w; \
} while(0)
@@ -244,12 +227,12 @@ do { \
Z80Word VAL=ONCE; \
Z80Val w; \
w=(REG)-(Z80Val)VAL-CARRY; \
- cpu->AF.b[LO]=N_Z80; \
- if (w&0x8000) cpu->AF.b[LO]|=S_Z80; \
- if ((w&0xffff)==0) cpu->AF.b[LO]|=Z_Z80; \
- if (w>0xffff) cpu->AF.b[LO]|=C_Z80; \
- if ((VAL^(REG))&((REG)^w)&0x8000) cpu->AF.b[LO]|=P_Z80; \
- if (((REG)^w^VAL)&0x1000) cpu->AF.b[LO]|=H_Z80; \
+ cpu->AF.b.lo=N_Z80; \
+ if (w&0x8000) cpu->AF.b.lo|=S_Z80; \
+ if ((w&0xffff)==0) cpu->AF.b.lo|=Z_Z80; \
+ if (w>0xffff) cpu->AF.b.lo|=C_Z80; \
+ if ((VAL^(REG))&((REG)^w)&0x8000) cpu->AF.b.lo|=P_Z80; \
+ if (((REG)^w^VAL)&0x1000) cpu->AF.b.lo|=H_Z80; \
SETHIDDEN(w>>8); \
(REG)=w; \
} while(0)
@@ -258,19 +241,19 @@ do { \
#define INC8(REG) \
do { \
(REG)++; \
- cpu->AF.b[LO]=CARRY|SZtable[(REG)]; \
- if ((REG)==0x80) cpu->AF.b[LO]|=P_Z80; \
- if (((REG)&0x0f)==0) cpu->AF.b[LO]|=H_Z80; \
+ cpu->AF.b.lo=CARRY|SZtable[(REG)]; \
+ if ((REG)==0x80) cpu->AF.b.lo|=P_Z80; \
+ if (((REG)&0x0f)==0) cpu->AF.b.lo|=H_Z80; \
} while(0)
#define DEC8(REG) \
do { \
(REG)--; \
- cpu->AF.b[LO]=N_Z80|CARRY; \
- if ((REG)==0x7f) cpu->AF.b[LO]|=P_Z80; \
- if (((REG)&0x0f)==0x0f) cpu->AF.b[LO]|=H_Z80; \
- cpu->AF.b[LO]|=SZtable[(REG)]; \
+ cpu->AF.b.lo=N_Z80|CARRY; \
+ if ((REG)==0x7f) cpu->AF.b.lo|=P_Z80; \
+ if (((REG)&0x0f)==0x0f) cpu->AF.b.lo|=H_Z80; \
+ cpu->AF.b.lo|=SZtable[(REG)]; \
} while(0)
@@ -312,9 +295,9 @@ do { \
*/
#define RRCA \
do { \
- cpu->AF.b[LO]=(cpu->AF.b[LO]&(S_Z80|Z_Z80|P_Z80))|(cpu->AF.b[HI]&C_Z80); \
- cpu->AF.b[HI]=(cpu->AF.b[HI]>>1)|(cpu->AF.b[HI]<<7); \
- SETHIDDEN(cpu->AF.b[HI]); \
+ cpu->AF.b.lo=(cpu->AF.b.lo&(S_Z80|Z_Z80|P_Z80))|(cpu->AF.b.hi&C_Z80); \
+ cpu->AF.b.hi=(cpu->AF.b.hi>>1)|(cpu->AF.b.hi<<7); \
+ SETHIDDEN(cpu->AF.b.hi); \
} while(0)
@@ -322,9 +305,9 @@ do { \
do { \
Z80Byte c; \
c=CARRY; \
- cpu->AF.b[LO]=(cpu->AF.b[LO]&(S_Z80|Z_Z80|P_Z80))|(cpu->AF.b[HI]&C_Z80); \
- cpu->AF.b[HI]=(cpu->AF.b[HI]>>1)|(c<<7); \
- SETHIDDEN(cpu->AF.b[HI]); \
+ cpu->AF.b.lo=(cpu->AF.b.lo&(S_Z80|Z_Z80|P_Z80))|(cpu->AF.b.hi&C_Z80); \
+ cpu->AF.b.hi=(cpu->AF.b.hi>>1)|(c<<7); \
+ SETHIDDEN(cpu->AF.b.hi); \
} while(0)
@@ -333,7 +316,7 @@ do { \
Z80Byte c; \
c=(REG)&C_Z80; \
(REG)=((REG)>>1)|((REG)<<7); \
- cpu->AF.b[LO]=PSZtable[(REG)]|c; \
+ cpu->AF.b.lo=PSZtable[(REG)]|c; \
SETHIDDEN(REG); \
} while(0)
@@ -343,16 +326,16 @@ do { \
Z80Byte c; \
c=(REG)&C_Z80; \
(REG)=((REG)>>1)|(CARRY<<7); \
- cpu->AF.b[LO]=PSZtable[(REG)]|c; \
+ cpu->AF.b.lo=PSZtable[(REG)]|c; \
SETHIDDEN(REG); \
} while(0)
#define RLCA \
do { \
- cpu->AF.b[LO]=(cpu->AF.b[LO]&(S_Z80|Z_Z80|P_Z80))|(cpu->AF.b[HI]>>7); \
- cpu->AF.b[HI]=(cpu->AF.b[HI]<<1)|(cpu->AF.b[HI]>>7); \
- SETHIDDEN(cpu->AF.b[HI]); \
+ cpu->AF.b.lo=(cpu->AF.b.lo&(S_Z80|Z_Z80|P_Z80))|(cpu->AF.b.hi>>7); \
+ cpu->AF.b.hi=(cpu->AF.b.hi<<1)|(cpu->AF.b.hi>>7); \
+ SETHIDDEN(cpu->AF.b.hi); \
} while(0)
@@ -360,9 +343,9 @@ do { \
do { \
Z80Byte c; \
c=CARRY; \
- cpu->AF.b[LO]=(cpu->AF.b[LO]&(S_Z80|Z_Z80|P_Z80))|(cpu->AF.b[HI]>>7); \
- cpu->AF.b[HI]=(cpu->AF.b[HI]<<1)|c; \
- SETHIDDEN(cpu->AF.b[HI]); \
+ cpu->AF.b.lo=(cpu->AF.b.lo&(S_Z80|Z_Z80|P_Z80))|(cpu->AF.b.hi>>7); \
+ cpu->AF.b.hi=(cpu->AF.b.hi<<1)|c; \
+ SETHIDDEN(cpu->AF.b.hi); \
} while(0)
@@ -371,7 +354,7 @@ do { \
Z80Byte c; \
c=(REG)>>7; \
(REG)=((REG)<<1)|c; \
- cpu->AF.b[LO]=PSZtable[(REG)]|c; \
+ cpu->AF.b.lo=PSZtable[(REG)]|c; \
SETHIDDEN(REG); \
} while(0)
@@ -381,7 +364,7 @@ do { \
Z80Byte c; \
c=(REG)>>7; \
(REG)=((REG)<<1)|CARRY; \
- cpu->AF.b[LO]=PSZtable[(REG)]|c; \
+ cpu->AF.b.lo=PSZtable[(REG)]|c; \
SETHIDDEN(REG); \
} while(0)
@@ -391,7 +374,7 @@ do { \
Z80Byte c; \
c=(REG)&C_Z80; \
(REG)>>=1; \
- cpu->AF.b[LO]=PSZtable[(REG)]|c; \
+ cpu->AF.b.lo=PSZtable[(REG)]|c; \
SETHIDDEN(REG); \
} while(0)
@@ -401,7 +384,7 @@ do { \
Z80Byte c; \
c=(REG)&C_Z80; \
(REG)=((REG)>>1)|((REG)&0x80); \
- cpu->AF.b[LO]=PSZtable[(REG)]|c; \
+ cpu->AF.b.lo=PSZtable[(REG)]|c; \
SETHIDDEN(REG); \
} while(0)
@@ -411,7 +394,7 @@ do { \
Z80Byte c; \
c=(REG)>>7; \
(REG)=((REG)<<1)|1; \
- cpu->AF.b[LO]=PSZtable[(REG)]|c; \
+ cpu->AF.b.lo=PSZtable[(REG)]|c; \
SETHIDDEN(REG); \
} while(0)
@@ -421,7 +404,7 @@ do { \
Z80Byte c; \
c=(REG)>>7; \
(REG)=(REG)<<1; \
- cpu->AF.b[LO]=PSZtable[(REG)]|c; \
+ cpu->AF.b.lo=PSZtable[(REG)]|c; \
SETHIDDEN(REG); \
} while(0)
@@ -430,41 +413,41 @@ do { \
*/
#define AND(VAL) \
do { \
- cpu->AF.b[HI]&=VAL; \
- cpu->AF.b[LO]=PSZtable[cpu->AF.b[HI]]|H_Z80; \
- SETHIDDEN(cpu->AF.b[HI]); \
+ cpu->AF.b.hi&=VAL; \
+ cpu->AF.b.lo=PSZtable[cpu->AF.b.hi]|H_Z80; \
+ SETHIDDEN(cpu->AF.b.hi); \
} while(0)
#define OR(VAL) \
do { \
- cpu->AF.b[HI]|=VAL; \
- cpu->AF.b[LO]=PSZtable[cpu->AF.b[HI]]; \
- SETHIDDEN(cpu->AF.b[HI]); \
+ cpu->AF.b.hi|=VAL; \
+ cpu->AF.b.lo=PSZtable[cpu->AF.b.hi]; \
+ SETHIDDEN(cpu->AF.b.hi); \
} while(0)
#define XOR(VAL) \
do { \
- cpu->AF.b[HI]^=VAL; \
- cpu->AF.b[LO]=PSZtable[cpu->AF.b[HI]]; \
- SETHIDDEN(cpu->AF.b[HI]); \
+ cpu->AF.b.hi^=VAL; \
+ cpu->AF.b.lo=PSZtable[cpu->AF.b.hi]; \
+ SETHIDDEN(cpu->AF.b.hi); \
} while(0)
#define BIT(REG,B) \
do { \
- cpu->AF.b[LO]=CARRY|H_Z80; \
+ cpu->AF.b.lo=CARRY|H_Z80; \
if ((REG)&(1<<B)) \
{ \
- if (B==7 && (REG&S_Z80)) cpu->AF.b[LO]|=S_Z80; \
- if (B==5 && (REG&B5_Z80)) cpu->AF.b[LO]|=B5_Z80; \
- if (B==3 && (REG&B3_Z80)) cpu->AF.b[LO]|=B3_Z80; \
+ if (B==7 && (REG&S_Z80)) cpu->AF.b.lo|=S_Z80; \
+ if (B==5 && (REG&B5_Z80)) cpu->AF.b.lo|=B5_Z80; \
+ if (B==3 && (REG&B3_Z80)) cpu->AF.b.lo|=B3_Z80; \
} \
else \
{ \
- cpu->AF.b[LO]|=Z_Z80; \
- cpu->AF.b[LO]|=P_Z80; \
+ cpu->AF.b.lo|=Z_Z80; \
+ cpu->AF.b.lo|=P_Z80; \
} \
} while(0)
@@ -557,7 +540,7 @@ do { \
else \
CLRFLAG(P_Z80); \
\
- SETHIDDEN(cpu->AF.b[HI]+b); \
+ SETHIDDEN(cpu->AF.b.hi+b); \
} while(0)
#define LDD \
@@ -578,7 +561,7 @@ do { \
else \
CLRFLAG(P_Z80); \
\
- SETHIDDEN(cpu->AF.b[HI]+b); \
+ SETHIDDEN(cpu->AF.b.hi+b); \
} while(0)
#define CPI \
@@ -635,13 +618,13 @@ do { \
b=IN(cpu->BC.w); \
POKE(cpu->HL.w,b); \
\
- cpu->BC.b[HI]--; \
+ cpu->BC.b.hi--; \
cpu->HL.w++; \
\
- cpu->AF.b[LO]=SZtable[cpu->BC.b[HI]]; \
- SETHIDDEN(cpu->BC.b[HI]); \
+ cpu->AF.b.lo=SZtable[cpu->BC.b.hi]; \
+ SETHIDDEN(cpu->BC.b.hi); \
\
- w=(((Z80Word)cpu->BC.b[LO])&0xff)+b; \
+ w=(((Z80Word)cpu->BC.b.lo)&0xff)+b; \
\
if (b&0x80) \
SETFLAG(N_Z80); \
@@ -666,13 +649,13 @@ do { \
b=IN(cpu->BC.w); \
POKE(cpu->HL.w,b); \
\
- cpu->BC.b[HI]--; \
+ cpu->BC.b.hi--; \
cpu->HL.w--; \
\
- cpu->AF.b[LO]=SZtable[cpu->BC.b[HI]]; \
- SETHIDDEN(cpu->BC.b[HI]); \
+ cpu->AF.b.lo=SZtable[cpu->BC.b.hi]; \
+ SETHIDDEN(cpu->BC.b.hi); \
\
- w=(((Z80Word)cpu->BC.b[LO])&0xff)+b; \
+ w=(((Z80Word)cpu->BC.b.lo)&0xff)+b; \
\
if (b&0x80) \
SETFLAG(N_Z80); \
@@ -694,10 +677,10 @@ do { \
OUT(cpu->BC.w,PEEK(cpu->HL.w)); \
\
cpu->HL.w++; \
- cpu->BC.b[HI]--; \
+ cpu->BC.b.hi--; \
\
- cpu->AF.b[LO]=SZtable[cpu->BC.b[HI]]; \
- SETHIDDEN(cpu->BC.b[HI]); \
+ cpu->AF.b.lo=SZtable[cpu->BC.b.hi]; \
+ SETHIDDEN(cpu->BC.b.hi); \
} while(0)
#define OUTD \
@@ -705,11 +688,11 @@ do { \
OUT(cpu->BC.w,PEEK(cpu->HL.w)); \
\
cpu->HL.w--; \
- cpu->BC.b[HI]--; \
+ cpu->BC.b.hi--; \
\
- cpu->AF.b[LO]=SZtable[cpu->BC.b[HI]]; \
+ cpu->AF.b.lo=SZtable[cpu->BC.b.hi]; \
SETFLAG(N_Z80); \
- SETHIDDEN(cpu->BC.b[HI]); \
+ SETHIDDEN(cpu->BC.b.hi); \
} while(0)
@@ -719,22 +702,22 @@ do { \
#define LD_BLOCK(BASE,DEST,DEST2) \
case BASE: /* LD DEST,B */ \
TSTATE(4); \
- DEST=cpu->BC.b[HI]; \
+ DEST=cpu->BC.b.hi; \
break; \
\
case BASE+1: /* LD DEST,C */ \
TSTATE(4); \
- DEST=cpu->BC.b[LO]; \
+ DEST=cpu->BC.b.lo; \
break; \
\
case BASE+2: /* LD DEST,D */ \
TSTATE(4); \
- DEST=cpu->DE.b[HI]; \
+ DEST=cpu->DE.b.hi; \
break; \
\
case BASE+3: /* LD DEST,E */ \
TSTATE(4); \
- DEST=cpu->DE.b[LO]; \
+ DEST=cpu->DE.b.lo; \
break; \
\
case BASE+4: /* LD DEST,H */ \
@@ -755,28 +738,28 @@ do { \
\
case BASE+7: /* LD DEST,A */ \
TSTATE(4); \
- DEST=cpu->AF.b[HI]; \
+ DEST=cpu->AF.b.hi; \
break;
#define ALU_BLOCK(BASE,OP) \
case BASE: /* OP A,B */ \
TSTATE(4); \
- OP(cpu->BC.b[HI]); \
+ OP(cpu->BC.b.hi); \
break; \
\
case BASE+1: /* OP A,C */ \
TSTATE(4); \
- OP(cpu->BC.b[LO]); \
+ OP(cpu->BC.b.lo); \
break; \
\
case BASE+2: /* OP A,D */ \
TSTATE(4); \
- OP(cpu->DE.b[HI]); \
+ OP(cpu->DE.b.hi); \
break; \
\
case BASE+3: /* OP A,E */ \
TSTATE(4); \
- OP(cpu->DE.b[LO]); \
+ OP(cpu->DE.b.lo); \
break; \
\
case BASE+4: /* OP A,H */ \
@@ -797,7 +780,7 @@ do { \
\
case BASE+7: /* OP A,A */ \
TSTATE(4); \
- OP(cpu->AF.b[HI]); \
+ OP(cpu->AF.b.hi); \
break;
@@ -807,32 +790,32 @@ do { \
#define CB_ALU_BLOCK(BASE,OP) \
case BASE: /* OP B */ \
TSTATE(8); \
- OP(cpu->BC.b[HI]); \
+ OP(cpu->BC.b.hi); \
break; \
\
case BASE+1: /* OP C */ \
TSTATE(8); \
- OP(cpu->BC.b[LO]); \
+ OP(cpu->BC.b.lo); \
break; \
\
case BASE+2: /* OP D */ \
TSTATE(8); \
- OP(cpu->DE.b[HI]); \
+ OP(cpu->DE.b.hi); \
break; \
\
case BASE+3: /* OP E */ \
TSTATE(8); \
- OP(cpu->DE.b[LO]); \
+ OP(cpu->DE.b.lo); \
break; \
\
case BASE+4: /* OP H */ \
TSTATE(8); \
- OP(cpu->HL.b[HI]); \
+ OP(cpu->HL.b.hi); \
break; \
\
case BASE+5: /* OP L */ \
TSTATE(8); \
- OP(cpu->HL.b[LO]); \
+ OP(cpu->HL.b.lo); \
break; \
\
case BASE+6: /* OP (HL) */ \
@@ -842,38 +825,38 @@ do { \
\
case BASE+7: /* OP A */ \
TSTATE(8); \
- OP(cpu->AF.b[HI]); \
+ OP(cpu->AF.b.hi); \
break;
#define CB_BITMANIP_BLOCK(BASE,OP,BIT_NO) \
case BASE: /* OP B */ \
TSTATE(8); \
- OP(cpu->BC.b[HI],BIT_NO); \
+ OP(cpu->BC.b.hi,BIT_NO); \
break; \
\
case BASE+1: /* OP C */ \
TSTATE(8); \
- OP(cpu->BC.b[LO],BIT_NO); \
+ OP(cpu->BC.b.lo,BIT_NO); \
break; \
\
case BASE+2: /* OP D */ \
TSTATE(8); \
- OP(cpu->DE.b[HI],BIT_NO); \
+ OP(cpu->DE.b.hi,BIT_NO); \
break; \
\
case BASE+3: /* OP E */ \
TSTATE(8); \
- OP(cpu->DE.b[LO],BIT_NO); \
+ OP(cpu->DE.b.lo,BIT_NO); \
break; \
\
case BASE+4: /* OP H */ \
TSTATE(8); \
- OP(cpu->HL.b[HI],BIT_NO); \
+ OP(cpu->HL.b.hi,BIT_NO); \
break; \
\
case BASE+5: /* OP L */ \
TSTATE(8); \
- OP(cpu->HL.b[LO],BIT_NO); \
+ OP(cpu->HL.b.lo,BIT_NO); \
break; \
\
case BASE+6: /* OP (HL) */ \
@@ -883,7 +866,7 @@ do { \
\
case BASE+7: /* OP A */ \
TSTATE(8); \
- OP(cpu->AF.b[HI],BIT_NO); \
+ OP(cpu->AF.b.hi,BIT_NO); \
break;
/* ---------------------------------------- SHIFTED CB OPCODE SHORT-HAND BLOCKS
@@ -892,32 +875,32 @@ do { \
#define SHIFTED_CB_ALU_BLOCK(BASE,OP) \
case BASE: /* OP B */ \
TSTATE(8); \
- OP_ON_MEM_WITH_COPY(OP,addr,cpu->BC.b[HI]); \
+ OP_ON_MEM_WITH_COPY(OP,addr,cpu->BC.b.hi); \
break; \
\
case BASE+1: /* OP C */ \
TSTATE(8); \
- OP_ON_MEM_WITH_COPY(OP,addr,cpu->BC.b[LO]); \
+ OP_ON_MEM_WITH_COPY(OP,addr,cpu->BC.b.lo); \
break; \
\
case BASE+2: /* OP D */ \
TSTATE(8); \
- OP_ON_MEM_WITH_COPY(OP,addr,cpu->DE.b[HI]); \
+ OP_ON_MEM_WITH_COPY(OP,addr,cpu->DE.b.hi); \
break; \
\
case BASE+3: /* OP E */ \
TSTATE(8); \
- OP_ON_MEM_WITH_COPY(OP,addr,cpu->DE.b[LO]); \
+ OP_ON_MEM_WITH_COPY(OP,addr,cpu->DE.b.lo); \
break; \
\
case BASE+4: /* OP H */ \
TSTATE(8); \
- OP_ON_MEM_WITH_COPY(OP,addr,cpu->HL.b[HI]); \
+ OP_ON_MEM_WITH_COPY(OP,addr,cpu->HL.b.hi); \
break; \
\
case BASE+5: /* OP L */ \
TSTATE(8); \
- OP_ON_MEM_WITH_COPY(OP,addr,cpu->HL.b[LO]); \
+ OP_ON_MEM_WITH_COPY(OP,addr,cpu->HL.b.lo); \
break; \
\
case BASE+6: /* OP (HL) */ \
@@ -927,38 +910,38 @@ do { \
\
case BASE+7: /* OP A */ \
TSTATE(8); \
- OP_ON_MEM_WITH_COPY(OP,addr,cpu->AF.b[HI]); \
+ OP_ON_MEM_WITH_COPY(OP,addr,cpu->AF.b.hi); \
break;
#define SHIFTED_CB_BITMANIP_BLOCK(BASE,OP,BIT_NO) \
case BASE: /* OP B */ \
TSTATE(8); \
- OP_ON_MEM_WITH_ARG_AND_COPY(OP,addr,BIT_NO,cpu->BC.b[HI]); \
+ OP_ON_MEM_WITH_ARG_AND_COPY(OP,addr,BIT_NO,cpu->BC.b.hi); \
break; \
\
case BASE+1: /* OP C */ \
TSTATE(8); \
- OP_ON_MEM_WITH_ARG_AND_COPY(OP,addr,BIT_NO,cpu->BC.b[LO]); \
+ OP_ON_MEM_WITH_ARG_AND_COPY(OP,addr,BIT_NO,cpu->BC.b.lo); \
break; \
\
case BASE+2: /* OP D */ \
TSTATE(8); \
- OP_ON_MEM_WITH_ARG_AND_COPY(OP,addr,BIT_NO,cpu->DE.b[HI]); \
+ OP_ON_MEM_WITH_ARG_AND_COPY(OP,addr,BIT_NO,cpu->DE.b.hi); \
break; \
\
case BASE+3: /* OP E */ \
TSTATE(8); \
- OP_ON_MEM_WITH_ARG_AND_COPY(OP,addr,BIT_NO,cpu->DE.b[LO]); \
+ OP_ON_MEM_WITH_ARG_AND_COPY(OP,addr,BIT_NO,cpu->DE.b.lo); \
break; \
\
case BASE+4: /* OP H */ \
TSTATE(8); \
- OP_ON_MEM_WITH_ARG_AND_COPY(OP,addr,BIT_NO,cpu->HL.b[HI]); \
+ OP_ON_MEM_WITH_ARG_AND_COPY(OP,addr,BIT_NO,cpu->HL.b.hi); \
break; \
\
case BASE+5: /* OP L */ \
TSTATE(8); \
- OP_ON_MEM_WITH_ARG_AND_COPY(OP,addr,BIT_NO,cpu->HL.b[LO]); \
+ OP_ON_MEM_WITH_ARG_AND_COPY(OP,addr,BIT_NO,cpu->HL.b.lo); \
break; \
\
case BASE+6: /* OP (HL) */ \
@@ -968,7 +951,7 @@ do { \
\
case BASE+7: /* OP A */ \
TSTATE(8); \
- OP_ON_MEM_WITH_ARG_AND_COPY(OP,addr,BIT_NO,cpu->AF.b[HI]); \
+ OP_ON_MEM_WITH_ARG_AND_COPY(OP,addr,BIT_NO,cpu->AF.b.hi); \
break;
/* ---------------------------------------- DAA
@@ -981,8 +964,8 @@ static void DAA (Z80 *cpu)
{
Z80Byte add=0;
Z80Byte carry=0;
- Z80Byte nf=cpu->AF.b[LO]&N_Z80;
- Z80Byte acc=cpu->AF.b[HI];
+ Z80Byte nf=cpu->AF.b.lo&N_Z80;
+ Z80Byte acc=cpu->AF.b.hi;
if (acc>0x99 || IS_C)
{
@@ -997,18 +980,18 @@ static void DAA (Z80 *cpu)
if (nf)
{
- cpu->AF.b[HI]-=add;
+ cpu->AF.b.hi-=add;
}
else
{
- cpu->AF.b[HI]+=add;
+ cpu->AF.b.hi+=add;
}
- cpu->AF.b[LO]=PSZtable[cpu->AF.b[HI]]
+ cpu->AF.b.lo=PSZtable[cpu->AF.b.hi]
| carry
| nf
- | ((acc^cpu->AF.b[HI])&H_Z80)
- | (cpu->AF.b[HI]&(B3_Z80|B5_Z80));
+ | ((acc^cpu->AF.b.hi)&H_Z80)
+ | (cpu->AF.b.hi&(B3_Z80|B5_Z80));
}
/* ---------------------------------------- HANDLERS FOR ED OPCODES
@@ -1022,20 +1005,20 @@ static void DecodeED(Z80 *cpu, Z80Byte opcode)
if (PRIV->pread)
{
- cpu->BC.b[HI]=PRIV->pread(cpu,cpu->BC.w);
+ cpu->BC.b.hi=PRIV->pread(cpu,cpu->BC.w);
}
else
{
- cpu->BC.b[HI]=0;
+ cpu->BC.b.hi=0;
}
- cpu->AF.b[LO]=CARRY|PSZtable[cpu->BC.b[HI]];
- SETHIDDEN(cpu->BC.b[HI]);
+ cpu->AF.b.lo=CARRY|PSZtable[cpu->BC.b.hi];
+ SETHIDDEN(cpu->BC.b.hi);
break;
case 0x41: /* OUT (C),B */
TSTATE(12);
- if (PRIV->pwrite) PRIV->pwrite(cpu,cpu->BC.w,cpu->BC.b[HI]);
+ if (PRIV->pwrite) PRIV->pwrite(cpu,cpu->BC.w,cpu->BC.b.hi);
break;
case 0x42: /* SBC HL,BC */
@@ -1054,8 +1037,8 @@ static void DecodeED(Z80 *cpu, Z80Byte opcode)
TSTATE(8);
- b=cpu->AF.b[HI];
- cpu->AF.b[HI]=0;
+ b=cpu->AF.b.hi;
+ cpu->AF.b.hi=0;
SUB8(b);
break;
}
@@ -1073,7 +1056,7 @@ static void DecodeED(Z80 *cpu, Z80Byte opcode)
case 0x47: /* LD I,A */
TSTATE(9);
- cpu->I=cpu->AF.b[HI];
+ cpu->I=cpu->AF.b.hi;
break;
case 0x48: /* IN C,(C) */
@@ -1081,20 +1064,20 @@ static void DecodeED(Z80 *cpu, Z80Byte opcode)
if (PRIV->pread)
{
- cpu->BC.b[LO]=PRIV->pread(cpu,cpu->BC.w);
+ cpu->BC.b.lo=PRIV->pread(cpu,cpu->BC.w);
}
else
{
- cpu->BC.b[LO]=0;
+ cpu->BC.b.lo=0;
}
- cpu->AF.b[LO]=CARRY|PSZtable[cpu->BC.b[LO]];
- SETHIDDEN(cpu->BC.b[LO]);
+ cpu->AF.b.lo=CARRY|PSZtable[cpu->BC.b.lo];
+ SETHIDDEN(cpu->BC.b.lo);
break;
case 0x49: /* OUT (C),C */
TSTATE(12);
- if (PRIV->pwrite) PRIV->pwrite(cpu,cpu->BC.w,cpu->BC.b[LO]);
+ if (PRIV->pwrite) PRIV->pwrite(cpu,cpu->BC.w,cpu->BC.b.lo);
break;
case 0x4a: /* ADC HL,BC */
@@ -1113,8 +1096,8 @@ static void DecodeED(Z80 *cpu, Z80Byte opcode)
TSTATE(8);
- b=cpu->AF.b[HI];
- cpu->AF.b[HI]=0;
+ b=cpu->AF.b.hi;
+ cpu->AF.b.hi=0;
SUB8(b);
break;
}
@@ -1133,7 +1116,7 @@ static void DecodeED(Z80 *cpu, Z80Byte opcode)
case 0x4f: /* LD R,A */
TSTATE(9);
- cpu->R=cpu->AF.b[HI];
+ cpu->R=cpu->AF.b.hi;
break;
case 0x50: /* IN D,(C) */
@@ -1141,20 +1124,20 @@ static void DecodeED(Z80 *cpu, Z80Byte opcode)
if (PRIV->pread)
{
- cpu->DE.b[HI]=PRIV->pread(cpu,cpu->BC.w);
+ cpu->DE.b.hi=PRIV->pread(cpu,cpu->BC.w);
}
else
{
- cpu->DE.b[HI]=0;
+ cpu->DE.b.hi=0;
}
- cpu->AF.b[LO]=CARRY|PSZtable[cpu->DE.b[HI]];
- SETHIDDEN(cpu->BC.b[HI]);
+ cpu->AF.b.lo=CARRY|PSZtable[cpu->DE.b.hi];
+ SETHIDDEN(cpu->BC.b.hi);
break;
case 0x51: /* OUT (C),D */
TSTATE(12);
- if (PRIV->pwrite) PRIV->pwrite(cpu,cpu->BC.w,cpu->DE.b[HI]);
+ if (PRIV->pwrite) PRIV->pwrite(cpu,cpu->BC.w,cpu->DE.b.hi);
break;
case 0x52: /* SBC HL,DE */
@@ -1173,8 +1156,8 @@ static void DecodeED(Z80 *cpu, Z80Byte opcode)
TSTATE(8);
- b=cpu->AF.b[HI];
- cpu->AF.b[HI]=0;
+ b=cpu->AF.b.hi;
+ cpu->AF.b.hi=0;
SUB8(b);
break;
}
@@ -1192,7 +1175,7 @@ static void DecodeED(Z80 *cpu, Z80Byte opcode)
case 0x57: /* LD A,I */
TSTATE(9);
- cpu->AF.b[HI]=cpu->I;
+ cpu->AF.b.hi=cpu->I;
break;
case 0x58: /* IN E,(C) */
@@ -1200,20 +1183,20 @@ static void DecodeED(Z80 *cpu, Z80Byte opcode)
if (PRIV->pread)
{
- cpu->DE.b[LO]=PRIV->pread(cpu,cpu->BC.w);
+ cpu->DE.b.lo=PRIV->pread(cpu,cpu->BC.w);
}
else
{
- cpu->BC.b[LO]=0;
+ cpu->BC.b.lo=0;
}
- cpu->AF.b[LO]=CARRY|PSZtable[cpu->DE.b[LO]];
- SETHIDDEN(cpu->DE.b[LO]);
+ cpu->AF.b.lo=CARRY|PSZtable[cpu->DE.b.lo];
+ SETHIDDEN(cpu->DE.b.lo);
break;
case 0x59: /* OUT (C),E */
TSTATE(12);
- if (PRIV->pwrite) PRIV->pwrite(cpu,cpu->BC.w,cpu->DE.b[LO]);
+ if (PRIV->pwrite) PRIV->pwrite(cpu,cpu->BC.w,cpu->DE.b.lo);
break;
case 0x5a: /* ADC HL,DE */
@@ -1232,8 +1215,8 @@ static void DecodeED(Z80 *cpu, Z80Byte opcode)
TSTATE(8);
- b=cpu->AF.b[HI];
- cpu->AF.b[HI]=0;
+ b=cpu->AF.b.hi;
+ cpu->AF.b.hi=0;
SUB8(b);
break;
}
@@ -1251,7 +1234,7 @@ static void DecodeED(Z80 *cpu, Z80Byte opcode)
case 0x5f: /* LD A,R */
TSTATE(9);
- cpu->AF.b[HI]=cpu->R;
+ cpu->AF.b.hi=cpu->R;
break;
case 0x60: /* IN H,(C) */
@@ -1259,20 +1242,20 @@ static void DecodeED(Z80 *cpu, Z80Byte opcode)
if (PRIV->pread)
{
- cpu->HL.b[HI]=PRIV->pread(cpu,cpu->BC.w);
+ cpu->HL.b.hi=PRIV->pread(cpu,cpu->BC.w);
}
else
{
- cpu->HL.b[HI]=0;
+ cpu->HL.b.hi=0;
}
- cpu->AF.b[LO]=CARRY|PSZtable[cpu->HL.b[HI]];
- SETHIDDEN(cpu->HL.b[HI]);
+ cpu->AF.b.lo=CARRY|PSZtable[cpu->HL.b.hi];
+ SETHIDDEN(cpu->HL.b.hi);
break;
case 0x61: /* OUT (C),H */
TSTATE(12);
- if (PRIV->pwrite) PRIV->pwrite(cpu,cpu->BC.w,cpu->HL.b[HI]);
+ if (PRIV->pwrite) PRIV->pwrite(cpu,cpu->BC.w,cpu->HL.b.hi);
break;
case 0x62: /* SBC HL,HL */
@@ -1291,8 +1274,8 @@ static void DecodeED(Z80 *cpu, Z80Byte opcode)
TSTATE(8);
- b=cpu->AF.b[HI];
- cpu->AF.b[HI]=0;
+ b=cpu->AF.b.hi;
+ cpu->AF.b.hi=0;
SUB8(b);
break;
}
@@ -1316,11 +1299,11 @@ static void DecodeED(Z80 *cpu, Z80Byte opcode)
b=PEEK(cpu->HL.w);
- POKE(cpu->HL.w,(b>>4)|(cpu->AF.b[HI]<<4));
- cpu->AF.b[HI]=(cpu->AF.b[HI]&0xf0)|(b&0x0f);
+ POKE(cpu->HL.w,(b>>4)|(cpu->AF.b.hi<<4));
+ cpu->AF.b.hi=(cpu->AF.b.hi&0xf0)|(b&0x0f);
- cpu->AF.b[LO]=CARRY|PSZtable[cpu->AF.b[HI]];
- SETHIDDEN(cpu->AF.b[HI]);
+ cpu->AF.b.lo=CARRY|PSZtable[cpu->AF.b.hi];
+ SETHIDDEN(cpu->AF.b.hi);
break;
}
@@ -1329,20 +1312,20 @@ static void DecodeED(Z80 *cpu, Z80Byte opcode)
if (PRIV->pread)
{
- cpu->HL.b[LO]=PRIV->pread(cpu,cpu->BC.w);
+ cpu->HL.b.lo=PRIV->pread(cpu,cpu->BC.w);
}
else
{
- cpu->HL.b[LO]=0;
+ cpu->HL.b.lo=0;
}
- cpu->AF.b[LO]=CARRY|PSZtable[cpu->HL.b[LO]];
- SETHIDDEN(cpu->HL.b[LO]);
+ cpu->AF.b.lo=CARRY|PSZtable[cpu->HL.b.lo];
+ SETHIDDEN(cpu->HL.b.lo);
break;
case 0x69: /* OUT (C),L */
TSTATE(12);
- if (PRIV->pwrite) PRIV->pwrite(cpu,cpu->BC.w,cpu->HL.b[LO]);
+ if (PRIV->pwrite) PRIV->pwrite(cpu,cpu->BC.w,cpu->HL.b.lo);
break;
case 0x6a: /* ADC HL,HL */
@@ -1361,8 +1344,8 @@ static void DecodeED(Z80 *cpu, Z80Byte opcode)
TSTATE(8);
- b=cpu->AF.b[HI];
- cpu->AF.b[HI]=0;
+ b=cpu->AF.b.hi;
+ cpu->AF.b.hi=0;
SUB8(b);
break;
}
@@ -1386,11 +1369,11 @@ static void DecodeED(Z80 *cpu, Z80Byte opcode)
b=PEEK(cpu->HL.w);
- POKE(cpu->HL.w,(b<<4)|(cpu->AF.b[HI]&0x0f));
- cpu->AF.b[HI]=(cpu->AF.b[HI]&0xf0)|(b>>4);
+ POKE(cpu->HL.w,(b<<4)|(cpu->AF.b.hi&0x0f));
+ cpu->AF.b.hi=(cpu->AF.b.hi&0xf0)|(b>>4);
- cpu->AF.b[LO]=CARRY|PSZtable[cpu->AF.b[HI]];
- SETHIDDEN(cpu->AF.b[HI]);
+ cpu->AF.b.lo=CARRY|PSZtable[cpu->AF.b.hi];
+ SETHIDDEN(cpu->AF.b.hi);
break;
}
@@ -1409,7 +1392,7 @@ static void DecodeED(Z80 *cpu, Z80Byte opcode)
b=0;
}
- cpu->AF.b[LO]=CARRY|PSZtable[b];
+ cpu->AF.b.lo=CARRY|PSZtable[b];
SETHIDDEN(b);
break;
}
@@ -1435,8 +1418,8 @@ static void DecodeED(Z80 *cpu, Z80Byte opcode)
TSTATE(8);
- b=cpu->AF.b[HI];
- cpu->AF.b[HI]=0;
+ b=cpu->AF.b.hi;
+ cpu->AF.b.hi=0;
SUB8(b);
break;
}
@@ -1462,20 +1445,20 @@ static void DecodeED(Z80 *cpu, Z80Byte opcode)
if (PRIV->pread)
{
- cpu->AF.b[HI]=PRIV->pread(cpu,cpu->BC.w);
+ cpu->AF.b.hi=PRIV->pread(cpu,cpu->BC.w);
}
else
{
- cpu->AF.b[HI]=0;
+ cpu->AF.b.hi=0;
}
- cpu->AF.b[LO]=CARRY|PSZtable[cpu->AF.b[HI]];
- SETHIDDEN(cpu->AF.b[HI]);
+ cpu->AF.b.lo=CARRY|PSZtable[cpu->AF.b.hi];
+ SETHIDDEN(cpu->AF.b.hi);
break;
case 0x79: /* OUT (C),A */
TSTATE(12);
- if (PRIV->pwrite) PRIV->pwrite(cpu,cpu->BC.w,cpu->AF.b[HI]);
+ if (PRIV->pwrite) PRIV->pwrite(cpu,cpu->BC.w,cpu->AF.b.hi);
break;
case 0x7a: /* ADC HL,SP */
@@ -1494,8 +1477,8 @@ static void DecodeED(Z80 *cpu, Z80Byte opcode)
TSTATE(8);
- b=cpu->AF.b[HI];
- cpu->AF.b[HI]=0;
+ b=cpu->AF.b.hi;
+ cpu->AF.b.hi=0;
SUB8(b);
break;
}
@@ -1766,18 +1749,18 @@ void Z80_Decode(Z80 *cpu, Z80Byte opcode)
{
case 0xdd:
HL=&(cpu->IX.w);
- L=cpu->IX.b+LO;
- H=cpu->IX.b+HI;
+ L=&(cpu->IX.b.lo);
+ H=&(cpu->IX.b.hi);
break;
case 0xfd:
HL=&(cpu->IY.w);
- L=cpu->IY.b+LO;
- H=cpu->IY.b+HI;
+ L=&(cpu->IY.b.lo);
+ H=&(cpu->IY.b.hi);
break;
default:
HL=&(cpu->HL.w);
- L=cpu->HL.b+LO;
- H=cpu->HL.b+HI;
+ L=&(cpu->HL.b.lo);
+ H=&(cpu->HL.b.hi);
break;
}
@@ -1794,7 +1777,7 @@ void Z80_Decode(Z80 *cpu, Z80Byte opcode)
case 0x02: /* LD (BC),A */
TSTATE(7);
- POKE(cpu->BC.w,cpu->AF.b[HI]);
+ POKE(cpu->BC.w,cpu->AF.b.hi);
break;
case 0x03: /* INC BC */
@@ -1804,17 +1787,17 @@ void Z80_Decode(Z80 *cpu, Z80Byte opcode)
case 0x04: /* INC B */
TSTATE(4);
- INC8(cpu->BC.b[HI]);
+ INC8(cpu->BC.b.hi);
break;
case 0x05: /* DEC B */
TSTATE(4);
- DEC8(cpu->BC.b[HI]);
+ DEC8(cpu->BC.b.hi);
break;
case 0x06: /* LD B,n */
TSTATE(7);
- cpu->BC.b[HI]=FETCH_BYTE;
+ cpu->BC.b.hi=FETCH_BYTE;
break;
case 0x07: /* RLCA */
@@ -1834,7 +1817,7 @@ void Z80_Decode(Z80 *cpu, Z80Byte opcode)
case 0x0a: /* LD A,(BC) */
TSTATE(7);
- cpu->AF.b[HI]=PEEK(cpu->BC.w);
+ cpu->AF.b.hi=PEEK(cpu->BC.w);
break;
case 0x0b: /* DEC BC */
@@ -1844,17 +1827,17 @@ void Z80_Decode(Z80 *cpu, Z80Byte opcode)
case 0x0c: /* INC C */
TSTATE(4);
- INC8(cpu->BC.b[LO]);
+ INC8(cpu->BC.b.lo);
break;
case 0x0d: /* DEC C */
TSTATE(4);
- DEC8(cpu->BC.b[LO]);
+ DEC8(cpu->BC.b.lo);
break;
case 0x0e: /* LD C,n */
TSTATE(7);
- cpu->BC.b[LO]=FETCH_BYTE;
+ cpu->BC.b.lo=FETCH_BYTE;
break;
case 0x0f: /* RRCA */
@@ -1863,7 +1846,7 @@ void Z80_Decode(Z80 *cpu, Z80Byte opcode)
break;
case 0x10: /* DJNZ */
- if (--(cpu->BC.b[HI]))
+ if (--(cpu->BC.b.hi))
{
TSTATE(13);
JR;
@@ -1882,7 +1865,7 @@ void Z80_Decode(Z80 *cpu, Z80Byte opcode)
case 0x12: /* LD (DE),A */
TSTATE(7);
- POKE(cpu->DE.w,cpu->AF.b[HI]);
+ POKE(cpu->DE.w,cpu->AF.b.hi);
break;
case 0x13: /* INC DE */
@@ -1892,17 +1875,17 @@ void Z80_Decode(Z80 *cpu, Z80Byte opcode)
case 0x14: /* INC D */
TSTATE(4);
- INC8(cpu->DE.b[HI]);
+ INC8(cpu->DE.b.hi);
break;
case 0x15: /* DEC D */
TSTATE(4);
- DEC8(cpu->DE.b[HI]);
+ DEC8(cpu->DE.b.hi);
break;
case 0x16: /* LD D,n */
TSTATE(7);
- cpu->DE.b[HI]=FETCH_BYTE;
+ cpu->DE.b.hi=FETCH_BYTE;
break;
case 0x17: /* RLA */
@@ -1922,7 +1905,7 @@ void Z80_Decode(Z80 *cpu, Z80Byte opcode)
case 0x1a: /* LD A,(DE) */
TSTATE(7);
- cpu->AF.b[HI]=PEEK(cpu->DE.w);
+ cpu->AF.b.hi=PEEK(cpu->DE.w);
break;
case 0x1b: /* DEC DE */
@@ -1932,17 +1915,17 @@ void Z80_Decode(Z80 *cpu, Z80Byte opcode)
case 0x1c: /* INC E */
TSTATE(4);
- INC8(cpu->DE.b[LO]);
+ INC8(cpu->DE.b.lo);
break;
case 0x1d: /* DEC E */
TSTATE(4);
- DEC8(cpu->DE.b[LO]);
+ DEC8(cpu->DE.b.lo);
break;
case 0x1e: /* LD E,n */
TSTATE(7);
- cpu->DE.b[LO]=FETCH_BYTE;
+ cpu->DE.b.lo=FETCH_BYTE;
break;
case 0x1f: /* RRA */
@@ -2025,10 +2008,10 @@ void Z80_Decode(Z80 *cpu, Z80Byte opcode)
case 0x2f: /* CPL */
TSTATE(4);
- cpu->AF.b[HI]^=0xff;
+ cpu->AF.b.hi^=0xff;
SETFLAG(H_Z80);
SETFLAG(N_Z80);
- SETHIDDEN(cpu->AF.b[HI]);
+ SETHIDDEN(cpu->AF.b.hi);
break;
case 0x30: /* JR NC,d */
@@ -2042,7 +2025,7 @@ void Z80_Decode(Z80 *cpu, Z80Byte opcode)
case 0x32: /* LD (nnnn),A */
TSTATE(13);
- POKE(FETCH_WORD,cpu->AF.b[HI]);
+ POKE(FETCH_WORD,cpu->AF.b.hi);
break;
case 0x33: /* INC SP */
@@ -2070,9 +2053,9 @@ void Z80_Decode(Z80 *cpu, Z80Byte opcode)
case 0x37: /* SCF */
TSTATE(4);
- cpu->AF.b[LO]=(cpu->AF.b[LO]&(S_Z80|Z_Z80|P_Z80))
+ cpu->AF.b.lo=(cpu->AF.b.lo&(S_Z80|Z_Z80|P_Z80))
| C_Z80
- | (cpu->AF.b[HI]&(B3_Z80|B5_Z80));
+ | (cpu->AF.b.hi&(B3_Z80|B5_Z80));
break;
case 0x38: /* JR C,d */
@@ -2086,7 +2069,7 @@ void Z80_Decode(Z80 *cpu, Z80Byte opcode)
case 0x3a: /* LD A,(nnnn) */
TSTATE(13);
- cpu->AF.b[HI]=PEEK(FETCH_WORD);
+ cpu->AF.b.hi=PEEK(FETCH_WORD);
break;
case 0x3b: /* DEC SP */
@@ -2096,17 +2079,17 @@ void Z80_Decode(Z80 *cpu, Z80Byte opcode)
case 0x3c: /* INC A */
TSTATE(4);
- INC8(cpu->AF.b[HI]);
+ INC8(cpu->AF.b.hi);
break;
case 0x3d: /* DEC A */
TSTATE(4);
- DEC8(cpu->AF.b[HI]);
+ DEC8(cpu->AF.b.hi);
break;
case 0x3e: /* LD A,n */
TSTATE(7);
- cpu->AF.b[HI]=FETCH_BYTE;
+ cpu->AF.b.hi=FETCH_BYTE;
break;
case 0x3f: /* CCF */
@@ -2117,51 +2100,51 @@ void Z80_Decode(Z80 *cpu, Z80Byte opcode)
else
CLRFLAG(H_Z80);
- cpu->AF.b[LO]^=C_Z80;
- SETHIDDEN(cpu->AF.b[HI]);
+ cpu->AF.b.lo^=C_Z80;
+ SETHIDDEN(cpu->AF.b.hi);
break;
- LD_BLOCK(0x40,cpu->BC.b[HI],cpu->BC.b[HI])
- LD_BLOCK(0x48,cpu->BC.b[LO],cpu->BC.b[LO])
- LD_BLOCK(0x50,cpu->DE.b[HI],cpu->DE.b[HI])
- LD_BLOCK(0x58,cpu->DE.b[LO],cpu->DE.b[LO])
- LD_BLOCK(0x60,*H,cpu->HL.b[HI])
- LD_BLOCK(0x68,*L,cpu->HL.b[LO])
+ LD_BLOCK(0x40,cpu->BC.b.hi,cpu->BC.b.hi)
+ LD_BLOCK(0x48,cpu->BC.b.lo,cpu->BC.b.lo)
+ LD_BLOCK(0x50,cpu->DE.b.hi,cpu->DE.b.hi)
+ LD_BLOCK(0x58,cpu->DE.b.lo,cpu->DE.b.lo)
+ LD_BLOCK(0x60,*H,cpu->HL.b.hi)
+ LD_BLOCK(0x68,*L,cpu->HL.b.lo)
case 0x70: /* LD (HL),B */
TSTATE(7);
OFFSET(off);
- POKE(*HL+off,cpu->BC.b[HI]);
+ POKE(*HL+off,cpu->BC.b.hi);
break;
case 0x71: /* LD (HL),C */
TSTATE(7);
OFFSET(off);
- POKE(*HL+off,cpu->BC.b[LO]);
+ POKE(*HL+off,cpu->BC.b.lo);
break;
case 0x72: /* LD (HL),D */
TSTATE(7);
OFFSET(off);
- POKE(*HL+off,cpu->DE.b[HI]);
+ POKE(*HL+off,cpu->DE.b.hi);
break;
case 0x73: /* LD (HL),E */
TSTATE(7);
OFFSET(off);
- POKE(*HL+off,cpu->DE.b[LO]);
+ POKE(*HL+off,cpu->DE.b.lo);
break;
case 0x74: /* LD (HL),H */
TSTATE(7);
OFFSET(off);
- POKE(*HL+off,cpu->HL.b[HI]);
+ POKE(*HL+off,cpu->HL.b.hi);
break;
case 0x75: /* LD (HL),L */
TSTATE(7);
OFFSET(off);
- POKE(*HL+off,cpu->HL.b[LO]);
+ POKE(*HL+off,cpu->HL.b.lo);
break;
case 0x76: /* HALT */
@@ -2177,10 +2160,10 @@ void Z80_Decode(Z80 *cpu, Z80Byte opcode)
case 0x77: /* LD (HL),A */
TSTATE(7);
OFFSET(off);
- POKE(*HL+off,cpu->AF.b[HI]);
+ POKE(*HL+off,cpu->AF.b.hi);
break;
- LD_BLOCK(0x78,cpu->AF.b[HI],cpu->AF.b[HI])
+ LD_BLOCK(0x78,cpu->AF.b.hi,cpu->AF.b.hi)
ALU_BLOCK(0x80,ADD8)
ALU_BLOCK(0x88,ADC8)
@@ -2294,8 +2277,8 @@ void Z80_Decode(Z80 *cpu, Z80Byte opcode)
Z80Word port;
port=FETCH_BYTE;
- port|=(Z80Word)cpu->AF.b[HI]<<8;
- PRIV->pwrite(cpu,port,cpu->AF.b[HI]);
+ port|=(Z80Word)cpu->AF.b.hi<<8;
+ PRIV->pwrite(cpu,port,cpu->AF.b.hi);
}
else
cpu->PC++;
@@ -2341,8 +2324,8 @@ void Z80_Decode(Z80 *cpu, Z80Byte opcode)
Z80Word port;
port=FETCH_BYTE;
- port|=(Z80Word)cpu->AF.b[HI]<<8;
- cpu->AF.b[HI]=PRIV->pread(cpu,port);
+ port|=(Z80Word)cpu->AF.b.hi<<8;
+ cpu->AF.b.hi=PRIV->pread(cpu,port);
}
else
cpu->PC++;