📄 cpuops.s
字号:
/* TSB */Op04M1: Direct8 TSB MODIFY Tsb8 DIROp04M0: Direct8 TSB2 MODIFY Tsb16 DIROp0CM1: Absolute8 TSB MODIFY Tsb8 ABSOp0CM0: Absolute8 TSB2 MODIFY Tsb16 ABS/* BCC */Op90: Relative JUMP BranchCheck0 BCC testb $0xff, _Carry jnz .BCC_EXIT addl $6, CYCLES andl $0xffff, %edx addl PCBase, %edx movl %edx, PC.BCC_EXIT: jmp MainAsmLoop/* BCS */OpB0: Relative JUMP BranchCheck0 BCS testb $0xff, _Carry jz .BCS_EXIT addl $6, CYCLES andl $0xffff, %edx addl PCBase, %edx movl %edx, PC.BCS_EXIT: jmp MainAsmLoop/* BEQ */OpF0: Relative JUMP BranchCheck2 BEQ testb $0xff, _Zero jnz .BEQ_EXIT addl $6, CYCLES andl $0xffff, %edx addl PCBase, %edx movl %edx, PC CPUShutdown BEQ.BEQ_EXIT: jmp MainAsmLoop/* BMI */Op30: Relative JUMP BranchCheck1 BMI testb $0x80, _Negative jz .BMI_EXIT addl $6, CYCLES andl $0xffff, %edx addl PCBase, %edx movl %edx, PC CPUShutdown BMI.BMI_EXIT: jmp MainAsmLoop/* BNE */OpD0: Relative JUMP BranchCheck1 BNE testb $0xff, _Zero jz .BNE_EXIT addl $6, CYCLES andl $0xffff, %edx addl PCBase, %edx movl %edx, PC CPUShutdown BNE.BNE_EXIT: jmp MainAsmLoop/* BPL */Op10: Relative JUMP BranchCheck1 BPL testb $0x80, _Negative jnz .BPL_EXIT addl $6, CYCLES andl $0xffff, %edx addl PCBase, %edx movl %edx, PC CPUShutdown BPL.BPL_EXIT: jmp MainAsmLoop/* BRA */Op80: Relative JUMP addl $6, CYCLES andl $0xffff, %edx addl PCBase, %edx movl %edx, PC jmp MainAsmLoop/* BVC */Op50: Relative JUMP BranchCheck0 BVC testb $0xff, _Overflow jnz .BVC_EXIT addl $6, CYCLES andl $0xffff, %edx addl PCBase, %edx movl %edx, PC CPUShutdown BVC.BVC_EXIT: jmp MainAsmLoop/* BVS */Op70: Relative JUMP BranchCheck0 BVS testb $0xff, _Overflow jz .BVS_EXIT addl $6, CYCLES andl $0xffff, %edx addl PCBase, %edx movl %edx, PC CPUShutdown BVS.BVS_EXIT: jmp MainAsmLoop/* BRL */Op82: RelativeLong BRL JUMP andl $0xffff, %edx orl ShiftedPB, %edx call S9xSetPCBase jmp MainAsmLoop/* CLC */Op18: movb $0, _Carry addl $6, CYCLES jmp MainAsmLoop/* CLD */OpD8: andb $~Decimal, FLAGS addl $6, CYCLES jmp MainAsmLoop/* CLI */Op58: andb $~IRQ, FLAGS addl $6, CYCLES#if 0 /* C version has this commented out? */ cmpb $0, IRQActive jz .CLI_EXIT /* XXX: test for Settings.DisableIRQ */ call S9xOpcode_IRQ#endif.CLI_EXIT: jmp MainAsmLoop/* CLV */OpB8: movb $0, _Overflow addl $6, CYCLES jmp MainAsmLoop/* DEX */OpCAX1: addl $6, CYCLES movb XL, %al decb %al#ifdef CPU_SHUTDOWN movl $0, WaitAddress#endif movb %al, XL SetZN jmp MainAsmLoopOpCAX0: addl $6, CYCLES decw XX setnz _Zero movb XH, %al#ifdef CPU_SHUTDOWN movl $0, WaitAddress#endif movb %al, _Negative jmp MainAsmLoop/* DEY */Op88X1: addl $6, CYCLES movb YL, %al decb %al#ifdef CPU_SHUTDOWN movl $0, WaitAddress#endif movb %al, YL SetZN jmp MainAsmLoopOp88X0: addl $6, CYCLES decw YY setnz _Zero movb YH, %al#ifdef CPU_SHUTDOWN movl $0, WaitAddress#endif movb %al, _Negative jmp MainAsmLoop/* INX */OpE8X1: addl $6, CYCLES movb XL, %al incb %al#ifdef CPU_SHUTDOWN movl $0, WaitAddress#endif movb %al, XL SetZN jmp MainAsmLoopOpE8X0: addl $6, CYCLES incw XX setnz _Zero movb XH, %al#ifdef CPU_SHUTDOWN movl $0, WaitAddress#endif movb %al, _Negative jmp MainAsmLoop/* INY */OpC8X1: addl $6, CYCLES movb YL, %al incb %al#ifdef CPU_SHUTDOWN movl $0, WaitAddress#endif movb %al, YL SetZN jmp MainAsmLoopOpC8X0: addl $6, CYCLES incw YY setnz _Zero movb YH, %al#ifdef CPU_SHUTDOWN movl $0, WaitAddress#endif movb %al, _Negative jmp MainAsmLoop/* NOP */OpEA: addl $6,CYCLES jmp MainAsmLoop/* PEA */OpF4E1: Immediate16 PEA NONE PushWordENew PEA jmp MainAsmLoopOpF4: Immediate16 PEA NONE PushWord PEA jmp MainAsmLoop/* PEI */OpD4E1: DirectIndirect8 PEI NONE movl %edx, %eax PushWordENew PEI jmp MainAsmLoopOpD4: DirectIndirect8 PEI NONE movl %edx, %eax PushWord PEI jmp MainAsmLoop/* PER */Op62E1: RelativeLong PER NONE movl %edx, %eax PushWordENew PER jmp MainAsmLoop Op62: RelativeLong PER NONE movl %edx, %eax PushWord PER jmp MainAsmLoop /* PHA */Op48E1: addl $6, CYCLES movb AL, %al PushByteE PHA jmp MainAsmLoopOp48M1: addl $6, CYCLES movb AL, %al PushByte PHA jmp MainAsmLoopOp48M0: addl $6, CYCLES movw AA, %ax PushWord PHA jmp MainAsmLoop/* PHB */Op8BE1: addl $6, CYCLES movb DB, %al PushByteE PHB jmp MainAsmLoopOp8B: addl $6, CYCLES movb DB, %al PushByte PHB jmp MainAsmLoop/* PHD */Op0BE1: addl $6, CYCLES movw DD, %ax PushWordENew PHD jmp MainAsmLoopOp0B: addl $6, CYCLES movw DD, %ax PushWord PHD jmp MainAsmLoop/* PHK */Op4BE1: addl $6, CYCLES movb PB, %al PushByteE PHK jmp MainAsmLoopOp4B: addl $6, CYCLES movb PB, %al PushByte PHK jmp MainAsmLoop/* PHP */Op08E1: addl $6, CYCLES S9xPackStatus PHP movb FLAGS, %al PushByteE PHP jmp MainAsmLoopOp08: addl $6, CYCLES S9xPackStatus PHP movb FLAGS, %al PushByte PHP jmp MainAsmLoop/* PHX */OpDAE1: addl $6, CYCLES movb XL, %al PushByteE PHX jmp MainAsmLoopOpDAX1: addl $6, CYCLES movb XL, %al PushByte PHX jmp MainAsmLoopOpDAX0: addl $6, CYCLES movw XX, %ax PushWord PHX jmp MainAsmLoop/* PHY */Op5AE1: addl $6, CYCLES movb YL, %al PushByteE PHY jmp MainAsmLoopOp5AX1: addl $6, CYCLES movb YL, %al PushByte PHY jmp MainAsmLoopOp5AX0: addl $6, CYCLES movw YY, %ax PushWord PHY jmp MainAsmLoop/* PLA */Op68E1: addl $12, CYCLES PullByteE PLA movb %al, AL SetZN jmp MainAsmLoopOp68M1: addl $12, CYCLES PullByte PLA movb %al, AL SetZN jmp MainAsmLoopOp68M0: addl $12, CYCLES PullWord PLA movw %ax, AA testw %ax, %ax Set16ZN jmp MainAsmLoop/* PLB */OpABE1: addl $12, CYCLES PullByteE PLB movb %al, DB SetZN andl $0xff, %eax sall $16, %eax movl %eax, ShiftedDB jmp MainAsmLoopOpAB: addl $12, CYCLES PullByte PLB movb %al, DB SetZN andl $0xff, %eax sall $16, %eax movl %eax, ShiftedDB jmp MainAsmLoop/* PLD */Op2BE1: addl $12, CYCLES PullWordENew PLD movw %ax, DD testw %ax, %ax Set16ZN jmp MainAsmLoopOp2B: addl $12, CYCLES PullWord PLD movw %ax, DD testw %ax, %ax Set16ZN jmp MainAsmLoop /* PLP */Op28E1: addl $12, CYCLES PullByteE PLPE movb %al, FLAGS testb $IndexFlag, FLAGS jz .PLP16E xorb %al, %al movb %al, XH movb %al, YH.PLP16E: S9xUnpackStatus PLPE S9xFixCycles PLPE/* CheckForIrq PLP */ jmp MainAsmLoopOp28: addl $12, CYCLES PullByte PLP movb %al, FLAGS testb $IndexFlag, FLAGS jz .PLP16 xorb %al, %al movb %al, XH movb %al, YH.PLP16: S9xUnpackStatus PLP S9xFixCycles PLP/* CheckForIrq PLP */ jmp MainAsmLoop/* PLX */OpFAE1: addl $12, CYCLES PullByteE PLX movb %al, XL SetZN jmp MainAsmLoopOpFAX1: addl $12, CYCLES PullByte PLX movb %al, XL SetZN jmp MainAsmLoopOpFAX0: addl $12, CYCLES PullWord PLX movw %ax, XX testw %ax, %ax Set16ZN jmp MainAsmLoop/* PLY */Op7AE1: addl $12, CYCLES PullByteE PLY movb %al, YL SetZN jmp MainAsmLoopOp7AX1: addl $12, CYCLES PullByte PLY movb %al, YL SetZN jmp MainAsmLoopOp7AX0: addl $12, CYCLES PullWord PLY movw %ax, YY testw %ax, %ax Set16ZN jmp MainAsmLoop/* SEC */Op38: movb $1, _Carry addl $6, CYCLES jmp MainAsmLoop/* SED */OpF8: orb $Decimal, FLAGS addl $6, CYCLES jmp MainAsmLoop/* SEI */Op78: orb $IRQ, FLAGS addl $6, CYCLES jmp MainAsmLoop/* TAX */OpAAX1: addl $6, CYCLES movb AL, %al movb %al, XL SetZN jmp MainAsmLoopOpAAX0: addl $6, CYCLES movw AA, %ax movw %ax, XX testw %ax, %ax Set16ZN jmp MainAsmLoop/* TAY */OpA8X1: addl $6, CYCLES movb AL, %al movb %al, YL SetZN jmp MainAsmLoopOpA8X0: addl $6, CYCLES movw AA, %ax movw %ax, YY testw %ax, %ax Set16ZN jmp MainAsmLoop/* TCD */Op5B: addl $6, CYCLES movw AA, %ax movw %ax, DD testw %ax, %ax Set16ZN jmp MainAsmLoop/* TCS */Op1B: addl $6, CYCLES movw AA, %ax movw %ax, SS testw $Emulation, FLAGS16 jz .TCS_EXIT movb $1, SH.TCS_EXIT: jmp MainAsmLoop/* TDC */Op7B: addl $6, CYCLES movw DD, %ax movw %ax, AA testw %ax, %ax Set16ZN jmp MainAsmLoop/* TSC */Op3B: addl $6, CYCLES movw SS, %ax movw %ax, AA testw %ax, %ax Set16ZN jmp MainAsmLoop/* TSX */OpBAX1: addl $6, CYCLES movb SL, %al movb %al, XL SetZN jmp MainAsmLoopOpBAX0: addl $6, CYCLES movw SS, %ax movw %ax, XX testw %ax, %ax Set16ZN jmp MainAsmLoop/* TXA */Op8AM1: addl $6, CYCLES movb XL, %al movb %al, AL SetZN jmp MainAsmLoopOp8AM0: addl $6, CYCLES movw XX, %ax movw %ax, AA testw %ax, %ax Set16ZN jmp MainAsmLoop/* TXS */Op9A: addl $6, CYCLES movw XX, %ax movw %ax, SS testw $Emulation, FLAGS16 jz .TXS_EXIT movb $1, SH.TXS_EXIT: jmp MainAsmLoop/* TXY */Op9BX1: addl $6, CYCLES movb XL, %al movb %al, YL SetZN jmp MainAsmLoopOp9BX0: addl $6, CYCLES movw XX, %ax movw %ax, YY testw %ax, %ax Set16ZN jmp MainAsmLoop/* TYA */Op98M1: addl $6, CYCLES movb YL, %al movb %al, AL SetZN jmp MainAsmLoopOp98M0: addl $6, CYCLES movw YY, %ax movw %ax, AA testw %ax, %ax Set16ZN jmp MainAsmLoop/* TYX */OpBBX1: addl $6, CYCLES movb YL, %al movb %al, XL SetZN jmp MainAsmLoopOpBBX0: addl $6, CYCLES movw YY, %ax movw %ax, XX testw %ax, %ax Set16ZN jmp MainAsmLoop/* XCE */OpFB: addl $6, CYCLES movw FLAGS16, %ax andw $~(Emulation | Carry), FLAGS16 GetCarry jnc .XCE_NO_CARRY orw $Emulation, FLAGS16.XCE_NO_CARRY: testw $Emulation, %ax setnz _Carry testw $Emulation, FLAGS16 jz .XCE_NO_EMULATION2 orw $(MemoryFlag | IndexFlag), FLAGS16 movb $1, SH.XCE_NO_EMULATION2: testw $IndexFlag, FLAGS16 jz .XCE_NO_INDEX xorl %eax, %eax movb %al, XH movb %al, YH.XCE_NO_INDEX: S9xFixCycles XCE jmp MainAsmLoop .data.LC0: .string "*** BRK".textOp00:#ifdef DEBUGGER testb $TRACE_FLAG, Flags je .BRK_NO_TRACE pushl $.LC0 ccall S9xTraceMessage addl $4,%esp.BRK_NO_TRACE:#endif movb $1, BRKTriggered testw $Emulation, FLAGS16 jnz .BRK_EMULATION movb PB, %al PushByte BRK1 movl PC, %eax subl PCBase, %eax incl %eax PushWord BRK2 S9xPackStatus BRK movb FLAGS, %al movb %al, OpenBus andb $~Decimal, FLAGS orb $IRQ, FLAGS PushByte BRK3 xorl %ecx, %ecx movl %ecx, ShiftedPB movb %cl, PB addl $12, CYCLES movl $0xFFE6, %edx call S9xGetWord movl %eax, %edx andl $0xffff, %edx call S9xSetPCBase jmp MainAsmLoop.BRK_EMULATION: movl PC, %eax subl PCBase, %eax incl %eax PushWord BRK2 S9xPackStatus BRK2 movb FLAGS, %al movb %al, OpenBus andb $~Decimal, FLAGS orb $IRQ, FLAGS PushByte BRK3 xorl %ecx, %ecx movl %ecx, ShiftedPB movb %cl, PB addl $6, CYCLES movl $0xFFFE, %edx call S9xGetWord movl %eax, %edx andl $0xffff, %edx call S9xSetPCBase jmp MainAsmLoop.data.LC1: .string "*** IRQ".text.globl S9xOpcode_IRQS9xOpcode_IRQ:#ifdef DEBUGGER testb $TRACE_FLAG, Flags je .IRQ_NO_TRACE pushl $.LC1 ccall S9xTraceMessage addl $4, %esp.IRQ_NO_TRACE:#endif testw $Emulation, FLAGS16 jnz .IRQ_EMULATION movb PB, %al PushByte IRQ1 movl PC, %eax subl PCBase, %eax PushWord IRQ2 S9xPackStatus IRQ movb FLAGS, %al movb %al, OpenBus andb $~Decimal, FLAGS orb $IRQ, FLAGS PushByte IRQ3 xorl %ecx, %ecx movl %ecx, ShiftedPB movb %cl, PB addl $12, CYCLES testb $0xff, SA1Enabled jz .noirqsa1vector movl FillRAM, %eax movb 0x2209(%eax), %dl testb $0x40, %dl jz .noirqsa1vector xorl %edx, %edx movw 0x220e(%eax), %dx jmp S9xSetPCBase.noirqsa1vector: movl $0xFFEE, %edx call S9xGetWord movl %eax, %edx andl $0xffff, %edx jmp S9xSetPCBase.IRQ_EMULATION: movl PC, %eax subl PCBase, %eax PushWord IRQ4 S9xPackStatus IRQ2 movb FLAGS, %al movb %al, OpenBus andb $~Decimal, FLAGS orb $IRQ, FLAGS PushByte IRQ5 xorl %ecx, %ecx movl %ecx, ShiftedPB movb %cl, PB addl $6, CYCLES movl $0xFFFE, %edx call S9xGetWord movl %eax, %edx andl $0xffff, %edx jmp S9xSetPCBase.data.LC2: .string "*** NMI".text.globl S9xOpcode_NMIS9xOpcode_NMI:#ifdef DEBUGGER testb $TRACE_FLAG, Flags je .NMI_NO_TRACE pushl $.LC2 ccall S9xTraceMessage addl $4, %esp.NMI_NO_TRACE:#endif testw $Emulation, FLAGS16 jnz .NMI_EMULATION movb PB, %al PushByte NMI1 movl PC, %eax subl PCBase, %eax PushWord NMI2 S9xPackStatus NMI movb FLAGS, %al movb %al, OpenBus andb $~Decimal, FLAGS orb $IRQ, FLAGS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -