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

📄 sa1ops.s

📁 SFC游戏模拟器 snes9x 1.43 的原代码
💻 S
📖 第 1 页 / 共 4 页
字号:
	mov #~IRQ,r2	mov.b SA1IRQActive,r0	tst r0,r0	bt .CLI_EXIT	/* XXX: test for Settings.DisableIRQ */	mov.l S9xSA1Opcode_IRQ,r3	and r2,FLAGS	Xlink.CLI_EXIT:	jmp @r13	and r2,FLAGS/* CLV */OpB8:	mov #~Overflow,r0	jmp @r13	and r0,FLAGS/* DEX */OpCAX1:	mov.b XL,r0	add #-1,r0	mov.b r0,XL	SetZNjmp r0OpCAX0:	mov.w XX,r0	add #-1,r0	mov.w r0,XX	Set16ZNjmp r0/* DEY */Op88X1:	mov.b YL,r0	add #-1,r0	mov.b r0,YL	SetZNjmp r0Op88X0:	mov.w YY,r0	add #-1,r0	mov.w r0,YY	Set16ZNjmp r0/* INX */OpE8X1:	mov.b XL,r0	add #1,r0	mov.b r0, XL	SetZNjmp r0OpE8X0:	mov.w XX,r0	add #1,r0	mov.w r0, XX	Set16ZNjmp r0/* INY */OpC8X1:	mov.b YL,r0	add #1,r0	mov.b r0, YL	SetZNjmp r0OpC8X0:	mov.w YY,r0	add #1,r0	mov.w r0,YY	Set16ZNjmp r0/* NOP */OpEA:	jmp @r13	nop/* PEA */OpF4:	Immediate16 PEA	PushWordjmp PEA/* PEI */OpD4:	DirectIndirect8 PEI	extu.w r4,r0	PushWordjmp PEI/* PER */Op62:	RelativeLong PER	extu.w r4,r0	PushWordjmp PER/* PHA */Op48M1:	extu.b A,r0	PushBytejmp PHAOp48M0:	extu.w A,r0	PushWordjmp PHA/* PHB */Op8B:	mov.b DB, r0	PushBytejmp PHB/* PHD */Op0B:	mov.w DD, r0	PushWordjmp PHD/* PHK */Op4B:	mov.b PB, r0	PushBytejmp PHK/* PHP */Op08:	S9xSA1PackStatus PHP	extu.b FLAGS, r0	PushBytejmp PHP/* PHX */OpDAX1:	mov.b XL, r0	PushBytejmp PHXOpDAX0:	mov.w XX, r0	PushWordjmp PHX/* PHY */Op5AX1:	mov.b YL, r0	PushBytejmp PHYOp5AX0:	mov.w YY, r0	PushWordjmp PHY/* PLA */Op68M1:	PullByte PLA	extu.b A,r1	add r0,A	sub r1,A	SetZNjmp AOp68M0:	PullWord PLA	extu.w r0,A	Set16ZNjmp A/* PLB */OpAB:	PullByte PLB	mov.b r0, DB	extu.b r0,r1	shll16 r1	mov.l r1,SA1ShiftedDB	SetZNjmp r0/* PLD */Op2B:	PullWord PLD	mov.w r0 DD	Set16ZNjmp r0	/* PLP */Op28:	PullByte PLP	extu.b FLAGS,r1	add r0,FLAGS	mov #IndexFlag,r2	sub r1,FLAGS	tst r2,r0	bt .PLP16	mov #0,r0	mov.b r0,XH	mov.b r0,YH.PLP16:	S9xSA1UnpackStatus PLP	S9xSA1FixCycles PLP	CheckForIrqjmp PLP/* PLX */OpFAX1:	PullByte PLX	mov.b r0, XL	SetZNjmp r0OpFAX0:	PullWord PLX	mov.w r0, XX	Set16ZNjmp r0/* PLY */Op7AX1:	PullByte PLY	mov.b r0, YL	SetZNjmp r0Op7AX0:	PullWord PLY	mov.w r0, YY	Set16ZNjmp r0/* SEC */Op38:	mov #Carry,r0	jmp @r13	or r0,FLAGS/* SED */OpF8:		mov #Decimal,r0	jmp @r13	or r0,FLAGS/* SEI */Op78:	mov #IRQ,r0	jmp @r13	or r0,FLAGS/* TAX */OpAAX1:	extu.b A,r0	mov.b r0, XL	SetZNjmp r0OpAAX0:	extu.w A,r0	mov.w r0, XX	Set16ZNjmp r0/* TAY */OpA8X1:	extu.b A,r0	mov.b r0, YL	SetZNjmp r0OpA8X0:	extu.w A,r0	mov.w r0, YY	Set16ZNjmp r0/* TCD */Op5B:	extu.w A,r0	mov.w r0, DD	Set16ZNjmp r0/* TCS */Op1B:	extu.w A,r0	mov #Emulation/4,r1	mov.w r0, SS	shll2 r1	tst r1,FLAGS16	bt .TCS_EXIT	mov #1,r0	mov.b r0,SH.TCS_EXIT:	jmp @r13	nop/* TDC */Op7B:	mov.w DD, r0	extu.w r0,A	Set16ZNjmp A/* TSC */Op3B:	mov.w SS, r0	extu.w r0,A	Set16ZNjmp A/* TSX */OpBAX1:	mov.b SL, r0	mov.b r0, XL	SetZNjmp r0OpBAX0:	mov.w SS, r0	mov.w r0, XX	Set16ZNjmp r0/* TXA */Op8AM1:	mov.b XL, r0	extu.b A,r1	extu.b r0,r0	sub r1,A	add r0,A	SetZNjmp AOp8AM0:	mov.w XX, r0	extu.w r0,A	Set16ZNjmp A/* TXS */Op9A:	mov.w XX, r0	mov #Emulation/4,r1	mov.w r0, SS	shll2 r1	tst r1,FLAGS16	bt .TXS_EXIT	mov #1,r0	mov.b r0,SH.TXS_EXIT:	jmp @r13	nop/* TXY */Op9BX1:	mov.b XL, r0	mov.b r0, YL	SetZNjmp r0Op9BX0:	mov.w XX, r0	mov.w r0, YY	Set16ZNjmp r0/* TYA */Op98M1:	mov.b YL, r0	extu.b A,r1	extu.b r0,r0	sub r1,A	add r0,A	SetZNjmp AOp98M0:	mov.w YY, r0	extu.w r0,A	Set16ZNjmp A/* TYX */OpBBX1:	mov.b YL, r0	mov.b r0, XL	SetZNjmp r0OpBBX0:	mov.w YY, r0	mov.w r0, XX	Set16ZNjmp r0/* XCE */OpFB:	mov FLAGS16, r0	mov.w .notemcymask,r1	and r1,FLAGS16	tst #Carry,r0	mov.w .emflag0,r1	bt .XCE_NO_CARRY	or r1,FLAGS16.XCE_NO_CARRY:	tst r1,r0	bt/s .XCE_NO_EMU	tst r1,FLAGS	add #Carry,FLAGS.XCE_NO_EMU:	bt/s .XCE_NO_EMULATION2	mov #IndexFlag,r1	mov #MemoryFlag|IndexFlag,r0	or r0,FLAGS	mov #1,r0	mov.b r0,SH.XCE_NO_EMULATION2:	tst r1,FLAGS	bt .XCE_NO_INDEX	mov #0,r0	mov.b r0, XH	mov.b r0, YH.XCE_NO_INDEX:	S9xSA1FixCycles XCE	jmp @r13	nop.emflag0:	.word	EmulationOp00:#ifdef DEBUGGER	testb $TRACE_FLAG, Flags	je .BRK_NO_TRACE	pushl $.LC0	ccall S9xTraceMessage	addl $4,%esp.BRK_NO_TRACE:#endif	mov.w .emflag,r0	tst r0,FLAGS16	bf .BRK_EMULATION	mov.b PB, r0	PushByte BRK1	mov.l SA1PCBase,r0	neg r0,r0	add PC, r0	add #1,r0	PushWord BRK2		S9xSA1PackStatus BRK	extu.b FLAGS, r0	mov #Decimal|IRQ,r1	or r1,FLAGS	add #-Decimal, FLAGS		PushByte BRK3	mov #0,r0	mov.l r0,SA1ShiftedPB	mov.b r0,PB	mov.l S9xGetWord,r3	mov #-0x1a,r4	jsr @r3	extu.w r4,r4	mov.l S9xSetPCBase,r3	extu.w r0,r4	Xlink.BRK_EMULATION:	mov.l SA1PCBase,r0	neg r0,r0	add PC, r0	add #1,r0	PushWord BRK2		S9xSA1PackStatus BRK2	extu.b FLAGS, r0	mov #Decimal|IRQ,r1	or r1,FLAGS	add #-Decimal, FLAGS		PushByte BRK3	mov #0,r0	mov.l r0,SA1ShiftedPB	mov.b r0,PB	mov.l S9xGetWord,r3	mov #-2,r4	jsr @r3	extu.w r4,r4	mov.l S9xSetPCBase,r3	extu.w r0,r4	Xlink.notemcymask:	.word	~(Emulation|Carry).emflag:	.word	Emulation#ifdef DEBUGGER	.align 4.LC0:	.ascii	"*** BRK"	.byte 0#endif	.globl S9xSA1Opcode_IRQ_rS9xSA1Opcode_IRQ_r:#ifdef DEBUGGER	testb $TRACE_FLAG, Flags	je .IRQ_NO_TRACE	pushl $.LC1	ccall S9xTraceMessage	addl $4, %esp.IRQ_NO_TRACE:#endif	mov.w .emflag1,r0	sts.l pr,@-r15	tst r0,FLAGS16	bf .IRQ_EMULATION	mov.b PB, r0	PushByte IRQ1	mov.l SA1PCBase,r0	neg r0,r0	add PC, r0	PushWord IRQ2		S9xSA1PackStatus IRQ	extu.b FLAGS, r0	mov #Decimal|IRQ,r1	or r1,FLAGS	add #-Decimal, FLAGS		PushByte IRQ3	mov #0,r0	mov.l r0,SA1ShiftedPB	mov.b r0,PB// XXX: FIXME: wrong vector	mov.l .FillRAM2,r3	mov.w .n2207,r0	mov.l @r3,r3	mov.b @(r0,r3),r1	add #1,r0	extu.b r1,r1	mov.b @(r0,r3),r4	shll8 r4	mov.l S9xSetPCBase,r3	or r1,r4	jmp @r3	extu.w r4,r4.IRQ_EMULATION:	mov.l SA1PCBase,r0	neg r0,r0	add PC, r0	PushWord IRQ4		S9xSA1PackStatus IRQ2	extu.b FLAGS, r0	mov #Decimal|IRQ,r1	or r1,FLAGS	add #-Decimal, FLAGS		PushByte IRQ5	mov #0,r0	mov.l r0,SA1ShiftedPB	mov.b r0,PB// XXX: FIXME: wrong vector	mov.l .FillRAM2,r3	mov.w .n2207,r0	mov.l @r3,r3	mov.b @(r0,r3),r1	add #1,r0	extu.b r1,r1	mov.b @(r0,r3),r4	shll8 r4	mov.l S9xSetPCBase,r3	or r1,r4	jmp @r3	extu.w r4,r4.emflag1:	.word	Emulation#ifdef DEBUGGER	.align 4.LC1:	.ascii	"*** IRQ"	.byte 0#endif	.align 2.FillRAM2:	.long FillRAM.n2207:	.word 0x2207.globl S9xSA1Opcode_NMI_rS9xSA1Opcode_NMI_r:#ifdef DEBUGGER	testb $TRACE_FLAG, SA1Flags	je .NMI_NO_TRACE	pushl $.LC2	ccall S9xTraceMessage	addl $4, %esp.NMI_NO_TRACE:#endif	mov.w .emflag2,r0	sts.l pr,@-r15	tst r0,FLAGS16	bf .NMI_EMULATION	mov.b PB, r0	PushByte NMI1	mov.l SA1PCBase,r0	neg r0,r0	add PC, r0	PushWord NMI2	S9xSA1PackStatus NMI	extu.b FLAGS, r0	mov #Decimal|IRQ,r1	or r1,FLAGS	add #-Decimal, FLAGS		PushByte NMI3	mov #0,r0	mov.l r0,SA1ShiftedPB	mov.b r0,PB// XXX: FIXME: wrong vector	mov.l .FillRAM3,r3	mov.w .n2205,r0	mov.l @r3,r3	mov.b @(r0,r3),r1	add #1,r0	extu.b r1,r1	mov.b @(r0,r3),r4	shll8 r4	mov.l S9xSetPCBase,r3	or r1,r4	jmp @r3	extu.w r4,r4.NMI_EMULATION:	mov.l SA1PCBase,r0	neg r0,r0	add PC, r0	PushWord NMI4		S9xSA1PackStatus NMI2	extu.b FLAGS, r0	mov #Decimal|IRQ,r1	or r1,FLAGS	add #-Decimal, FLAGS		PushByte NMI5	mov #0,r0	mov.l r0,SA1ShiftedPB	mov.b r0,PB// XXX: FIXME: wrong vector	mov.l .FillRAM3,r3	mov.w .n2205,r0	mov.l @r3,r3	mov.b @(r0,r3),r1	add #1,r0	extu.b r1,r1	mov.b @(r0,r3),r4	shll8 r4	mov.l S9xSetPCBase,r3	or r1,r4	jmp @r3	extu.w r4,r4	.align 2.FillRAM3:	.long FillRAM.emflag2:	.word	Emulation.n2205:	.word	0x2205#ifdef DEBUGGER	.align 4.LC2:	.ascii	"*** NMI"	.byte 0#endifOp02:#ifdef DEBUGGER	testb $TRACE_FLAG, SA1Flags	je .COP_NO_TRACE	pushl $.LC3	ccall S9xTraceMessage	addl $4,%esp.COP_NO_TRACE:#endif	mov.w .emflag25,r0	tst r0,FLAGS16	bf .COP_EMULATION	mov.b PB, r0	PushByte COP1	mov.l SA1PCBase,r0	neg r0,r0	add PC, r0	add #1,r0	PushWord COP2		S9xSA1PackStatus COP	extu.b FLAGS, r0	mov #Decimal|IRQ,r1	or r1,FLAGS	add #-Decimal, FLAGS		PushByte COP3	mov #0,r0	mov.l r0,SA1ShiftedPB	mov.b r0,PB	mov.l S9xGetWord,r3	mov #-0x1c,r4	jsr @r3	extu.w r4,r4	mov.l S9xSetPCBase,r3	extu.w r0,r4	Xlink.COP_EMULATION:	mov.l SA1PCBase,r0	neg r0,r0	add PC, r0	add #1,r0	PushWord COP4		S9xSA1PackStatus COP2	extu.b FLAGS, r0	mov #Decimal|IRQ,r1	or r1,FLAGS	add #-Decimal, FLAGS		PushByte COP5	mov #0,r0	mov.l r0,SA1ShiftedPB	mov.b r0,PB	mov.l S9xGetWord,r3	mov #-0xc,r4	jsr @r3	extu.w r4,r4	mov.l S9xSetPCBase,r3	extu.w r0,r4	Xlink.emflag25:	.word	Emulation	#ifdef DEBUGGER	.align 4.LC3:	.ascii	"*** COP"	.byte 0#endif/* JML */OpDC:	AbsoluteIndirectLong8 JML	mov.l r0,SA1ShiftedPB	shlr16 r0	mov.l S9xSetPCBase,r3	mov.b r0,PB	XlinkOp5C:	AbsoluteLong8 JML	mov.l r0,SA1ShiftedPB	shlr16 r0	mov.l S9xSetPCBase,r3	mov.b r0,PB	Xlink/* JMP */Op4C:	Absolute8 JMP	extu.w r4,r4	mov.l SA1ShiftedPB,r0	mov.l S9xSetPCBase,r3	or r0,r4	XlinkOp6C:	AbsoluteIndirect8 JMP	extu.w r4,r4	mov.l SA1ShiftedPB,r0	mov.l S9xSetPCBase,r3	or r0,r4	XlinkOp7C:	AbsoluteIndexedIndirect8 JMP	extu.w r4,r4	mov.l SA1ShiftedPB,r0	mov.l S9xSetPCBase,r3	or r0,r4	Xlink/* JSL */Op22:	mov.b PB, r0	PushByte JSL_ABSL	mov.l SA1PCBase,r0	neg r0,r0	add PC, r0	add #2,r0	PushWord JSL_ABSL	AbsoluteLong8 JSL	mov.l r0,SA1ShiftedPB	shlr16 r0	mov.l S9xSetPCBase,r3	mov.b r0,PB	Xlink/* RTL */Op6B:	PullWord RTL	mov.l r0,@-r15	PullByte RTL	mov.l @r15+,r4	mov.b r0, PB	add #1,r4	shll16 r0	extu.w r4,r4	mov.l r0,SA1ShiftedPB	mov.l S9xSetPCBase,r3	or r0,r4	Xlink/* JSR ABS */Op20:	mov.l SA1PCBase,r0	neg r0,r0	add PC, r0	add #1,r0	PushWord JSR_ABS	Absolute8 JSR_ABS	extu.w r4,r4	mov.l SA1ShiftedPB,r0	mov.l S9xSetPCBase,r3	or r0,r4	Xlink/* JSR ABS INDEXED INDIRECT */OpFC:	mov.l SA1PCBase,r0	neg r0,r0	add PC, r0	add #1,r0	PushWord JSR_AII	AbsoluteIndexedIndirect8 JSR	extu.w r4,r4	mov.l SA1ShiftedPB,r0	mov.l S9xSetPCBase,r3	or r0,r4	Xlink/* RTS */Op60:	PullWord RTS	add #1,r0	extu.w r0,r4	mov.l SA1ShiftedPB,r0	mov.l S9xSetPCBase,r3	or r0,r4	Xlink/* MVN */Op54X1:	mov.b @PC+,r0	mov.b r0,DB	extu.b r0,r0	shll16 r0	mov.l r0,SA1ShiftedDB	mov.l r0,@-r15	mov.b @PC+,r4	mov.l S9xGetByte,r3	extu.b r4,r4	mov.w XX,r0	shll16 r4	extu.w r0,r0	jsr @r3	add r0,r4	mov r0,r5	mov.w YY,r0	mov.l S9xSetByte,r3	mov.l @r15+,r4	extu.w r0,r1	mov r5,r0	jsr @r3	add r1,r4	mov.b XL,r0	add #1,r0	mov.b r0,XL	mov.b YL,r0	add #1,r0	mov.b r0,YL	add #-1,A	cmp/pz A	bf/s .MVN_EXIT8	extu.w A,A	jmp @r13	add #-3,PC.MVN_EXIT8:	jmp @r13	nopOp54X0:	mov.b @PC+,r0	mov.b r0,DB	extu.b r0,r0	shll16 r0	mov.l r0,SA1ShiftedDB	mov.l r0,@-r15	mov.b @PC+,r4	mov.l S9xGetByte,r3	extu.b r4,r4	mov.w XX,r0	shll16 r4	extu.w r0,r1	add #1,r0	add r1,r4	jsr @r3	mov.w r0,XX	mov r0,r5	mov.w YY,r0	mov.l S9xSetByte,r3	mov.l @r15+,r4	extu.w r0,r1	add #1,r0	add r1,r4	mov.w r0,YY	jsr @r3	mov r5,r0	add #-1,A	cmp/pz A	bf/s .MVN_EXIT16	extu.w A,A	jmp @r13	add #-3,PC.MVN_EXIT16:	jmp @r13	nop/* MVP */Op44X1:	mov.b @PC+,r0	mov.b r0,DB	extu.b r0,r0	shll16 r0	mov.l r0,SA1ShiftedDB	mov.l r0,@-r15	mov.b @PC+,r4	mov.l S9xGetByte,r3	extu.b r4,r4	mov.w XX,r0	shll16 r4	extu.w r0,r0	jsr @r3	add r0,r4	mov r0,r5	mov.w YY,r0	mov.l S9xSetByte,r3	mov.l @r15+,r4	extu.w r0,r1	mov r5,r0	jsr @r3	add r1,r4	mov.b XL,r0	add #-1,r0	mov.b r0,XL	mov.b YL,r0	add #-1,r0	mov.b r0,YL	add #-1,A	cmp/pz A	bf/s .MVP_EXIT8	extu.w A,A	jmp @r13	add #-3,PC.MVP_EXIT8:	jmp @r13	nopOp44X0:	mov.b @PC+,r0	mov.b r0,DB	extu.b r0,r0	shll16 r0	mov.l r0,SA1ShiftedDB	mov.l r0,@-r15	mov.b @PC+,r4	mov.l S9xGetByte,r3	extu.b r4,r4	mov.w XX,r0	shll16 r4	extu.w r0,r1	add #-1,r0	add r1,r4	jsr @r3	mov.w r0,XX	mov r0,r5	mov.w YY,r0	mov.l S9xSetByte,r3	mov.l @r15+,r4	extu.w r0,r1	add #-1,r0	add r1,r4	mov.w r0,YY	jsr @r3	mov r5,r0	add #-1,A	cmp/pz A	bf/s .MVP_EXIT16	extu.w A,A	jmp @r13	add #-3,PC.MVP_EXIT16:	jmp @r13	nop/* REP */OpC2:	mov.b @PC+,r0	mov #Zero,r1	extu.b r0,r0	mov #-1,r2	and r0,r1	not r0,r0	or r1,r7	and r0,FLAGS	extu.w r2,r2	exts.b r0,r1	mov.w .emflag3,r0	or r2,r1	tst r0,FLAGS16	bt/s .REP_NO_EMU	and r1,r7	mov #(MemoryFlag | IndexFlag), r0	or r0, FLAGS	.REP_NO_EMU:	mov #IndexFlag,r0	tst r0,FLAGS	bt .REP16	mov #0,r0	mov.b r0,XH	mov.b r0,YH.REP16:	S9xSA1FixCycles REP	CheckForIrqjmp REP/* SEP */OpE2:	mov.b @PC+,r0	mov #Zero,r1	extu.b r0,r0	and r0,r1	exts.b r0,r2	shll8 r1	or r0,FLAGS	shlr2 r1	extu.w r2,r0	exts.b r1,r1	sub r0,r2	shlr16 r1	or r2,r7	mov.w .emflag3,r0	not r1,r1	tst r0,FLAGS16	bt/s .SEP_NO_EMU	and r1,r7	mov #(MemoryFlag | IndexFlag), r0	or r0, FLAGS	.SEP_NO_EMU:	mov #IndexFlag,r0	tst r0,FLAGS	bt .SEP16	mov #0,r0	mov.b r0,XH	mov.b r0,YH.SEP16:	S9xSA1FixCycles SEP	jmp @r13	nop/* XBA */OpEB:	swap.b A,A	SetZNjmp A/* RTI */Op40:	PullByte RTI	extu.b FLAGS,r1	add r0,FLAGS	sub r1,FLAGS	PullWord RTI	mov.w .emflag3,r1	mov.l r0,@-r15	tst r1, FLAGS16	bf .RTI_EMU	PullByte RTI2	bra .RTI_SKIP_EMU	extu.b r0,r0.RTI_EMU:	mov #(MemoryFlag | IndexFlag), r0	or r0,FLAGS	/*XXX: HERE xorl %eax, %eax*/	mov.l SA1ShiftedPB,r0	shlr16 r0.RTI_SKIP_EMU:	mov.b r0,PB	mov.l @r15+,r4	shll16 r0	mov.l r0,SA1ShiftedPB	mov.l S9xSetPCBase,r3	jsr @r3	or r0,r4	mov #IndexFlag,r0	tst r0,FLAGS	bt .RTI16	mov #0,r0	mov.b r0,XH	mov.b r0,YH.RTI16:	S9xSA1UnpackStatus RTI	S9xSA1FixCycles RTI	CheckForIrqjmp RTI.emflag3:	.word	Emulation

⌨️ 快捷键说明

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