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

📄 sa1ops.s

📁 著名SFC模拟器Snes9x的源代码。
💻 S
📖 第 1 页 / 共 4 页
字号:
	movb %al, XL	SetZN	jmp S9xSA1MainAsmLoopOpCAX0:	decw XX	setnz SA1_Zero	movb XH, %al	movb %al, SA1_Negative	jmp S9xSA1MainAsmLoop/* DEY */Op88X1:	movb YL, %al	decb %al	movb %al, YL	SetZN	jmp S9xSA1MainAsmLoopOp88X0:	decw YY	setnz SA1_Zero	movb YH, %al	movb %al, SA1_Negative	jmp S9xSA1MainAsmLoop/* INX */OpE8X1:	movb XL, %al	incb %al	movb %al, XL	SetZN	jmp S9xSA1MainAsmLoopOpE8X0:	incw XX	setnz SA1_Zero	movb XH, %al	movb %al, SA1_Negative	jmp S9xSA1MainAsmLoop/* INY */OpC8X1:	movb YL, %al	incb %al	movb %al, YL	SetZN	jmp S9xSA1MainAsmLoopOpC8X0:	incw YY	setnz SA1_Zero	movb YH, %al	movb %al, SA1_Negative	jmp S9xSA1MainAsmLoop/* NOP */OpEA:	jmp S9xSA1MainAsmLoop/* PEA */OpF4:	Immediate16 PEA	PushWord PEA	jmp S9xSA1MainAsmLoop/* PEI */OpD4:	DirectIndirect8 PEI	movl %edx, %eax	PushWord PEI	jmp S9xSA1MainAsmLoop/* PER */Op62:	RelativeLong PER	movl %edx, %eax	PushWord PER	jmp S9xSA1MainAsmLoop	/* PHA */Op48M1:	movb AL, %al	PushByte PHA	jmp S9xSA1MainAsmLoopOp48M0:	movw AA, %ax	PushWord PHA	jmp S9xSA1MainAsmLoop/* PHB */Op8B:	movb DB, %al	PushByte PHB	jmp S9xSA1MainAsmLoop/* PHD */Op0B:	movw DD, %ax	PushWord PHD	jmp S9xSA1MainAsmLoop/* PHK */Op4B:	movb PB, %al	PushByte PHK	jmp S9xSA1MainAsmLoop/* PHP */Op08:	S9xSA1PackStatus PHP	movb FLAGS, %al	PushByte PHP	jmp S9xSA1MainAsmLoop/* PHX */OpDAX1:	movb XL, %al	PushByte PHX	jmp S9xSA1MainAsmLoopOpDAX0:	movw XX, %ax	PushWord PHX	jmp S9xSA1MainAsmLoop/* PHY */Op5AX1:	movb YL, %al	PushByte PHY	jmp S9xSA1MainAsmLoopOp5AX0:	movw YY, %ax	PushWord PHY	jmp S9xSA1MainAsmLoop/* PLA */Op68M1:	PullByte PLA	movb %al, AL	SetZN	jmp S9xSA1MainAsmLoopOp68M0:	PullWord PLA	movw %ax, AA	testw %ax, %ax	Set16ZN	jmp S9xSA1MainAsmLoop/* PLB */OpAB:	PullByte PLB	movb %al, DB	SetZN	andl $0xff, %eax	sall $16, %eax	movl %eax, SA1ShiftedDB	jmp S9xSA1MainAsmLoop/* PLD */Op2B:	PullWord PLD	movw %ax, DD	testw %ax, %ax	Set16ZN	jmp S9xSA1MainAsmLoop	/* PLP */Op28:	PullByte PLP	movb %al, FLAGS	testb $IndexFlag, FLAGS	jz .PLP16	xorb %al, %al	movb %al, XH	movb %al, YH.PLP16:	S9xSA1UnpackStatus PLP	S9xSA1FixCycles PLP	CheckForIrq PLP	jmp S9xSA1MainAsmLoop/* PLX */OpFAX1:	PullByte PLX	movb %al, XL	SetZN	jmp S9xSA1MainAsmLoopOpFAX0:	PullWord PLX	movw %ax, XX	testw %ax, %ax	Set16ZN	jmp S9xSA1MainAsmLoop/* PLY */Op7AX1:	PullByte PLY	movb %al, YL	SetZN	jmp S9xSA1MainAsmLoopOp7AX0:	PullWord PLY	movw %ax, YY	testw %ax, %ax	Set16ZN	jmp S9xSA1MainAsmLoop/* SEC */Op38:	movb $1, SA1_Carry	jmp S9xSA1MainAsmLoop/* SED */OpF8:		orb $Decimal, FLAGS	jmp S9xSA1MainAsmLoop/* SEI */Op78:	orb $IRQ, FLAGS	jmp S9xSA1MainAsmLoop/* TAX */OpAAX1:	movb AL, %al	movb %al, XL	SetZN	jmp S9xSA1MainAsmLoopOpAAX0:	movw AA, %ax	movw %ax, XX	testw %ax, %ax	Set16ZN	jmp S9xSA1MainAsmLoop/* TAY */OpA8X1:	movb AL, %al	movb %al, YL	SetZN	jmp S9xSA1MainAsmLoopOpA8X0:	movw AA, %ax	movw %ax, YY	testw %ax, %ax	Set16ZN	jmp S9xSA1MainAsmLoop/* TCD */Op5B:	movw AA, %ax	movw %ax, DD	testw %ax, %ax	Set16ZN	jmp S9xSA1MainAsmLoop/* TCS */Op1B:	movw AA, %ax	movw %ax, SS	testw $Emulation, FLAGS16	jz .TCS_EXIT	movb $1, SH.TCS_EXIT:	jmp S9xSA1MainAsmLoop/* TDC */Op7B:	movw DD, %ax	movw %ax, AA	testw %ax, %ax	Set16ZN	jmp S9xSA1MainAsmLoop/* TSC */Op3B:	movw SS, %ax	movw %ax, AA	testw %ax, %ax	Set16ZN	jmp S9xSA1MainAsmLoop/* TSX */OpBAX1:	movb SL, %al	movb %al, XL	SetZN	jmp S9xSA1MainAsmLoopOpBAX0:	movw SS, %ax	movw %ax, XX	testw %ax, %ax	Set16ZN	jmp S9xSA1MainAsmLoop/* TXA */Op8AM1:	movb XL, %al	movb %al, AL	SetZN	jmp S9xSA1MainAsmLoopOp8AM0:	movw XX, %ax	movw %ax, AA	testw %ax, %ax	Set16ZN	jmp S9xSA1MainAsmLoop/* TXS */Op9A:	movw XX, %ax	movw %ax, SS	testw $Emulation, FLAGS16	jz .TXS_EXIT	movb $1, SH.TXS_EXIT:	jmp S9xSA1MainAsmLoop/* TXY */Op9BX1:	movb XL, %al	movb %al, YL	SetZN	jmp S9xSA1MainAsmLoopOp9BX0:	movw XX, %ax	movw %ax, YY	testw %ax, %ax	Set16ZN	jmp S9xSA1MainAsmLoop/* TYA */Op98M1:	movb YL, %al	movb %al, AL	SetZN	jmp S9xSA1MainAsmLoopOp98M0:	movw YY, %ax	movw %ax, AA	testw %ax, %ax	Set16ZN	jmp S9xSA1MainAsmLoop/* TYX */OpBBX1:	movb YL, %al	movb %al, XL	SetZN	jmp S9xSA1MainAsmLoopOpBBX0:	movw YY, %ax	movw %ax, XX	testw %ax, %ax	Set16ZN	jmp S9xSA1MainAsmLoop/* XCE */OpFB:	movw FLAGS16, %ax	andw $~(Emulation | Carry), FLAGS16	GetCarry	jnc .XCE_NO_CARRY	orw $Emulation, FLAGS16.XCE_NO_CARRY:	testw $Emulation, %ax	setnz SA1_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:	S9xSA1FixCycles XCE	jmp S9xSA1MainAsmLoop		.data.LC0:	.string	"*** BRK".textOp00:#ifdef DEBUGGER	testb $TRACE_FLAG, SA1Flags	je .BRK_NO_TRACE	pushl $.LC0	ccall S9xTraceMessage	addl $4,%esp.BRK_NO_TRACE:#endif	testw $Emulation, FLAGS16	jnz .BRK_EMULATION	movb PB, %al	PushByte BRK1	movl PC, %eax	subl SA1PCBase, %eax	incl %eax	PushWord BRK2		S9xSA1PackStatus BRK	movb FLAGS, %al	andb $~Decimal, FLAGS	orb $IRQ, FLAGS		PushByte BRK3	xorl %ecx, %ecx	movl %ecx, SA1ShiftedPB	movb %cl, PB	movl $0xFFE6, %edx	call S9xSA1GetWord	movl %eax, %edx	andl $0xffff, %edx	call S9xSA1SetPCBase	jmp S9xSA1MainAsmLoop.BRK_EMULATION:	movl PC, %eax	subl SA1PCBase, %eax	incl %eax	PushWord BRK2		S9xSA1PackStatus BRK2	movb FLAGS, %al	andb $~Decimal, FLAGS	orb $IRQ, FLAGS		PushByte BRK3	xorl %ecx, %ecx	movl %ecx, SA1ShiftedPB	movb %cl, PB	movl $0xFFFE, %edx	call S9xSA1GetWord	movl %eax, %edx	andl $0xffff, %edx	call S9xSA1SetPCBase	jmp S9xSA1MainAsmLoop.data.LC1:	.string	"*** IRQ".text.globl S9xSA1Opcode_IRQS9xSA1Opcode_IRQ:#ifdef DEBUGGER	testb $TRACE_FLAG, SA1Flags	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 SA1PCBase, %eax	PushWord IRQ2		S9xSA1PackStatus IRQ	movb FLAGS, %al	andb $~Decimal, FLAGS	orb $IRQ, FLAGS		PushByte IRQ3	xorl %ecx, %ecx	movl %ecx, SA1ShiftedPB	movb %cl, PB// XXX: FIXME: wrong vector	xorl %edx, %edx	movl FillRAM, %eax	movw 0x2207(%eax), %dx	jmp S9xSA1SetPCBase.IRQ_EMULATION:	movl PC, %eax	subl SA1PCBase, %eax	PushWord IRQ4		S9xSA1PackStatus IRQ2	movb FLAGS, %al	andb $~Decimal, FLAGS	orb $IRQ, FLAGS		PushByte IRQ5	xorl %ecx, %ecx	movl %ecx, SA1ShiftedPB	movb %cl, PB// XXX: FIXME: wrong vector	xorl %edx, %edx	movl FillRAM, %eax	movw 0x2207(%eax), %dx	jmp S9xSA1SetPCBase.data.LC2:	.string	"*** NMI".text.globl S9xSA1Opcode_NMIS9xSA1Opcode_NMI:#ifdef DEBUGGER	testb $TRACE_FLAG, SA1Flags	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 SA1PCBase, %eax	PushWord NMI2		S9xSA1PackStatus NMI	movb FLAGS, %al	andb $~Decimal, FLAGS	orb $IRQ, FLAGS		PushByte NMI3	xorl %ecx, %ecx	movl %ecx, SA1ShiftedPB	movb %cl, PB// XXX: FIXME: wrong vector	xorl %edx, %edx	movl FillRAM, %eax	movw 0x2205(%eax), %dx	jmp S9xSA1SetPCBase.NMI_EMULATION:	movl PC, %eax	subl SA1PCBase, %eax	PushWord NMI4		S9xSA1PackStatus NMI2	movb FLAGS, %al	andb $~Decimal, FLAGS	orb $IRQ, FLAGS		PushByte NMI5	xorl %ecx, %ecx	movl %ecx, SA1ShiftedPB	movb %cl, PB// XXX: FIXME: wrong vector	xorl %edx, %edx	movl FillRAM, %eax	movw 0x2205(%eax), %dx	jmp S9xSA1SetPCBase.data.LC3:	.string	"*** COP".textOp02:#ifdef DEBUGGER	testb $TRACE_FLAG, SA1Flags	je .COP_NO_TRACE	pushl $.LC3	ccall S9xTraceMessage	addl $4,%esp.COP_NO_TRACE:#endif	testw $Emulation, FLAGS16	jnz .COP_EMULATION	movb PB, %al	PushByte COP1	movl PC, %eax	subl SA1PCBase, %eax	incl %eax	PushWord COP2		S9xSA1PackStatus COP	movb FLAGS, %al	andb $~Decimal, FLAGS	orb $IRQ, FLAGS		PushByte COP3	xorl %ecx, %ecx	movl %ecx, SA1ShiftedPB	movb %cl, PB	movl $0xFFE4, %edx	call S9xSA1GetWord	movl %eax, %edx	andl $0xffff, %edx	call S9xSA1SetPCBase	jmp S9xSA1MainAsmLoop.COP_EMULATION:	movl PC, %eax	subl SA1PCBase, %eax	incl %eax	PushWord COP4		S9xSA1PackStatus COP2	movb FLAGS, %al	andb $~Decimal, FLAGS	orb $IRQ, FLAGS		PushByte COP5	xorl %ecx, %ecx	movl %ecx, SA1ShiftedPB	movb %cl, PB	movl $0xFFF4, %edx	call S9xSA1GetWord	movl %eax, %edx	andl $0xffff, %edx	call S9xSA1SetPCBase	jmp S9xSA1MainAsmLoop/* JML */OpDC:	AbsoluteIndirectLong8 JML	movl %edx, %ecx	andl $0xff0000, %ecx	movl %ecx, SA1ShiftedPB	sarl $16, %ecx	movb %cl, PB	call S9xSA1SetPCBase	jmp S9xSA1MainAsmLoopOp5C:	AbsoluteLong8 JML	movl %edx, %ecx	andl $0xff0000, %ecx	movl %ecx, SA1ShiftedPB	sarl $16, %ecx	movb %cl, PB	call S9xSA1SetPCBase	jmp S9xSA1MainAsmLoop/* JMP */Op4C:	Absolute8 JMP	andl $0xffff, %edx	orl  SA1ShiftedPB, %edx	call S9xSA1SetPCBase	CPUShutdown JMP	jmp S9xSA1MainAsmLoopOp6C:	AbsoluteIndirect8 JMP	andl $0xffff, %edx	orl  SA1ShiftedPB, %edx	call S9xSA1SetPCBase	jmp S9xSA1MainAsmLoopOp7C:	AbsoluteIndexedIndirect8 JMP	andl $0xffff, %edx	orl SA1ShiftedPB, %edx	call S9xSA1SetPCBase	jmp S9xSA1MainAsmLoop/* JSL */Op22:	movb PB, %al	PushByte JSL_ABSL	movl PC, %eax	subl SA1PCBase, %eax	addl $2, %eax	PushWord JSL_ABSL	AbsoluteLong8 JSL	movl %edx, %ecx	andl $0xff0000, %ecx	movl %ecx, SA1ShiftedPB	sarl $16, %ecx	movb %cl, PB	call S9xSA1SetPCBase	jmp S9xSA1MainAsmLoop/* RTL */Op6B:	PullWord RTL	pushl %eax	PullByte RTL	popl %edx	movb %al, PB	incw %dx	andl $0xff, %eax	andl $0xffff, %edx	sall $16, %eax	movl %eax, SA1ShiftedPB	orl %eax, %edx	call S9xSA1SetPCBase	jmp S9xSA1MainAsmLoop/* JSR ABS */Op20:	movl PC, %eax	subl SA1PCBase, %eax	incl %eax	PushWord JSR_ABS	Absolute8 JSR_ABS	andl $0xffff, %edx	orl  SA1ShiftedPB, %edx	call S9xSA1SetPCBase	jmp S9xSA1MainAsmLoop/* JSR ABS INDEXED INDIRECT */OpFC:	movl PC, %eax	subl SA1PCBase, %eax	incl %eax	PushWord JSR_AII	AbsoluteIndexedIndirect8 JSR	andl $0xffff, %edx	orl  SA1ShiftedPB, %edx	call S9xSA1SetPCBase	jmp S9xSA1MainAsmLoop/* RTS */Op60:	PullWord RTS	incl %eax	movl %eax, %edx	andl $0xffff, %edx	orl  SA1ShiftedPB, %edx	call S9xSA1SetPCBase	jmp S9xSA1MainAsmLoop/* MVN */Op54X1:	xorl %edx, %edx	movb (PC), %dl	movb %dl, DB	sall $16, %edx	movl %edx, SA1ShiftedDB	movb 1(PC), %dl	sall $16, %edx	movw XX, %dx	call S9xSA1GetByte	movl SA1ShiftedDB, %edx	movw YY, %dx	call S9xSA1SetByte	incb XL	incb YL	movw AA, %ax	decw %ax	movw %ax, AA	cmpw $0xffff, %ax	je .MVN_EXIT8	decl PC	jmp S9xSA1MainAsmLoop.MVN_EXIT8:	addl $2, PC	jmp S9xSA1MainAsmLoopOp54X0:	xorl %edx, %edx	movb (PC), %dl	movb %dl, DB	sall $16, %edx	movl %edx, SA1ShiftedDB	movb 1(PC), %dl	sall $16, %edx	movw XX, %dx	call S9xSA1GetByte	movl SA1ShiftedDB, %edx	movw YY, %dx	call S9xSA1SetByte	incw XX	incw YY	movw AA, %ax	decw %ax	movw %ax, AA	cmpw $0xffff, %ax	je .MVN_EXIT16	decl PC	jmp S9xSA1MainAsmLoop.MVN_EXIT16:	addl $2, PC	jmp S9xSA1MainAsmLoop/* MVP */Op44X1:	xorl %edx, %edx	movb (PC), %dl	movb %dl, DB	sall $16, %edx	movl %edx, SA1ShiftedDB	movb 1(PC), %dl	sall $16, %edx	movw XX, %dx	call S9xSA1GetByte	movl SA1ShiftedDB, %edx	movw YY, %dx	call S9xSA1SetByte	decb XL	decb YL	movw AA, %ax	decw %ax	movw %ax, AA	cmpw $0xffff, %ax	je .MVP_EXIT8	decl PC	jmp S9xSA1MainAsmLoop.MVP_EXIT8:	addl $2, PC	jmp S9xSA1MainAsmLoopOp44X0:	xorl %edx, %edx	movb (PC), %dl	movb %dl, DB	sall $16, %edx	movl %edx, SA1ShiftedDB	movb 1(PC), %dl	sall $16, %edx	movw XX, %dx	call S9xSA1GetByte	movl SA1ShiftedDB, %edx	movw YY, %dx	call S9xSA1SetByte	decw XX	decw YY	movw AA, %ax	decw %ax	movw %ax, AA	cmpw $0xffff, %ax	je .MVP_EXIT16	decl PC	jmp S9xSA1MainAsmLoop.MVP_EXIT16:	addl $2, PC	jmp S9xSA1MainAsmLoop/* REP */OpC2:	movb (PC), %al	incl PC	notb %al	andb %al, FLAGS	andb %al, SA1_Negative	andb %al, SA1_Carry	testb $Zero, %al	setz %ah	orb %ah, SA1_Zero	shrb $6, %al	andb %al, SA1_Overflow	testw $Emulation, FLAGS16	jz .REP_NO_EMU	orb $(MemoryFlag | IndexFlag), FLAGS	.REP_NO_EMU:	testb $IndexFlag, FLAGS	jz .REP16	xorb %al, %al	movb %al, XH	movb %al, YH.REP16:	S9xSA1FixCycles REP	CheckForIrq REP	jmp S9xSA1MainAsmLoop/* SEP */OpE2:	movb (PC), %al	incl PC	orb %al, FLAGS	orb %al, SA1_Negative	movb %al, %ah	shrb $6, %ah	andb $1, %ah	orb %ah, SA1_Overflow	test $Zero, %al	jz .SEP_NO_ZERO	movb $0, SA1_Zero.SEP_NO_ZERO:	andb $1, %al	orb %al, SA1_Carry	testw $Emulation, FLAGS16	jz .SEP_NO_EMU	orb $(MemoryFlag | IndexFlag), FLAGS	.SEP_NO_EMU:	testb $IndexFlag, FLAGS	jz .SEP16	xorb %al, %al	movb %al, XH	movb %al, YH.SEP16:	S9xSA1FixCycles SEP	jmp S9xSA1MainAsmLoop/* XBA */OpEB:	movb AL, %ah	movb AH, %al	movb %ah, AH	movb %al, AL	SetZN	jmp S9xSA1MainAsmLoop/* RTI */Op40:	PullByte RTI	movb %al, FLAGS	PullWord RTI	andl $0xffff, %eax	pushl %eax	testw $Emulation, FLAGS16	jnz .RTI_EMU	PullByte RTI2	andl $0xff, %eax	jmp .RTI_SKIP_EMU.RTI_EMU:	orb $(MemoryFlag | IndexFlag), FLAGS	/*XXX: HERE xorl %eax, %eax*/	movl SA1ShiftedPB, %eax	sarl $16, %eax.RTI_SKIP_EMU:	movb %al, PB	popl %edx	sall $16, %eax	orl %eax, %edx	movl %eax, SA1ShiftedPB	call S9xSA1SetPCBase	testb $IndexFlag, FLAGS	jz .RTI16	xorb %al, %al	movb %al, XH	movb %al, YH.RTI16:	S9xSA1UnpackStatus RTI	S9xSA1FixCycles RTI	CheckForIrq RTI	jmp S9xSA1MainAsmLoop/* WAI */OpCB:	movb $1, SA1WaitingForInterrupt	decl PC#if 0// XXX: FIXME	movb Shutdown, %al	testb %al, %al	je .NoShutdown	movl NextEvent, CYCLES	cmpb $0, APUExecuting	je S9xSA1MainAsmLoop	movb $0, CPUExecuting.WAITExecAPU:#ifdef DEBUGGER	testb $2,APUFlags	je .WAITNoAPUS9xSA1Trace	STORE_REGISTERS	ccall S9xSA1TraceAPU	LOAD_REGISTERS.WAITNoAPUS9xSA1Trace:#endif	xorl %eax,%eax#ifdef SPC700_C	movl APUPC,%edx	SAVE_CYCLES	movb (%edx),%al#else	movb (APUPC),%al#endif	movl S9xAPUCycles(,%eax,4), %edx	movl S9xApuOpcodes(,%eax,4),%eax	addl %edx, APUCycles	call *%eax#ifdef SPC700_C        LOAD_CYCLES#endif	movl NextEvent, %eax	cmpl %eax, APUCycles	jl .WAITExecAPU	movb $1, CPUExecuting	jmp S9xSA1MainAsmLoop#endif.NoShutdown:	jmp S9xSA1MainAsmLoop/* ??? */OpDB:	decl PC	orb $DEBUG_MODE_FLAG, SA1Flags	jmp S9xSA1MainAsmLoopOp42:	jmp S9xSA1MainAsmLoop.globl S9xSA1OpcodesM1X1.data	.align 4S9xSA1OpcodesM1X1:	.long Op00	.long Op01M1	.long Op02	.long Op03M1	.long Op04M1	.long Op05M1	.long Op06M1	.long Op07M1	.long Op08	.long Op09M1	.long Op0AM1	.long Op0B	.long Op0CM1	.long Op0DM1

⌨️ 快捷键说明

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