diff options
| -rw-r--r-- | z80_decode.c | 40 | ||||
| -rw-r--r-- | z80_private.h | 3 | 
2 files changed, 23 insertions, 20 deletions
| diff --git a/z80_decode.c b/z80_decode.c index 81760ae..036e34e 100644 --- a/z80_decode.c +++ b/z80_decode.c @@ -150,7 +150,7 @@ static Z80Word FPEEKW(Z80 *cpu, Z80Word addr)  */  #define SWAP(A,B) \  do { \ -    Z80Word swap_tmp; \ +    unsigned swap_tmp; \      swap_tmp=A; \      A=B; \      B=swap_tmp; \ @@ -162,11 +162,11 @@ do { \  #define ADD8(ONCE) \  do { \      Z80Byte VAL=ONCE; \ -    Z80Word w; \ -    w=cpu->AF.b[HI]+(Z80Word)VAL; \ +    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)&(cpu->AF.b[HI]^w)&0x80) cpu->AF.b[LO]|=P_Z80; \ +    if ((VAL^cpu->AF.b[HI]^0x80)&(VAL^w)&0x80) cpu->AF.b[LO]|=P_Z80; \      SETHIDDEN(w); \      cpu->AF.b[HI]=w; \  } while(0) @@ -175,11 +175,11 @@ do { \  #define ADC8(ONCE) \  do { \      Z80Byte VAL=ONCE; \ -    Z80Word w; \ -    w=(cpu->AF.b[HI]+(Z80Word)VAL+CARRY)&0x1ff; \ +    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)&(cpu->AF.b[HI]^w)&0x80) cpu->AF.b[LO]|=P_Z80; \ +    if ((VAL^cpu->AF.b[HI]^0x80)&(VAL^w)&0x80) cpu->AF.b[LO]|=P_Z80; \      SETHIDDEN(w); \      cpu->AF.b[HI]=w; \  } while(0) @@ -188,11 +188,11 @@ do { \  #define SUB8(ONCE) \  do { \      Z80Byte VAL=ONCE; \ -    Z80Word w; \ -    w=(cpu->AF.b[HI]-(Z80Word)VAL)&0x1ff; \ +    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]^0x80)&(cpu->AF.b[HI]^w)&0x80) cpu->AF.b[LO]|=P_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; \  } while(0) @@ -201,11 +201,11 @@ do { \  #define CMP8(ONCE) \  do { \      Z80Byte VAL=ONCE; \ -    Z80Word w; \ -    w=(cpu->AF.b[HI]-(Z80Word)VAL)&0x1ff; \ +    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]^0x80)&(cpu->AF.b[HI]^w)&0x80) cpu->AF.b[LO]|=P_Z80; \ +    if ((VAL^cpu->AF.b[HI])&(cpu->AF.b[HI]^w)&0x80) cpu->AF.b[LO]|=P_Z80; \      SETHIDDEN(VAL); \  } while(0) @@ -213,11 +213,11 @@ do { \  #define SBC8(ONCE) \  do { \      Z80Byte VAL=ONCE; \ -    Z80Word w; \ -    w=(cpu->AF.b[HI]-(Z80Word)VAL-CARRY)&0x1ff; \ +    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]^0x80)&(cpu->AF.b[HI]^w)&0x80) cpu->AF.b[LO]|=P_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; \  } while(0) @@ -243,6 +243,7 @@ do { \      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; \ @@ -257,11 +258,10 @@ do { \      Z80Val w; \      w=(REG)-(Z80Val)VAL-CARRY; \      cpu->AF.b[LO]=N_Z80; \ -    if ((w&0xffff)==0) cpu->AF.b[LO]=Z_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))&(VAL^w)&0x8000) cpu->AF.b[LO]|=P_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; \ @@ -442,8 +442,8 @@ do { \      else \      { \  	if (B==7) cpu->AF.b[LO]|=S_Z80; \ -	if (B==5) cpu->AF.b[LO]|=B5_Z80; \ -	if (B==3) cpu->AF.b[LO]|=B3_Z80; \ +	else if (B==5) cpu->AF.b[LO]|=B5_Z80; \ +	else if (B==3) cpu->AF.b[LO]|=B3_Z80; \      } \  } while(0) diff --git a/z80_private.h b/z80_private.h index 2797a8a..7a23d36 100644 --- a/z80_private.h +++ b/z80_private.h @@ -42,6 +42,9 @@  /* ---------------------------------------- TYPES  */ + +typedef signed short	sword; +  typedef union  {      Z80Word		w; | 
