📄 spc700.cpp
字号:
CMP (APURegisters.YA.B.Y, Work8); IAPU.PC += 2;}void ApuAD (){// CMP Y,#00 Work8 = OP1; CMP (APURegisters.YA.B.Y, Work8); IAPU.PC += 2;}void Apu1F (){// JMP (abs+X) Absolute (); IAPU.PC = IAPU.RAM + S9xAPUGetByte (IAPU.Address + APURegisters.X) + (S9xAPUGetByte (IAPU.Address + APURegisters.X + 1) << 8);// XXX: HERE: // APU.Flags |= TRACE_FLAG;}void Apu5F (){// JMP abs Absolute (); IAPU.PC = IAPU.RAM + IAPU.Address;}void Apu20 (){// CLRP APUClearDirectPage (); IAPU.DirectPage = IAPU.RAM; IAPU.PC++;}void Apu60 (){// CLRC APUClearCarry (); IAPU.PC++;}void ApuE0 (){// CLRV APUClearHalfCarry (); APUClearOverflow (); IAPU.PC++;}void Apu24 (){// AND A,dp APURegisters.YA.B.A &= S9xAPUGetByteZ (OP1); APUSetZN8 (APURegisters.YA.B.A); IAPU.PC += 2;}void Apu25 (){// AND A,abs Absolute (); APURegisters.YA.B.A &= S9xAPUGetByte (IAPU.Address); APUSetZN8 (APURegisters.YA.B.A); IAPU.PC += 3;}void Apu26 (){// AND A,(X) APURegisters.YA.B.A &= S9xAPUGetByteZ (APURegisters.X); APUSetZN8 (APURegisters.YA.B.A); IAPU.PC++;}void Apu27 (){// AND A,(dp+X) IndexedXIndirect (); APURegisters.YA.B.A &= S9xAPUGetByte (IAPU.Address); APUSetZN8 (APURegisters.YA.B.A); IAPU.PC += 2;}void Apu28 (){// AND A,#00 APURegisters.YA.B.A &= OP1; APUSetZN8 (APURegisters.YA.B.A); IAPU.PC += 2;}void Apu29 (){// AND dp(dest),dp(src) Work8 = S9xAPUGetByteZ (OP1); Work8 &= S9xAPUGetByteZ (OP2); S9xAPUSetByteZ (Work8, OP2); APUSetZN8 (Work8); IAPU.PC += 3;}void Apu34 (){// AND A,dp+X APURegisters.YA.B.A &= S9xAPUGetByteZ (OP1 + APURegisters.X); APUSetZN8 (APURegisters.YA.B.A); IAPU.PC += 2;}void Apu35 (){// AND A,abs+X AbsoluteX (); APURegisters.YA.B.A &= S9xAPUGetByte (IAPU.Address); APUSetZN8 (APURegisters.YA.B.A); IAPU.PC += 3;}void Apu36 (){// AND A,abs+Y AbsoluteY (); APURegisters.YA.B.A &= S9xAPUGetByte (IAPU.Address); APUSetZN8 (APURegisters.YA.B.A); IAPU.PC += 3;}void Apu37 (){// AND A,(dp)+Y IndirectIndexedY (); APURegisters.YA.B.A &= S9xAPUGetByte (IAPU.Address); APUSetZN8 (APURegisters.YA.B.A); IAPU.PC += 2;}void Apu38 (){// AND dp,#00 Work8 = OP1; Work8 &= S9xAPUGetByteZ (OP2); S9xAPUSetByteZ (Work8, OP2); APUSetZN8 (Work8); IAPU.PC += 3;}void Apu39 (){// AND (X),(Y) Work8 = S9xAPUGetByteZ (APURegisters.X) & S9xAPUGetByteZ (APURegisters.YA.B.Y); APUSetZN8 (Work8); S9xAPUSetByteZ (Work8, APURegisters.X); IAPU.PC++;}void Apu2B (){// ROL dp Work8 = S9xAPUGetByteZ (OP1); ROL (Work8); S9xAPUSetByteZ (Work8, OP1); IAPU.PC += 2;}void Apu2C (){// ROL abs Absolute (); Work8 = S9xAPUGetByte (IAPU.Address); ROL (Work8); S9xAPUSetByte (Work8, IAPU.Address); IAPU.PC += 3;}void Apu3B (){// ROL dp+X Work8 = S9xAPUGetByteZ (OP1 + APURegisters.X); ROL (Work8); S9xAPUSetByteZ (Work8, OP1 + APURegisters.X); IAPU.PC += 2;}void Apu3C (){// ROL A ROL (APURegisters.YA.B.A); IAPU.PC++;}void Apu2E (){// CBNE dp,rel Work8 = OP1; Relative2 (); if (S9xAPUGetByteZ (Work8) != APURegisters.YA.B.A) { IAPU.PC = IAPU.RAM + (uint16) Int16; APU.Cycles += IAPU.TwoCycles; APUShutdown (); } else IAPU.PC += 3;}void ApuDE (){// CBNE dp+X,rel Work8 = OP1 + APURegisters.X; Relative2 (); if (S9xAPUGetByteZ (Work8) != APURegisters.YA.B.A) { IAPU.PC = IAPU.RAM + (uint16) Int16; APU.Cycles += IAPU.TwoCycles; APUShutdown (); } else IAPU.PC += 3;}void Apu3D (){// INC X APURegisters.X++; APUSetZN8 (APURegisters.X);#ifdef SPC700_SHUTDOWN IAPU.WaitCounter++;#endif IAPU.PC++;}void ApuFC (){// INC Y APURegisters.YA.B.Y++; APUSetZN8 (APURegisters.YA.B.Y);#ifdef SPC700_SHUTDOWN IAPU.WaitCounter++;#endif IAPU.PC++;}void Apu1D (){// DEC X APURegisters.X--; APUSetZN8 (APURegisters.X);#ifdef SPC700_SHUTDOWN IAPU.WaitCounter++;#endif IAPU.PC++;}void ApuDC (){// DEC Y APURegisters.YA.B.Y--; APUSetZN8 (APURegisters.YA.B.Y);#ifdef SPC700_SHUTDOWN IAPU.WaitCounter++;#endif IAPU.PC++;}void ApuAB (){// INC dp Work8 = S9xAPUGetByteZ (OP1) + 1; S9xAPUSetByteZ (Work8, OP1); APUSetZN8 (Work8);#ifdef SPC700_SHUTDOWN IAPU.WaitCounter++;#endif IAPU.PC += 2;}void ApuAC (){// INC abs Absolute (); Work8 = S9xAPUGetByte (IAPU.Address) + 1; S9xAPUSetByte (Work8, IAPU.Address); APUSetZN8 (Work8);#ifdef SPC700_SHUTDOWN IAPU.WaitCounter++;#endif IAPU.PC += 3;}void ApuBB (){// INC dp+X Work8 = S9xAPUGetByteZ (OP1 + APURegisters.X) + 1; S9xAPUSetByteZ (Work8, OP1 + APURegisters.X); APUSetZN8 (Work8);#ifdef SPC700_SHUTDOWN IAPU.WaitCounter++;#endif IAPU.PC += 2;}void ApuBC (){// INC A APURegisters.YA.B.A++; APUSetZN8 (APURegisters.YA.B.A);#ifdef SPC700_SHUTDOWN IAPU.WaitCounter++;#endif IAPU.PC++;}void Apu8B (){// DEC dp Work8 = S9xAPUGetByteZ (OP1) - 1; S9xAPUSetByteZ (Work8, OP1); APUSetZN8 (Work8);#ifdef SPC700_SHUTDOWN IAPU.WaitCounter++;#endif IAPU.PC += 2;}void Apu8C (){// DEC abs Absolute (); Work8 = S9xAPUGetByte (IAPU.Address) - 1; S9xAPUSetByte (Work8, IAPU.Address); APUSetZN8 (Work8);#ifdef SPC700_SHUTDOWN IAPU.WaitCounter++;#endif IAPU.PC += 3;}void Apu9B (){// DEC dp+X Work8 = S9xAPUGetByteZ (OP1 + APURegisters.X) - 1; S9xAPUSetByteZ (Work8, OP1 + APURegisters.X); APUSetZN8 (Work8);#ifdef SPC700_SHUTDOWN IAPU.WaitCounter++;#endif IAPU.PC += 2;}void Apu9C (){// DEC A APURegisters.YA.B.A--; APUSetZN8 (APURegisters.YA.B.A);#ifdef SPC700_SHUTDOWN IAPU.WaitCounter++;#endif IAPU.PC++;}void Apu44 (){// EOR A,dp APURegisters.YA.B.A ^= S9xAPUGetByteZ (OP1); APUSetZN8 (APURegisters.YA.B.A); IAPU.PC += 2;}void Apu45 (){// EOR A,abs Absolute (); APURegisters.YA.B.A ^= S9xAPUGetByte (IAPU.Address); APUSetZN8 (APURegisters.YA.B.A); IAPU.PC += 3;}void Apu46 (){// EOR A,(X) APURegisters.YA.B.A ^= S9xAPUGetByteZ (APURegisters.X); APUSetZN8 (APURegisters.YA.B.A); IAPU.PC++;}void Apu47 (){// EOR A,(dp+X) IndexedXIndirect (); APURegisters.YA.B.A ^= S9xAPUGetByte (IAPU.Address); APUSetZN8 (APURegisters.YA.B.A); IAPU.PC += 2;}void Apu48 (){// EOR A,#00 APURegisters.YA.B.A ^= OP1; APUSetZN8 (APURegisters.YA.B.A); IAPU.PC += 2;}void Apu49 (){// EOR dp(dest),dp(src) Work8 = S9xAPUGetByteZ (OP1); Work8 ^= S9xAPUGetByteZ (OP2); S9xAPUSetByteZ (Work8, OP2); APUSetZN8 (Work8); IAPU.PC += 3;}void Apu54 (){// EOR A,dp+X APURegisters.YA.B.A ^= S9xAPUGetByteZ (OP1 + APURegisters.X); APUSetZN8 (APURegisters.YA.B.A); IAPU.PC += 2;}void Apu55 (){// EOR A,abs+X AbsoluteX (); APURegisters.YA.B.A ^= S9xAPUGetByte (IAPU.Address); APUSetZN8 (APURegisters.YA.B.A); IAPU.PC += 3;}void Apu56 (){// EOR A,abs+Y AbsoluteY (); APURegisters.YA.B.A ^= S9xAPUGetByte (IAPU.Address); APUSetZN8 (APURegisters.YA.B.A); IAPU.PC += 3;}void Apu57 (){// EOR A,(dp)+Y IndirectIndexedY (); APURegisters.YA.B.A ^= S9xAPUGetByte (IAPU.Address); APUSetZN8 (APURegisters.YA.B.A); IAPU.PC += 2;}void Apu58 (){// EOR dp,#00 Work8 = OP1; Work8 ^= S9xAPUGetByteZ (OP2); S9xAPUSetByteZ (Work8, OP2); APUSetZN8 (Work8); IAPU.PC += 3;}void Apu59 (){// EOR (X),(Y) Work8 = S9xAPUGetByteZ (APURegisters.X) ^ S9xAPUGetByteZ (APURegisters.YA.B.Y); APUSetZN8 (Work8); S9xAPUSetByteZ (Work8, APURegisters.X); IAPU.PC++;}void Apu4B (){// LSR dp Work8 = S9xAPUGetByteZ (OP1); LSR (Work8); S9xAPUSetByteZ (Work8, OP1); IAPU.PC += 2;}void Apu4C (){// LSR abs Absolute (); Work8 = S9xAPUGetByte (IAPU.Address); LSR (Work8); S9xAPUSetByte (Work8, IAPU.Address); IAPU.PC += 3;}void Apu5B (){// LSR dp+X Work8 = S9xAPUGetByteZ (OP1 + APURegisters.X); LSR (Work8); S9xAPUSetByteZ (Work8, OP1 + APURegisters.X); IAPU.PC += 2;}void Apu5C (){// LSR A LSR (APURegisters.YA.B.A); IAPU.PC++;}void Apu7D (){// MOV A,X APURegisters.YA.B.A = APURegisters.X; APUSetZN8 (APURegisters.YA.B.A); IAPU.PC++;}void ApuDD (){// MOV A,Y APURegisters.YA.B.A = APURegisters.YA.B.Y; APUSetZN8 (APURegisters.YA.B.A); IAPU.PC++;}void Apu5D (){// MOV X,A APURegisters.X = APURegisters.YA.B.A; APUSetZN8 (APURegisters.X); IAPU.PC++;}void ApuFD (){// MOV Y,A APURegisters.YA.B.Y = APURegisters.YA.B.A; APUSetZN8 (APURegisters.YA.B.Y); IAPU.PC++;}void Apu9D (){//MOV X,SP APURegisters.X = APURegisters.S; APUSetZN8 (APURegisters.X); IAPU.PC++;}void ApuBD (){// MOV SP,X APURegisters.S = APURegisters.X; IAPU.PC++;}void Apu6B (){// ROR dp Work8 = S9xAPUGetByteZ (OP1); ROR (Work8); S9xAPUSetByteZ (Work8, OP1); IAPU.PC += 2;}void Apu6C (){// ROR abs Absolute (); Work8 = S9xAPUGetByte (IAPU.Address); ROR (Work8); S9xAPUSetByte (Work8, IAPU.Address); IAPU.PC += 3;}void Apu7B (){// ROR dp+X Work8 = S9xAPUGetByteZ (OP1 + APURegisters.X); ROR (Work8); S9xAPUSetByteZ (Work8, OP1 + APURegisters.X); IAPU.PC += 2;}void Apu7C (){// ROR A ROR (APURegisters.YA.B.A); IAPU.PC++;}void Apu6E (){// DBNZ dp,rel Work8 = OP1; Relative2 (); W1 = S9xAPUGetByteZ (Work8) - 1; S9xAPUSetByteZ (W1, Work8); if (W1 != 0) { IAPU.PC = IAPU.RAM + (uint16) Int16; APU.Cycles += IAPU.TwoCycles; } else IAPU.PC += 3;}void ApuFE (){// DBNZ Y,rel Relative (); APURegisters.YA.B.Y--; if (APURegisters.YA.B.Y != 0) { IAPU.PC = IAPU.RAM + (uint16) Int16; APU.Cycles += IAPU.TwoCycles; } else IAPU.PC += 2;}void Apu6F ()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -