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

📄 spc700.cpp

📁 SFC游戏模拟器 snes9x 1.43 的原代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
{// OR dp,#00    Work8 = OP1;    Work8 |= S9xAPUGetByteZ (OP2);    S9xAPUSetByteZ (Work8, OP2);    APUSetZN8 (Work8);    IAPU.PC += 3;}void Apu19 (){// OR (X),(Y)    Work8 = S9xAPUGetByteZ (APURegisters.X) | S9xAPUGetByteZ (APURegisters.YA.B.Y);    APUSetZN8 (Work8);    S9xAPUSetByteZ (Work8, APURegisters.X);    IAPU.PC++;}void Apu0A (){// OR1 C,membit    MemBit ();    if (!APUCheckCarry ())    {	if (S9xAPUGetByte (IAPU.Address) & (1 << IAPU.Bit))	    APUSetCarry ();    }    IAPU.PC += 3;}void Apu2A (){// OR1 C,not membit    MemBit ();    if (!APUCheckCarry ())    {	if (!(S9xAPUGetByte (IAPU.Address) & (1 << IAPU.Bit)))	    APUSetCarry ();    }    IAPU.PC += 3;}void Apu4A (){// AND1 C,membit    MemBit ();    if (APUCheckCarry ())    {	if (!(S9xAPUGetByte (IAPU.Address) & (1 << IAPU.Bit)))	    APUClearCarry ();    }    IAPU.PC += 3;}void Apu6A (){// AND1 C, not membit    MemBit ();    if (APUCheckCarry ())    {	if ((S9xAPUGetByte (IAPU.Address) & (1 << IAPU.Bit)))	    APUClearCarry ();    }    IAPU.PC += 3;}void Apu8A (){// EOR1 C, membit    MemBit ();    if (APUCheckCarry ())    {	if (S9xAPUGetByte (IAPU.Address) & (1 << IAPU.Bit))	    APUClearCarry ();    }    else    {	if (S9xAPUGetByte (IAPU.Address) & (1 << IAPU.Bit))	    APUSetCarry ();    }    IAPU.PC += 3;}void ApuAA (){// MOV1 C,membit    MemBit ();    if (S9xAPUGetByte (IAPU.Address) & (1 << IAPU.Bit))	APUSetCarry ();    else	APUClearCarry ();    IAPU.PC += 3;}void ApuCA (){// MOV1 membit,C    MemBit ();    if (APUCheckCarry ())    {	S9xAPUSetByte (S9xAPUGetByte (IAPU.Address) | (1 << IAPU.Bit), IAPU.Address);    }    else    {	S9xAPUSetByte (S9xAPUGetByte (IAPU.Address) & ~(1 << IAPU.Bit), IAPU.Address);    }    IAPU.PC += 3;}void ApuEA (){// NOT1 membit    MemBit ();    S9xAPUSetByte (S9xAPUGetByte (IAPU.Address) ^ (1 << IAPU.Bit), IAPU.Address);    IAPU.PC += 3;}void Apu0B (){// ASL dp    Work8 = S9xAPUGetByteZ (OP1);    ASL (Work8);    S9xAPUSetByteZ (Work8, OP1);    IAPU.PC += 2;}void Apu0C (){// ASL abs    Absolute ();    Work8 = S9xAPUGetByte (IAPU.Address);    ASL (Work8);    S9xAPUSetByte (Work8, IAPU.Address);    IAPU.PC += 3;}void Apu1B (){// ASL dp+X    Work8 = S9xAPUGetByteZ (OP1 + APURegisters.X);    ASL (Work8);    S9xAPUSetByteZ (Work8, OP1 + APURegisters.X);    IAPU.PC += 2;}void Apu1C (){// ASL A    ASL (APURegisters.YA.B.A);    IAPU.PC++;}void Apu0D (){// PUSH PSW    S9xAPUPackStatus ();    Push (APURegisters.P);    IAPU.PC++;}void Apu2D (){// PUSH A    Push (APURegisters.YA.B.A);    IAPU.PC++;}void Apu4D (){// PUSH X    Push (APURegisters.X);    IAPU.PC++;}void Apu6D (){// PUSH Y    Push (APURegisters.YA.B.Y);    IAPU.PC++;}void Apu8E (){// POP PSW    Pop (APURegisters.P);    S9xAPUUnpackStatus ();    if (APUCheckDirectPage ())	IAPU.DirectPage = IAPU.RAM + 0x100;    else	IAPU.DirectPage = IAPU.RAM;    IAPU.PC++;}void ApuAE (){// POP A    Pop (APURegisters.YA.B.A);    IAPU.PC++;}void ApuCE (){// POP X    Pop (APURegisters.X);    IAPU.PC++;}void ApuEE (){// POP Y    Pop (APURegisters.YA.B.Y);    IAPU.PC++;}void Apu0E (){// TSET1 abs    Absolute ();    Work8 = S9xAPUGetByte (IAPU.Address);    S9xAPUSetByte (Work8 | APURegisters.YA.B.A, IAPU.Address);    Work8 &= APURegisters.YA.B.A;    APUSetZN8 (Work8);    IAPU.PC += 3;}void Apu4E (){// TCLR1 abs    Absolute ();    Work8 = S9xAPUGetByte (IAPU.Address);    S9xAPUSetByte (Work8 & ~APURegisters.YA.B.A, IAPU.Address);    Work8 &= APURegisters.YA.B.A;    APUSetZN8 (Work8);    IAPU.PC += 3;}void Apu0F (){// BRK#if 0    STOP ("BRK");#else    PushW (IAPU.PC + 1 - IAPU.RAM);    S9xAPUPackStatus ();    Push (APURegisters.P);    APUSetBreak ();    APUClearInterrupt ();// XXX:Where is the BRK vector ???    IAPU.PC = IAPU.RAM + APU.ExtraRAM[0x20] + (APU.ExtraRAM[0x21] << 8);#endif}void ApuEF (){// SLEEP    // XXX: sleep    // STOP ("SLEEP");    IAPU.APUExecuting = FALSE;    IAPU.PC++;}void ApuFF (){// STOP    // STOP ("STOP");    IAPU.APUExecuting = FALSE;    IAPU.PC++;}void Apu10 (){// BPL    Relative ();    if (!APUCheckNegative ())    {	IAPU.PC = IAPU.RAM + (uint16) Int16;	APU.Cycles += IAPU.TwoCycles;	APUShutdown ();    }    else	IAPU.PC += 2;}void Apu30 (){// BMI    Relative ();    if (APUCheckNegative ())    {	IAPU.PC = IAPU.RAM + (uint16) Int16;	APU.Cycles += IAPU.TwoCycles;	APUShutdown ();    }    else	IAPU.PC += 2;}void Apu90 (){// BCC    Relative ();    if (!APUCheckCarry ())    {	IAPU.PC = IAPU.RAM + (uint16) Int16;	APU.Cycles += IAPU.TwoCycles;	APUShutdown ();    }    else	IAPU.PC += 2;}void ApuB0 (){// BCS    Relative ();    if (APUCheckCarry ())    {	IAPU.PC = IAPU.RAM + (uint16) Int16;	APU.Cycles += IAPU.TwoCycles;	APUShutdown ();    }    else	IAPU.PC += 2;}void ApuD0 (){// BNE    Relative ();    if (!APUCheckZero ())    {	IAPU.PC = IAPU.RAM + (uint16) Int16;	APU.Cycles += IAPU.TwoCycles;	APUShutdown ();    }    else	IAPU.PC += 2;}void ApuF0 (){// BEQ    Relative ();    if (APUCheckZero ())    {	IAPU.PC = IAPU.RAM + (uint16) Int16;	APU.Cycles += IAPU.TwoCycles;	APUShutdown ();    }    else	IAPU.PC += 2;}void Apu50 (){// BVC    Relative ();    if (!APUCheckOverflow ())    {	IAPU.PC = IAPU.RAM + (uint16) Int16;	APU.Cycles += IAPU.TwoCycles;    }    else	IAPU.PC += 2;}void Apu70 (){// BVS    Relative ();    if (APUCheckOverflow ())    {	IAPU.PC = IAPU.RAM + (uint16) Int16;	APU.Cycles += IAPU.TwoCycles;    }    else	IAPU.PC += 2;}void Apu2F (){// BRA    Relative ();    IAPU.PC = IAPU.RAM + (uint16) Int16;}void Apu80 (){// SETC    APUSetCarry ();    IAPU.PC++;}void ApuED (){// NOTC    IAPU._Carry ^= 1;    IAPU.PC++;}void Apu40 (){// SETP    APUSetDirectPage ();    IAPU.DirectPage = IAPU.RAM + 0x100;    IAPU.PC++;}void Apu1A (){// DECW dp    Work16 = S9xAPUGetByteZ (OP1) + (S9xAPUGetByteZ (OP1 + 1) << 8);    Work16--;    S9xAPUSetByteZ ((uint8) Work16, OP1);    S9xAPUSetByteZ (Work16 >> 8, OP1 + 1);    APUSetZN16 (Work16);    IAPU.PC += 2;}void Apu5A (){// CMPW YA,dp    Work16 = S9xAPUGetByteZ (OP1) + (S9xAPUGetByteZ (OP1 + 1) << 8);    Int32 = (long) APURegisters.YA.W - (long) Work16;    IAPU._Carry = Int32 >= 0;    APUSetZN16 ((uint16) Int32);    IAPU.PC += 2;}void Apu3A (){// INCW dp    Work16 = S9xAPUGetByteZ (OP1) + (S9xAPUGetByteZ (OP1 + 1) << 8);    Work16++;    S9xAPUSetByteZ ((uint8) Work16, OP1);    S9xAPUSetByteZ (Work16 >> 8, OP1 + 1);    APUSetZN16 (Work16);    IAPU.PC += 2;}// XXX: HalfCarry - BJ Fixed? Or is it between bits 7 and 8 for ADDW/SUBW?void Apu7A (){// ADDW YA,dp    Work16 = S9xAPUGetByteZ (OP1) + (S9xAPUGetByteZ (OP1 + 1) << 8);    Work32 = (uint32) APURegisters.YA.W + Work16;    IAPU._Carry = Work32 >= 0x10000;    if (~(APURegisters.YA.W ^ Work16) & (Work16 ^ (uint16) Work32) & 0x8000)	APUSetOverflow ();    else	APUClearOverflow ();    APUClearHalfCarry ();    if((APURegisters.YA.W ^ Work16 ^ (uint16) Work32) & 0x10)        APUSetHalfCarry ();    APURegisters.YA.W = (uint16) Work32;    APUSetZN16 (APURegisters.YA.W);    IAPU.PC += 2;}// XXX: BJ: i think the old HalfCarry behavior was wrong...// XXX: Or is it between bits 7 and 8 for ADDW/SUBW?void Apu9A (){// SUBW YA,dp    Work16 = S9xAPUGetByteZ (OP1) + (S9xAPUGetByteZ (OP1 + 1) << 8);    Int32 = (long) APURegisters.YA.W - (long) Work16;    APUClearHalfCarry ();    IAPU._Carry = Int32 >= 0;    if (((APURegisters.YA.W ^ Work16) & 0x8000) &&	    ((APURegisters.YA.W ^ (uint16) Int32) & 0x8000))	APUSetOverflow ();    else	APUClearOverflow ();    if (((APURegisters.YA.W ^ Work16) & 0x0080) &&	    ((APURegisters.YA.W ^ (uint16) Int32) & 0x0080))	APUSetHalfCarry ();    APUSetHalfCarry ();    if((APURegisters.YA.W ^ Work16 ^ (uint16) Work32) & 0x10)        APUClearHalfCarry ();    APURegisters.YA.W = (uint16) Int32;    APUSetZN16 (APURegisters.YA.W);    IAPU.PC += 2;}void ApuBA (){// MOVW YA,dp    APURegisters.YA.B.A = S9xAPUGetByteZ (OP1);    APURegisters.YA.B.Y = S9xAPUGetByteZ (OP1 + 1);    APUSetZN16 (APURegisters.YA.W);    IAPU.PC += 2;}void ApuDA (){// MOVW dp,YA    S9xAPUSetByteZ (APURegisters.YA.B.A, OP1);    S9xAPUSetByteZ (APURegisters.YA.B.Y, OP1 + 1);    IAPU.PC += 2;}void Apu64 (){// CMP A,dp    Work8 = S9xAPUGetByteZ (OP1);    CMP (APURegisters.YA.B.A, Work8);    IAPU.PC += 2;}void Apu65 (){// CMP A,abs    Absolute ();    Work8 = S9xAPUGetByte (IAPU.Address);    CMP (APURegisters.YA.B.A, Work8);    IAPU.PC += 3;}void Apu66 (){// CMP A,(X)    Work8 = S9xAPUGetByteZ (APURegisters.X);    CMP (APURegisters.YA.B.A, Work8);    IAPU.PC++;}void Apu67 (){// CMP A,(dp+X)    IndexedXIndirect ();    Work8 = S9xAPUGetByte (IAPU.Address);    CMP (APURegisters.YA.B.A, Work8);    IAPU.PC += 2;}void Apu68 (){// CMP A,#00    Work8 = OP1;    CMP (APURegisters.YA.B.A, Work8);    IAPU.PC += 2;}void Apu69 (){// CMP dp(dest), dp(src)    W1 = S9xAPUGetByteZ (OP1);    Work8 = S9xAPUGetByteZ (OP2);    CMP (Work8, W1);    IAPU.PC += 3;}void Apu74 (){// CMP A, dp+X    Work8 = S9xAPUGetByteZ (OP1 + APURegisters.X);    CMP (APURegisters.YA.B.A, Work8);    IAPU.PC += 2;}void Apu75 (){// CMP A,abs+X    AbsoluteX ();    Work8 = S9xAPUGetByte (IAPU.Address);    CMP (APURegisters.YA.B.A, Work8);    IAPU.PC += 3;}void Apu76 (){// CMP A, abs+Y    AbsoluteY ();    Work8 = S9xAPUGetByte (IAPU.Address);    CMP (APURegisters.YA.B.A, Work8);    IAPU.PC += 3;}void Apu77 (){// CMP A,(dp)+Y    IndirectIndexedY ();    Work8 = S9xAPUGetByte (IAPU.Address);    CMP (APURegisters.YA.B.A, Work8);    IAPU.PC += 2;}void Apu78 (){// CMP dp,#00    Work8 = OP1;    W1 = S9xAPUGetByteZ (OP2);    CMP (W1, Work8);    IAPU.PC += 3;}void Apu79 (){// CMP (X),(Y)    W1 = S9xAPUGetByteZ (APURegisters.X);    Work8 = S9xAPUGetByteZ (APURegisters.YA.B.Y);    CMP (W1, Work8);    IAPU.PC++;}void Apu1E (){// CMP X,abs    Absolute ();    Work8 = S9xAPUGetByte (IAPU.Address);    CMP (APURegisters.X, Work8);    IAPU.PC += 3;}void Apu3E (){// CMP X,dp    Work8 = S9xAPUGetByteZ (OP1);    CMP (APURegisters.X, Work8);    IAPU.PC += 2;}void ApuC8 (){// CMP X,#00    CMP (APURegisters.X, OP1);    IAPU.PC += 2;}void Apu5E (){// CMP Y,abs    Absolute ();    Work8 = S9xAPUGetByte (IAPU.Address);    CMP (APURegisters.YA.B.Y, Work8);    IAPU.PC += 3;}void Apu7E (){// CMP Y,dp    Work8 = S9xAPUGetByteZ (OP1);

⌨️ 快捷键说明

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