📄 cpuops.s
字号:
OpAEX0: Absolute8 LDX2 call S9xGetWord Ldx16 ABSOpBEX1: AbsoluteIndexedY8 LDX call S9xGetByte Ldx8 ABSYOpBEX0: AbsoluteIndexedY8 LDX2 call S9xGetWord Ldx16 ABSY/* LDY */OpA0X1: Immediate8 LDY Ldy8 IMMOpA0X0: Immediate16 LDY Ldy16 IMMOpA4X1: Direct8 LDY call S9xGetByte Ldy8 DIROpA4X0: Direct8 LDY2 call S9xGetWord Ldy16 DIROpB4X1: DirectIndexedX8 LDY call S9xGetByte Ldy8 DIXOpB4X0: DirectIndexedX8 LDY2 call S9xGetWord Ldy16 DIXOpACX1: Absolute8 LDY call S9xGetByte Ldy8 ABSOpACX0: Absolute8 LDY2 call S9xGetWord Ldy16 ABSOpBCX1: AbsoluteIndexedX8 LDY call S9xGetByte Ldy8 ABSXOpBCX0: AbsoluteIndexedX8 LDY2 call S9xGetWord Ldy16 ABSX/* LSR */Op4AM1: movb AL, %al#ifdef VAR_CYCLES addl $6, CYCLES#endif shrb %al movb %al, AL SetZNC jmp MainAsmLoopOp4AM0:#ifdef VAR_CYCLES addl $6, CYCLES#endif shrw AA setnz _Zero setc _Carry movb AH, %ah movb %ah, _Negative jmp MainAsmLoopOp46M1: Direct8 LSR Lsr8 DIROp46M0: Direct8 LSR2 Lsr16 DIROp56M1: DirectIndexedX8 LSR Lsr8 DIXOp56M0: DirectIndexedX8 LSR2 Lsr16 DIXOp4EM1: Absolute8 LSR Lsr8 ABSOp4EM0: Absolute8 LSR2 Lsr16 ABSOp5EM1: AbsoluteIndexedX8 LSR Lsr8 ABSXOp5EM0: AbsoluteIndexedX8 LSR2 Lsr16 ABSX/* ORA */Op09M1: Immediate8 ORA Ora8 IMMOp09M0: Immediate16 ORA Ora16 IMMOp05M1: Direct8 ORA call S9xGetByte Ora8 DIROp05M0: Direct8 ORA2 call S9xGetWord Ora16 DIROp15M1: DirectIndexedX8 ORA call S9xGetByte Ora8 DIXOp15M0: DirectIndexedX8 ORA2 call S9xGetWord Ora16 DIXOp12M1: DirectIndirect8 ORA call S9xGetByte Ora8 DIOp12M0: DirectIndirect8 ORA2 call S9xGetWord Ora16 DIOp01M1: DirectIndexedIndirect8 ORA call S9xGetByte Ora8 DIIOp01M0: DirectIndexedIndirect8 ORA2 call S9xGetWord Ora16 DIIOp11M1: DirectIndirectIndexed8 ORA call S9xGetByte Ora8 DIIYOp11M0: DirectIndirectIndexed8 ORA2 call S9xGetWord Ora16 DIIYOp07M1: DirectIndirectLong8 ORA call S9xGetByte Ora8 DILOp07M0: DirectIndirectLong8 ORA2 call S9xGetWord Ora16 DILOp17M1: DirectIndirectIndexedLong8 ORA call S9xGetByte Ora8 DIILOp17M0: DirectIndirectIndexedLong8 ORA2 call S9xGetWord Ora16 DIILOp0DM1: Absolute8 ORA call S9xGetByte Ora8 ABSOp0DM0: Absolute8 ORA2 call S9xGetWord Ora16 ABSOp1DM1: AbsoluteIndexedX8 ORA call S9xGetByte Ora8 ABSXOp1DM0: AbsoluteIndexedX8 ORA2 call S9xGetWord Ora16 ABSXOp19M1: AbsoluteIndexedY8 ORA call S9xGetByte Ora8 ABSYOp19M0: AbsoluteIndexedY8 ORA2 call S9xGetWord Ora16 ABSYOp0FM1: AbsoluteLong8 ORA call S9xGetByte Ora8 ABSLOp0FM0: AbsoluteLong8 ORA2 call S9xGetWord Ora16 ABSLOp1FM1: AbsoluteLongIndexedX8 ORA call S9xGetByte Ora8 ALXOp1FM0: AbsoluteLongIndexedX8 ORA2 call S9xGetWord Ora16 ALXOp03M1: StackRelative8 ORA call S9xGetByte Ora8 SRELOp03M0: StackRelative8 ORA2 call S9xGetWord Ora16 SRELOp13M1: StackRelativeIndirectIndexed8 ORA call S9xGetByte Ora8 SRIIOp13M0: StackRelativeIndirectIndexed8 ORA2 call S9xGetWord Ora16 SRII/* ROL */Op2AM1:#ifdef VAR_CYCLES addl $6, CYCLES#endif movb AL, %al GetCarry rclb %al movb %al, AL SetZNC jmp MainAsmLoopOp2AM0:#ifdef VAR_CYCLES addl $6, CYCLES#endif GetCarry movw AA, %ax rclw %ax movw %ax, AA setc _Carry movb %ah, _Negative orb %ah, %al movb %al, _Zero jmp MainAsmLoopOp26M1: Direct8 ROL Rol8 DIROp26M0: Direct8 ROL2 Rol16 DIROp36M1: DirectIndexedX8 ROL Rol8 DIXOp36M0: DirectIndexedX8 ROL2 Rol16 DIXOp2EM1: Absolute8 ROL Rol8 ABSOp2EM0: Absolute8 ROL2 Rol16 ABSOp3EM1: AbsoluteIndexedX8 ROL Rol8 ABSXOp3EM0: AbsoluteIndexedX8 ROL2 Rol16 ABSX/* ROR */Op6AM1:#ifdef VAR_CYCLES addl $6, CYCLES#endif movb AL, %al GetCarry rcrb %al movb %al, AL SetZNC jmp MainAsmLoopOp6AM0:#ifdef VAR_CYCLES addl $6, CYCLES#endif GetCarry movw AA, %ax rcrw %ax movw %ax, AA setc _Carry movb %ah, _Negative orb %ah, %al movb %al, _Zero jmp MainAsmLoop Op66M1: Direct8 ROR Ror8 DIROp66M0: Direct8 ROR2 Ror16 DIROp76M1: DirectIndexedX8 ROR Ror8 DIXOp76M0: DirectIndexedX8 ROR2 Ror16 DIXOp6EM1: Absolute8 ROR Ror8 ABSOp6EM0: Absolute8 ROR2 Ror16 ABSOp7EM1: AbsoluteIndexedX8 ROR Ror8 ABSXOp7EM0: AbsoluteIndexedX8 ROR2 Ror16 ABSX/* SBC */OpE9M1: Immediate8 SBC Sbc8 IMMOpE9M0: Immediate16 SBC Sbc16 IMMOpE5M1: Direct8 SBC call S9xGetByte Sbc8 DIROpE5M0: Direct8 SBC2 call S9xGetWord Sbc16 DIROpF5M1: DirectIndexedX8 SBC call S9xGetByte Sbc8 DIXOpF5M0: DirectIndexedX8 SBC2 call S9xGetWord Sbc16 DIXOpF2M1: DirectIndirect8 SBC call S9xGetByte Sbc8 DIOpF2M0: DirectIndirect8 SBC2 call S9xGetWord Sbc16 DIOpE1M1: DirectIndexedIndirect8 SBC call S9xGetByte Sbc8 DIIOpE1M0: DirectIndexedIndirect8 SBC2 call S9xGetWord Sbc16 DIIOpF1M1: DirectIndirectIndexed8 SBC call S9xGetByte Sbc8 DIIYOpF1M0: DirectIndirectIndexed8 SBC2 call S9xGetWord Sbc16 DIIYOpE7M1: DirectIndirectLong8 SBC call S9xGetByte Sbc8 DILOpE7M0: DirectIndirectLong8 SBC2 call S9xGetWord Sbc16 DILOpF7M1: DirectIndirectIndexedLong8 SBC call S9xGetByte Sbc8 DIILOpF7M0: DirectIndirectIndexedLong8 SBC2 call S9xGetWord Sbc16 DIILOpEDM1: Absolute8 SBC call S9xGetByte Sbc8 ABSOpEDM0: Absolute8 SBC2 call S9xGetWord Sbc16 ABSOpFDM1: AbsoluteIndexedX8 SBC call S9xGetByte Sbc8 ABSXOpFDM0: AbsoluteIndexedX8 SBC2 call S9xGetWord Sbc16 ABSXOpF9M1: AbsoluteIndexedY8 SBC call S9xGetByte Sbc8 ABSYOpF9M0: AbsoluteIndexedY8 SBC2 call S9xGetWord Sbc16 ABSYOpEFM1: AbsoluteLong8 SBC call S9xGetByte Sbc8 ABSLOpEFM0: AbsoluteLong8 SBC2 call S9xGetWord Sbc16 ABSLOpFFM1: AbsoluteLongIndexedX8 SBC call S9xGetByte Sbc8 ALXOpFFM0: AbsoluteLongIndexedX8 SBC2 call S9xGetWord Sbc16 ALXOpE3M1: StackRelative8 SBC call S9xGetByte Sbc8 SRELOpE3M0: StackRelative8 SBC2 call S9xGetWord Sbc16 SRELOpF3M1: StackRelativeIndirectIndexed8 SBC call S9xGetByte Sbc8 SRIIOpF3M0: StackRelativeIndirectIndexed8 SBC2 call S9xGetWord Sbc16 SRII/* STA */Op85M1: Direct8 STA Sta8 DIROp85M0: Direct8 STA2 Sta16 DIROp95M1: DirectIndexedX8 STA Sta8 DIXOp95M0: DirectIndexedX8 STA2 Sta16 DIXOp92M1: DirectIndirect8 STA Sta8 DIOp92M0: DirectIndirect8 STA2 Sta16 DIOp81M1: DirectIndexedIndirect8 STA Sta8 DIIOp81M0: DirectIndexedIndirect8 STA2 Sta16 DIIOp91M1: DirectIndirectIndexed8 STA Sta8 DIIYOp91M0: DirectIndirectIndexed8 STA2 Sta16 DIIYOp87M1: DirectIndirectLong8 STA Sta8 DILOp87M0: DirectIndirectLong8 STA2 Sta16 DILOp97M1: DirectIndirectIndexedLong8 STA Sta8 DIILOp97M0: DirectIndirectIndexedLong8 STA2 Sta16 DIILOp8DM1: Absolute8 STA Sta8 ABSOp8DM0: Absolute8 STA Sta16 ABSOp9DM1: AbsoluteIndexedX8 STA Sta8 ABSXOp9DM0: AbsoluteIndexedX8 STA2 Sta16 ABSXOp99M1: AbsoluteIndexedY8 STA Sta8 ABSYOp99M0: AbsoluteIndexedY8 STA2 Sta16 ABSYOp8FM1: AbsoluteLong8 STA Sta8 ABSLOp8FM0: AbsoluteLong8 STA2 Sta16 ABSLOp9FM1: AbsoluteLongIndexedX8 STA Sta8 ALXOp9FM0: AbsoluteLongIndexedX8 STA2 Sta16 ALXOp83M1: StackRelative8 STA Sta8 SRELOp83M0: StackRelative8 STA2 Sta16 SRELOp93M1: StackRelativeIndirectIndexed8 STA Sta8 SRIIOp93M0: StackRelativeIndirectIndexed8 STA2 Sta16 SRII/* STX */Op86X1: Direct8 STX Stx8 DIROp86X0: Direct8 STX2 Stx16 DIROp96X1: DirectIndexedY8 STX Stx8 DIYOp96X0: DirectIndexedY8 STX2 Stx16 DIYOp8EX1: Absolute8 STX Stx8 ABSOp8EX0: Absolute8 STX2 Stx16 ABS/* STY */Op84X1: Direct8 STY Sty8 DIROp84X0: Direct8 STY2 Sty16 DIROp94X1: DirectIndexedX8 STY Sty8 DIXOp94X0: DirectIndexedX8 STY2 Sty16 DIXOp8CX1: Absolute8 STY Sty8 ABSOp8CX0: Absolute8 STY2 Sty16 ABS/* STZ */Op64M1: Direct8 STZ Stz8 DIROp64M0: Direct8 STZ2 Stz16 DIROp74M1: DirectIndexedX8 STZ Stz8 DIXOp74M0: DirectIndexedX8 STZ2 Stz16 DIXOp9CM1: Absolute8 STZ Stz8 ABSOp9CM0: Absolute8 STZ2 Stz16 ABSOp9EM1: AbsoluteIndexedX8 STZ Stz8 ABSXOp9EM0: AbsoluteIndexedX8 STZ2 Stz16 ABSX/* TRB */Op14M1: Direct8 TRB Trb8 DIROp14M0: Direct8 TRB2 Trb16 DIROp1CM1: Absolute8 TRB Trb8 ABSOp1CM0: Absolute8 TRB2 Trb16 ABS/* TSB */Op04M1: Direct8 TSB Tsb8 DIROp04M0: Direct8 TSB2 Tsb16 DIROp0CM1: Absolute8 TSB Tsb8 ABSOp0CM0: Absolute8 TSB2 Tsb16 ABS/* BCC */Op90: Relative BranchCheck0 BCC testb $0xff, _Carry jnz .BCC_EXIT#ifdef VAR_CYCLES addl $6, CYCLES#else incl CYCLES#endif andl $0xffff, %edx addl PCBase, %edx movl %edx, PC.BCC_EXIT: jmp MainAsmLoop/* BCS */OpB0: Relative BranchCheck0 BCS testb $0xff, _Carry jz .BCS_EXIT#ifdef VAR_CYCLES addl $6, CYCLES#else incl CYCLES#endif andl $0xffff, %edx addl PCBase, %edx movl %edx, PC.BCS_EXIT: jmp MainAsmLoop/* BEQ */OpF0: Relative BranchCheck2 BEQ testb $0xff, _Zero jnz .BEQ_EXIT#ifdef VAR_CYCLES addl $6, CYCLES#else incl CYCLES#endif andl $0xffff, %edx addl PCBase, %edx movl %edx, PC CPUShutdown BEQ.BEQ_EXIT: jmp MainAsmLoop/* BMI */Op30: Relative BranchCheck1 BMI testb $0x80, _Negative jz .BMI_EXIT#ifdef VAR_CYCLES addl $6, CYCLES#else incl CYCLES#endif andl $0xffff, %edx addl PCBase, %edx movl %edx, PC CPUShutdown BMI.BMI_EXIT: jmp MainAsmLoop/* BNE */OpD0: Relative BranchCheck1 BNE testb $0xff, _Zero jz .BNE_EXIT#ifdef VAR_CYCLES addl $6, CYCLES#else incl CYCLES#endif andl $0xffff, %edx addl PCBase, %edx movl %edx, PC CPUShutdown BNE.BNE_EXIT: jmp MainAsmLoop/* BPL */Op10: Relative BranchCheck1 BPL testb $0x80, _Negative jnz .BPL_EXIT#ifdef VAR_CYCLES addl $6, CYCLES#else incl CYCLES#endif andl $0xffff, %edx addl PCBase, %edx movl %edx, PC CPUShutdown BPL.BPL_EXIT: jmp MainAsmLoop/* BRA */Op80: Relative#ifdef VAR_CYCLES addl $6, CYCLES#else incl CYCLES#endif andl $0xffff, %edx addl PCBase, %edx movl %edx, PC jmp MainAsmLoop/* BVC */Op50: Relative BranchCheck0 BVC testb $0xff, _Overflow jnz .BVC_EXIT#ifdef VAR_CYCLES addl $6, CYCLES#else incl CYCLES#endif andl $0xffff, %edx addl PCBase, %edx movl %edx, PC CPUShutdown BVC.BVC_EXIT: jmp MainAsmLoop/* BVS */Op70: Relative BranchCheck0 BVS testb $0xff, _Overflow jz .BVS_EXIT#ifdef VAR_CYCLES addl $6, CYCLES#else incl CYCLES#endif andl $0xffff, %edx addl PCBase, %edx movl %edx, PC CPUShutdown BVS.BVS_EXIT: jmp MainAsmLoop/* BRL */Op82: RelativeLong BRL andl $0xffff, %edx orl ShiftedPB, %edx call S9xSetPCBase jmp MainAsmLoop/* CLC */Op18: movb $0, _Carry#ifdef VAR_CYCLES addl $6, CYCLES#endif jmp MainAsmLoop/* CLD */OpD8: andb $~Decimal, FLAGS#ifdef VAR_CYCLES addl $6, CYCLES#endif jmp MainAsmLoop/* CLI */Op58: andb $~IRQ, FLAGS#ifdef VAR_CYCLES addl $6, CYCLES#endif cmpb $0, IRQActive jz .CLI_EXIT /* XXX: test for Settings.DisableIRQ */ call S9xOpcode_IRQ.CLI_EXIT: jmp MainAsmLoop/* CLV */OpB8: movb $0, _Overflow#ifdef VAR_CYCLES addl $6, CYCLES#endif jmp MainAsmLoop/* DEX */OpCAX1:#ifdef VAR_CYCLES addl $6, CYCLES#endif movb XL, %al decb %al#ifdef CPU_SHUTDOWN movl $0, WaitAddress#endif movb %al, XL SetZN jmp MainAsmLoopOpCAX0:#ifdef VAR_CYCLES addl $6, CYCLES#endif decw XX setnz _Zero movb XH, %al#ifdef CPU_SHUTDOWN movl $0, WaitAddress#endif movb %al, _Negative jmp MainAsmLoop/* DEY */Op88X1:#ifdef VAR_CYCLES addl $6, CYCLES#endif movb YL, %al decb %al#ifdef CPU_SHUTDOWN movl $0, WaitAddress#endif movb %al, YL SetZN jmp MainAsmLoopOp88X0:#ifdef VAR_CYCLES addl $6, CYCLES#endif decw YY setnz _Zero movb YH, %al#ifdef CPU_SHUTDOWN movl $0, WaitAddress#endif movb %al, _Negative jmp MainAsmLoop/* INX */OpE8X1:#ifdef VAR_CYCLES addl $6, CYCLES#endif movb XL, %al incb %al#ifdef CPU_SHUTDOWN movl $0, WaitAddress#endif movb %al, XL SetZN jmp MainAsmLoopOpE8X0:#ifdef VAR_CYCLES addl $6, CYCLES#endif incw XX setnz _Zero movb XH, %al#ifdef CPU_SHUTDOWN movl $0, WaitAddress#endif movb %al, _Negative jmp MainAsmLoop/* INY */OpC8X1:#ifdef VAR_CYCLES addl $6, CYCLES#endif movb YL, %al incb %al#ifdef CPU_SHUTDOWN movl $0, WaitAddress#endif movb %al, YL SetZN jmp MainAsmLoopOpC8X0:#ifdef VAR_CYCLES addl $6, CYCLES#endif incw YY setnz _Zero movb YH, %al#ifdef CPU_SHUTDOWN movl $0, WaitAddress#endif movb %al, _Negative jmp MainAsmLoop/* NOP */OpEA:#ifdef VAR_CYCLES addl $6,CYCLES#endif jmp MainAsmLoop/* PEA */OpF4: Immediate16 PEA PushWord PEA jmp MainAsmLoop/* PEI */OpD4: DirectIndirect8 PEI movl %edx, %eax PushWord PEI jmp MainAsmLoop/* PER */Op62: RelativeLong PER movl %edx, %eax PushWord PER jmp MainAsmLoop /* PHA */Op48M1:#ifdef VAR_CYCLES
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -