⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpumacro.h

📁 著名SFC模拟器Snes9x的源代码。
💻 H
📖 第 1 页 / 共 2 页
字号:
    CPU.Cycles += ONE_CYCLE;#endif#ifdef CPU_SHUTDOWN    CPU.WaitAddress = NULL;#endif    Work8 = S9xGetByte (OpAddress) + 1;    S9xSetByte (Work8, OpAddress);    SetZN8 (Work8);}STATIC inline void LDA16 (){    Registers.A.W = S9xGetWord (OpAddress);    SetZN16 (Registers.A.W);}STATIC inline void LDA8 (){    Registers.AL = S9xGetByte (OpAddress);    SetZN8 (Registers.AL);}STATIC inline void LDX16 (){    Registers.X.W = S9xGetWord (OpAddress);    SetZN16 (Registers.X.W);}STATIC inline void LDX8 (){    Registers.XL = S9xGetByte (OpAddress);    SetZN8 (Registers.XL);}STATIC inline void LDY16 (){    Registers.Y.W = S9xGetWord (OpAddress);    SetZN16 (Registers.Y.W);}STATIC inline void LDY8 (){    Registers.YL = S9xGetByte (OpAddress);    SetZN8 (Registers.YL);}STATIC inline void A_LSR16 (){#ifdef VAR_CYCLES    CPU.Cycles += ONE_CYCLE;#endif    ICPU._Carry = Registers.AL & 1;    Registers.A.W >>= 1;    SetZN16 (Registers.A.W);}STATIC inline void A_LSR8 (){#ifdef VAR_CYCLES    CPU.Cycles += ONE_CYCLE;#endif    ICPU._Carry = Registers.AL & 1;    Registers.AL >>= 1;    SetZN8 (Registers.AL);}STATIC inline void LSR16 (){#ifdef VAR_CYCLES    CPU.Cycles += ONE_CYCLE;#endif    Work16 = S9xGetWord (OpAddress);    ICPU._Carry = Work16 & 1;    Work16 >>= 1;    S9xSetWord (Work16, OpAddress);    SetZN16 (Work16);}STATIC inline void LSR8 (){#ifdef VAR_CYCLES    CPU.Cycles += ONE_CYCLE;#endif    Work8 = S9xGetByte (OpAddress);    ICPU._Carry = Work8 & 1;    Work8 >>= 1;    S9xSetByte (Work8, OpAddress);    SetZN8 (Work8);}STATIC inline void ORA16 (){    Registers.A.W |= S9xGetWord (OpAddress);    SetZN16 (Registers.A.W);}STATIC inline void ORA8 (){    Registers.AL |= S9xGetByte (OpAddress);    SetZN8 (Registers.AL);}STATIC inline void A_ROL16 (){#ifdef VAR_CYCLES    CPU.Cycles += ONE_CYCLE;#endif    Work32 = (Registers.A.W << 1) | CheckCarry();    ICPU._Carry = Work32 >= 0x10000;    Registers.A.W = (uint16) Work32;    SetZN16 ((uint16) Work32);}STATIC inline void A_ROL8 (){#ifdef VAR_CYCLES    CPU.Cycles += ONE_CYCLE;#endif    Work16 = Registers.AL;    Work16 <<= 1;    Work16 |= CheckCarry();    ICPU._Carry = Work16 >= 0x100;    Registers.AL = (uint8) Work16;    SetZN8 ((uint8) Work16);}STATIC inline void ROL16 (){#ifdef VAR_CYCLES    CPU.Cycles += ONE_CYCLE;#endif    Work32 = S9xGetWord (OpAddress);    Work32 <<= 1;    Work32 |= CheckCarry();    ICPU._Carry = Work32 >= 0x10000;    S9xSetWord ((uint16) Work32, OpAddress);    SetZN16 ((uint16) Work32);}STATIC inline void ROL8 (){#ifdef VAR_CYCLES    CPU.Cycles += ONE_CYCLE;#endif    Work16 = S9xGetByte (OpAddress);    Work16 <<= 1;    Work16 |= CheckCarry ();    ICPU._Carry = Work16 >= 0x100;    S9xSetByte ((uint8) Work16, OpAddress);    SetZN8 ((uint8) Work16);}STATIC inline void A_ROR16 (){#ifdef VAR_CYCLES    CPU.Cycles += ONE_CYCLE;#endif    Work32 = Registers.A.W;    Work32 |= (int) CheckCarry() << 16;    ICPU._Carry = (uint8) (Work32 & 1);    Work32 >>= 1;    Registers.A.W = (uint16) Work32;    SetZN16 ((uint16) Work32);}STATIC inline void A_ROR8 (){#ifdef VAR_CYCLES    CPU.Cycles += ONE_CYCLE;#endif    Work16 = Registers.AL | ((uint16) CheckCarry() << 8);    ICPU._Carry = (uint8) Work16 & 1;    Work16 >>= 1;    Registers.AL = (uint8) Work16;    SetZN8 ((uint8) Work16);}STATIC inline void ROR16 (){#ifdef VAR_CYCLES    CPU.Cycles += ONE_CYCLE;#endif    Work32 = S9xGetWord (OpAddress);    Work32 |= (int) CheckCarry() << 16;    ICPU._Carry = (uint8) (Work32 & 1);    Work32 >>= 1;    S9xSetWord ((uint16) Work32, OpAddress);    SetZN16 ((uint16) Work32);}STATIC inline void ROR8 (){#ifdef VAR_CYCLES    CPU.Cycles += ONE_CYCLE;#endif    Work16 = S9xGetByte (OpAddress);    Work16 |= (int) CheckCarry () << 8;    ICPU._Carry = (uint8) (Work16 & 1);    Work16 >>= 1;    S9xSetByte ((uint8) Work16, OpAddress);    SetZN8 ((uint8) Work16);}STATIC inline void SBC16 (){    Work16 = S9xGetWord (OpAddress);    if (CheckDecimal ())    {	A1 = (Registers.A.W) & 0xF;	A2 = (Registers.A.W >> 4) & 0xF;	A3 = (Registers.A.W >> 8) & 0xF;	A4 = (Registers.A.W >> 12) & 0xF;	W1 = Work16 & 0xF;	W2 = (Work16 >> 4) & 0xF;	W3 = (Work16 >> 8) & 0xF;	W4 = (Work16 >> 12) & 0xF;	A1 -= W1 + !CheckCarry ();	A2 -= W2;	A3 -= W3;	A4 -= W4;	if (A1 > 9)	{	    A1 += 10;	    A2--;	}	if (A2 > 9)	{	    A2 += 10;	    A3--;	}	if (A3 > 9)	{	    A3 += 10;	    A4--;	}	if (A4 > 9)	{	    A4 += 10;	    ClearCarry ();	}	else	{	    SetCarry ();	}	Ans16 = (A4 << 12) | (A3 << 8) | (A2 << 4) | (A1);	if ((Registers.A.W ^ Work16) &	    (Registers.A.W ^ Ans16) & 0x8000)	    SetOverflow();	else	    ClearOverflow();	Registers.A.W = Ans16;	SetZN16 (Registers.A.W);    }    else    {	Int32 = (long) Registers.A.W - (long) Work16 + (long) CheckCarry() - 1;	ICPU._Carry = Int32 >= 0;	if ((Registers.A.W ^ Work16) &	    (Registers.A.W ^ (uint16) Int32) & 0x8000)	    SetOverflow();	else	    ClearOverflow ();	Registers.A.W = (uint16) Int32;	SetZN16 (Registers.A.W);    }}STATIC inline void SBC8 (){    Work8 = S9xGetByte (OpAddress);    if (CheckDecimal ())    {	A1 = (Registers.A.W) & 0xF;	A2 = (Registers.A.W >> 4) & 0xF;	W1 = Work8 & 0xF;	W2 = (Work8 >> 4) & 0xF;	A1 -= W1 + !CheckCarry ();	A2 -= W2;	if (A1 > 9)	{	    A1 += 10;	    A2--;	}	if (A2 > 9)	{	    A2 += 10;	    ClearCarry ();	}	else	{	    SetCarry ();	}	Ans8 = (A2 << 4) | A1;	if ((Registers.AL ^ Work8) &	    (Registers.AL ^ Ans8) & 0x80)	    SetOverflow ();	else	    ClearOverflow ();	Registers.AL = Ans8;	SetZN8 (Registers.AL);    }    else    {	Int16 = (short) Registers.AL - (short) Work8 + (short) CheckCarry() - 1;	ICPU._Carry = Int16 >= 0;	if ((Registers.AL ^ Work8) &	    (Registers.AL ^ (uint8) Int16) & 0x80)	    SetOverflow ();	else	    ClearOverflow ();	Registers.AL = (uint8) Int16;	SetZN8 (Registers.AL);    }}STATIC inline void STA16 (){    S9xSetWord (Registers.A.W, OpAddress);}STATIC inline void STA8 (){    S9xSetByte (Registers.AL, OpAddress);}STATIC inline void STX16 (){    S9xSetWord (Registers.X.W, OpAddress);}STATIC inline void STX8 (){    S9xSetByte (Registers.XL, OpAddress);}STATIC inline void STY16 (){    S9xSetWord (Registers.Y.W, OpAddress);}STATIC inline void STY8 (){    S9xSetByte (Registers.YL, OpAddress);}STATIC inline void STZ16 (){    S9xSetWord (0, OpAddress);}STATIC inline void STZ8 (){    S9xSetByte (0, OpAddress);}STATIC inline void TSB16 (){#ifdef VAR_CYCLES    CPU.Cycles += ONE_CYCLE;#endif    Work16 = S9xGetWord (OpAddress);    ICPU._Zero = (Work16 & Registers.A.W) != 0;    Work16 |= Registers.A.W;    S9xSetWord (Work16, OpAddress);}STATIC inline void TSB8 (){#ifdef VAR_CYCLES    CPU.Cycles += ONE_CYCLE;#endif    Work8 = S9xGetByte (OpAddress);    ICPU._Zero = Work8 & Registers.AL;    Work8 |= Registers.AL;    S9xSetByte (Work8, OpAddress);}STATIC inline void TRB16 (){#ifdef VAR_CYCLES    CPU.Cycles += ONE_CYCLE;#endif    Work16 = S9xGetWord (OpAddress);    ICPU._Zero = (Work16 & Registers.A.W) != 0;    Work16 &= ~Registers.A.W;    S9xSetWord (Work16, OpAddress);}STATIC inline void TRB8 (){#ifdef VAR_CYCLES    CPU.Cycles += ONE_CYCLE;#endif    Work8 = S9xGetByte (OpAddress);    ICPU._Zero = Work8 & Registers.AL;    Work8 &= ~Registers.AL;    S9xSetByte (Work8, OpAddress);}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -