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

📄 cpuexec.s

📁 SFC游戏模拟器 snes9x 1.43 的原代码
💻 S
📖 第 1 页 / 共 2 页
字号:
#endif	/* ARMAPU */.S9xSyncSpeed:	.long _S9xSyncSpeed.globl _S9xDoHBlankProcessing_S9xDoHBlankProcessing:	mov.l r14,@-r15	mov.l r13,@-r15	sts.l pr,@-r15	mov.l r12,@-r15	mov.l r11,@-r15	SETUP_PREDEF	bsr S9xDoHBlankProcessing	nop	mov.l @r15+,r11	mov.l @r15+,r12	lds.l @r15+,pr	mov.l @r15+,r13	rts	mov.l @r15+,r14	MISC	S9xDoHBlankProcessing:#if 0	sts.l pr,@-r15	mov.l .hbtrace,r0	mov r11,r4	jsr @r0	mov r12,r5		bsr 6f	nop	mov.l .hbtrace,r0	mov r11,r4	jsr @r0	mov r12,r5		lds.l @r15+,pr	rts	nop	.align 2.hbtrace: .long __Z8hb_traceP10SRegistersP9SCPUState	6:		#endif	sts.l pr,@-r15#ifdef CPU_SHUTDOWN	mov.l WaitCounter,r1#endif	mov.b WhichEvent,r0#ifdef CPU_SHUTDOWN	add #1,r1#endif	tst r0,r0#ifdef CPU_SHUTDOWN	mov.l r1,WaitCounter#endif	bt/s .hblank_start	cmp/eq #1,r0	bt/s .hblank_end	mov #3,r1	cmp/hi r1,r0	bt .reschedule.htimer_trigger:	mov.l PPU,r1	mov.b HTimerEnabled,r0	tst r0,r0	bt .reschedule	mov.b VTimerEnabled,r0	tst r0,r0	bt .L191	mov.w IRQVBeamPos,r0	mov.l V_Counter,r3	extu.w r0,r0	cmp/eq r0,r3	bf .reschedule.L191:	// CHANGED: 20/11/00	bsr _S9xSetIRQ	mov #1,r4	bra .reschedule	nop.hblank_start:			mov.l IPPU,r1	mov.b HDMA,r0	mov r0,r4	tst r0,r0	bt .reschedule	mov.l PPU,r1	mov.w ScreenHeight,r0	mov.l V_Counter,r1	cmp/hi r0,r1	bt .reschedule	mov.l .S9xDoHDMA,r3	jsr @r3	extu.b r4,r4	mov.l IPPU,r1	mov.b r0,HDMA.reschedule:	mov.b WhichEvent,r0	tst r0,r0	bt/s .next_is_hblank_end	mov.l Settings,r1	cmp/eq #3,r0	bf .next_is_hblank_start.next_is_hblank_end:	mov #1,r4	bra .skip	mov.l H_Max,r5.next_is_hblank_start:	mov #0,r4	mov.l HBlankStart,r5.skip:	mov.l PPU,r1	mov.b HTimerEnabled,r0	tst r0,r0	bt .not_enabled	mov.w HTimerPosition,r0	cmp/ge r5,r0	bt .not_enabled	mov.l NextEvent,r3	mov r0,r6	cmp/gt r3,r0	bf .not_enabled	mov.b VTimerEnabled,r0	tst r0,r0	bt .enabled	mov.w IRQVBeamPos,r0	mov.l V_Counter,r2	extu.w r0,r0	cmp/eq r0,r2	bf .not_enabled.enabled:	mov.l Settings,r1	mov #2,r4	mov.l HBlankStart,r0	cmp/gt r6,r0	bt/s .before	mov r6,r5	mov #3,r4.before:.not_enabled:	mov r4,r0	mov.l r5,NextEvent	lds.l @r15+,pr	rts	mov.b r0,WhichEvent.hblank_end:	mov.l .S9xSuperFXExec,r3	jsr @r3	nop/*	testb $0xff, SoundSync	jz .nosoundsync */	mov.l .S9xGenerateSound,r3	jsr @r3	nop.nosoundsync:	mov.l Settings,r1	mov.l Cycles,r0	mov.l H_Max,r2	sub r2,r0	mov.l r0,Cycles#ifndef ARMAPU	mov.l IAPU,r1	mov.b APUExecuting,r0	tst r0,r0	bt/s .apunotrunning	mov.l APU,r1	mov.l APUCycles,r0	sub r2,r0/*	bra .apucycleskip	mov.l r0,APUCycles */.apunotrunning:	mov.l r0,APUCycles.apucycleskip:	#endif	/* ARMAPU */	mov.l PPU,r1	mov.l V_Counter,r0	add #1,r0	mov.l ICPU,r1	mov.l Scanline,r2	add #1,r2	mov.l r2,Scanline	mov #-1,r2	mov.l r2,NextEvent	mov.l PPU,r1	mov.l r0,V_Counter	mov.w .n262,r3	cmp/hi r3,r0	bf .L161	mov.w .n312,r3	cmp/hi r3,r0	mov.l Settings,r1	bt .ntsc_tv	mov.b PAL,r0	tst r0,r0	bf .L161.ntsc_tv:	mov.l PPU,r1	mov.w SavedOAMAddr,r0	mov #0,r4	mov.l Flags,r3	mov.w r0,OAMAddr	mov r4,r0	mov.b r0,OAMFlip	mov.b r0,NMIActive	mov #16,r0	or r0,r3	mov.l r4,V_Counter	mov r4,r0	mov.l .S9xStartHDMA,r2	mov.b r0,HVBeamCounterLatched	jsr @r2	mov.l r3,Flags.L161:	mov.l PPU,r1	mov.b VTimerEnabled,r0	tst r0,r0	bt .L162	mov.b HTimerEnabled,r0	tst r0,r0	bf .L162	mov.w IRQVBeamPos,r0	mov.l V_Counter,r2	extu.w r0,r0	cmp/eq r0,r2	bf .L162	mov.b IRQActive,r0	or #2,r0	mov.b r0,IRQActive	mov.b WaitingForInterrupt,r0	tst r0,r0	bt .L163	mov.l PCS,r0	add #1,r0	mov.l r0,PCS	mov #0,r0	mov.b r0,WaitingForInterrupt.L163:/*	movb DisableIRQ,%al	testb %al,%al	jne .L162*/#if 0	mov.b PP,r0	tst #4,r0	bf .L162	mov.l S9xOpcode_IRQ,r3	/* PUSH_REGISTERS */	LOAD_REGISTERS IRQ	jsr @r3	nop	STORE_REGISTERS IRQ	/* POP_REGISTERS */#endif	bsr _S9xSetIRQ	mov #2,r4.L162:	mov.l PPU,r1	mov.w ScreenHeight,r0	mov.l V_Counter,r2	add #1,r0	cmp/eq r0,r2	bf .L165	mov.l .S9xEndScreenRefresh,r0	jsr @r0	nop	mov.l PPU,r1	mov #0,r0	mov.b r0,FirstSprite	mov.b Brightness,r0	mov.l IPPU,r1	mov.b r0,MaxBrightness	mov #0,r0	mov.b r0,HDMA	mov.l .FillRAM0,r0	mov.w .nx2100,r2	mov.l @r0,r0	mov.b @(r0,r2),r3	shll r2	shll r3	mov.l PPU,r1	shlr8 r3	mov #1,r0	and r3,r0	mov.b r0,ForcedBlanking	mov.l .FillRAM0,r0	mov.l @r0,r0	mov.b @(r0,r2),r3	add #0x10,r2	cmp/pz r3	mov #0x80,r3	bt/s .L165	mov.b r3,@(r0,r2)	mov.l Flags,r0	or #NMI_FLAG,r0	mov.l r0,Flags	mov #NMITriggerPoint_offs,r0	mov.l @(r0,r12),r2	mov #1,r0	mov.l r2,NMICycleCount	mov.b r0,NMIActive.L165:	mov.w ScreenHeight,r0	add #3,r0	mov.l V_Counter,r2	cmp/eq r0,r2	bf .NoJoypadUpdate	mov.l .S9xUpdateJoypads,r3	jsr @r3	nop.NoJoypadUpdate:	mov.l V_Counter,r0	cmp/eq #1,r0	bf .L177	mov.l .FillRAM0,r3	mov #0,r2	mov.l @r3,r3	mov.w .n4210,r1	mov.l Flags,r0	add r1,r3	mov.b r2,@r3	or #NMI_FLAG,r0	mov.l .S9xStartScreenRefresh,r3	add #-NMI_FLAG,r0	jsr @r3	mov.l r0,Flags.L177:	mov.l V_Counter,r3	mov.l PPU,r1	tst r3,r3	bt .L178	mov.w ScreenHeight,r0	extu.w r0,r0	add #1,r0	cmp/ge r0,r3	bt .L178	mov.l V_Counter,r0	mov.l .RenderLine,r3	add #-1,r0	jsr @r3	extu.b r0,r4.L178:#ifndef ARMAPU#if 0	movl APUTimerErrorCounter,%eax	incl %eax	movl %eax,APUTimerErrorCounter	andl $31,%eax	jz .reschedule#endif	mov.l .APUTimer_ptr,r2	mov.l IAPU,r1	mov.b @(APUTimerEnabled - APUTimer + 2,r2),r0	tst r0,r0	bt .L179	mov.w @(4,r2),r0	add #4,r0	mov.w r0,@(4,r2)	extu.w r0,r3	mov.w @(APUTimerTarget - APUTimer + 4,r2),r0	extu.w r0,r0	cmp/hs r0,r3	bf .L179.L182:	mov.w .n255,r0	mov.l APURAM,r3	add r0,r3	mov.b @r3,r0	add #1,r0	and #15,r0	mov.b r0,@r3	mov.w @(APUTimerTarget - APUTimer + 4,r2),r0	extu.w r0,r3	mov.w @(4,r2),r0#ifdef SPC700_SHUTDOWN	mov.l APUWaitCounter,r4	sub r3,r0	add #1,r4	mov.w r0,@(4,r2)	extu.w r0,r0	mov.l r4,APUWaitCounter	cmp/hs r3,r0	mov #1,r0	bt/s .L182	mov.b r0,APUExecuting#else	sub r3,r0	mov.w r0,@(4,r2)	extu.w r0,r0	cmp/hs r3,r0	bt .L182#endif.L179:	mov.l V_Counter,r0	tst #1,r0	bt 1f	mov.b @(APUTimerEnabled - APUTimer,r2),r0	tst r0,r0	bt .L185	mov.w @r2,r0	add #1,r0	mov.w r0,@r2	extu.w r0,r3	mov.w @(APUTimerTarget - APUTimer,r2),r0	extu.w r0,r0	cmp/hs r0,r3	bf .L185	mov.w .n253,r0	mov.l APURAM,r3	add r0,r3	mov.b @r3,r0	add #1,r0	and #15,r0	mov.b r0,@r3#ifdef SPC700_SHUTDOWN	mov.l APUWaitCounter,r3	mov #0,r0	add #1,r3	mov.w r0,@r2	add #1,r0	mov.l r3,APUWaitCounter	mov.b r0,APUExecuting#else	mov #0,r0	mov.w r0,@r2#endif.L185:	mov.b @(APUTimerEnabled - APUTimer + 1,r2),r0	tst r0,r0	bt 1f	mov.w @(2, r2),r0	add #1,r0	mov.w r0,@(2, r2)	extu.w r0,r3	mov.w @(APUTimerTarget - APUTimer + 2,r2),r0	extu.w r0,r0	cmp/hs r0,r3	bf 1f	mov.w .n254,r0	mov.l APURAM,r3	add r0,r3	mov.b @r3,r0	add #1,r0	and #15,r0	mov.b r0,@r3#ifdef SPC700_SHUTDOWN	mov.l APUWaitCounter,r3	mov #0,r0	add #1,r3	mov.w r0,@(2,r2)	add #1,r0	mov.l r3,APUWaitCounter	bra .reschedule	mov.b r0,APUExecuting#else	mov #0,r0	bra .reschedule	mov.w r0,@(2,r2)#endif#endif	/* ARMAPU */1:	bra .reschedule	nop	.align 2.S9xDoHDMA:	.long _S9xDoHDMA.S9xSuperFXExec:		.long _S9xSuperFXExec	.S9xGenerateSound:	.long _S9xGenerateSound	#ifndef ARMAPU.APUTimer_ptr:	.long _APU+APUTimer#endif	/* ARMAPU */.S9xStartHDMA:		.long _S9xStartHDMA.S9xEndScreenRefresh:		.long _S9xEndScreenRefresh.FillRAM0:		.long FillRAM.S9xUpdateJoypads:		.long _S9xUpdateJoypads.S9xStartScreenRefresh:	.long _S9xStartScreenRefresh.RenderLine:	.long _RenderLine.n4210:	.word 0x4210.nx2100:	.word 0x2100.n253:	.word 253.n254:	.word 254.n255:	.word 255.n262:	.word 262.n312:	.word 312.text	.align 4.globl _S9xSetIRQ_S9xSetIRQ:	mov.l r12,@-r15	mov.l ._CPU,r12	mov.b IRQActive,r0	// CHANGED: 20/11/00	mov #3,r1	or r4,r0	mov.l r1,IRQCycleCount	mov.b r0,IRQActive	mov.l Flags,r2	mov.w .pIRQ_PENDING_FLAG2,r0	or r0,r2	mov.l r2,Flags	mov.b WaitingForInterrupt,r0	tst r0,r0	bt .NoIncPC	mov #0,r0	mov.b r0,WaitingForInterrupt	// IRQ must trigger immediately after a WAI instruction - 	// Final Fantasy Mystic Quest requires this.	mov.l PCS,r1	mov.l r0,IRQCycleCount	add #1,r1	mov.l r1,PCS.NoIncPC:	rts	mov.l @r15+,r12.globl _S9xClearIRQ_S9xClearIRQ:	mov.l r12,@-r15	mov.l ._CPU,r12	not r4,r3	mov.b IRQActive,r0	and r3,r0	mov.b r0,IRQActive	tst r0,r0	bf .irqsstillpending	mov.w .nIRQ_PENDING_FLAG2,r0	mov.l Flags,r2	and r0,r2	mov.l r2,Flags.irqsstillpending:	rts	mov.l @r15+,r12	.align 2._CPU:	.long _CPU.pIRQ_PENDING_FLAG2:	.word IRQ_PENDING_FLAG.nIRQ_PENDING_FLAG2:	.word ~IRQ_PENDING_FLAG

⌨️ 快捷键说明

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