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

📄 spc700.s

📁 SFC游戏模拟器 snes9x 1.43 的原代码
💻 S
📖 第 1 页 / 共 5 页
字号:
/*******************************************************************************  Snes9x - Portable Super Nintendo Entertainment System (TM) emulator.   (c) Copyright 1996 - 2003 Gary Henderson (gary.henderson@ntlworld.com) and                            Jerremy Koot (jkoot@snes9x.com)  (c) Copyright 2002 - 2003 Matthew Kendora and                            Brad Jorsch (anomie@users.sourceforge.net)                         C4 x86 assembler and some C emulation code  (c) Copyright 2000 - 2003 zsKnight (zsknight@zsnes.com),                            _Demo_ (_demo_@zsnes.com), and                            Nach (n-a-c-h@users.sourceforge.net)                                            C4 C++ code  (c) Copyright 2003 Brad Jorsch  DSP-1 emulator code  (c) Copyright 1998 - 2003 Ivar (ivar@snes9x.com), _Demo_, Gary Henderson,                            John Weidman (jweidman@slip.net),                            neviksti (neviksti@hotmail.com), and                            Kris Bleakley (stinkfish@bigpond.com)   DSP-2 emulator code  (c) Copyright 2003 Kris Bleakley, John Weidman, neviksti, Matthew Kendora, and                     Lord Nightmare (lord_nightmare@users.sourceforge.net  OBC1 emulator code  (c) Copyright 2001 - 2003 zsKnight, pagefault (pagefault@zsnes.com)  Ported from x86 assembler to C by sanmaiwashi  SPC7110 and RTC C++ emulator code  (c) Copyright 2002 Matthew Kendora with research by                     zsKnight, John Weidman, and Dark Force  S-RTC C emulator code  (c) Copyright 2001 John Weidman    Super FX x86 assembler emulator code   (c) Copyright 1998 - 2003 zsKnight, _Demo_, and pagefault   Super FX C emulator code   (c) Copyright 1997 - 1999 Ivar and Gary Henderson.  S-DD1 decompression code  (c) Copyright 2003 Jose Luis Bravo   Specific ports contains the works of other authors. See headers in  individual files.   Snes9x homepage: http://www.snes9x.com   Permission to use, copy, modify and distribute Snes9x in both binary and  source form, for non-commercial purposes, is hereby granted without fee,  providing that this license information and copyright notice appear with  all copies and any derived work.   This software is provided 'as-is', without any express or implied  warranty. In no event shall the authors be held liable for any damages  arising from the use of this software.   Snes9x is freeware for PERSONAL USE only. Commercial users should  seek permission of the copyright holders first. Commercial use includes  charging money for Snes9x or software derived from Snes9x.   The copyright holders request that bug fixes and improvements to the code  should be forwarded to them so everyone can benefit from the modifications  in future versions.   Super NES and Super Nintendo Entertainment System are trademarks of  Nintendo Co., Limited and its subsidiary companies.*******************************************************************************/#include "asmstruc.h"#include "spcops.h".section	.rodata.LC2:	.string	"Sound CPU in unknown state executing %s at %04X\n%s\n".textSTOP:	subl $100,%esp	pushl %esi	pushl %ebx	movl APUPC,%edx	movl APURAM,%eax	subl %eax,%edx	movl %edx,%eax	andl $65535,%eax	movl 112(%esp),%esi	pushl %eax	leal 12(%esp),%ebx	pushl %ebx#ifdef DEBUGGER	call S9xAPUOPrint#endif	pushl %ebx	movl APUPC,%edx	movl APURAM,%eax	subl %eax,%edx	movl %edx,%eax	pushl %eax	pushl %esi	pushl $.LC2	pushl $String	call sprintf	pushl $String	pushl $5	pushl $4	call S9xMessage	xorl %edx,%edx	movl CPU,%ecx	addl $40,%esp	movb %dl,APUTimerEnabled+2	movb %dl,APUTimerEnabled+1	popl %ebx	movb %dl,APUTimerEnabled	orl $1,%ecx	popl %esi	movb %dl,APUExecuting	movl %ecx,CPU	addl $100,%esp	retApuOp00:	movl APUPC,%eax	incl %eax	movl %eax,APUPC	retApuOp01:	pushl %ebx	movl APURAM,%edx	movl APUPC,%ebx	movl %edx,%eax	subl %eax,%ebx	movb ApuS,%cl	movl %ebx,%eax	andl $255,%ecx	incl %eax	movw %ax,255(%edx,%ecx)	movb ApuS,%dl	addb $-2,%dl	movb APUExtraRAM+31,%al	movb %dl,ApuS	andl $255,%eax	movb APUExtraRAM+30,%dl	sall $8,%eax	andl $255,%edx	movl APURAM,%ecx	addl %eax,%edx	addl %ecx,%edx	popl %ebx	movl %edx,APUPC	retApuOp11:	pushl %ebx	movl APURAM,%edx	movl APUPC,%ebx	movl %edx,%eax	subl %eax,%ebx	movb ApuS,%cl	movl %ebx,%eax	andl $255,%ecx	incl %eax	movw %ax,255(%edx,%ecx)	movb APUExtraRAM+29,%al	movb APUExtraRAM+28,%dl	andl $255,%eax	movb ApuS,%bl	andl $255,%edx	sall $8,%eax	movl APURAM,%ecx	addb $-2,%bl	addl %eax,%edx	movb %bl,ApuS	addl %ecx,%edx	popl %ebx	movl %edx,APUPC	retApuOp21:	pushl %ebx	movl APURAM,%edx	movl APUPC,%ebx	movl %edx,%eax	subl %eax,%ebx	movb ApuS,%cl	movl %ebx,%eax	andl $255,%ecx	incl %eax	movw %ax,255(%edx,%ecx)	movb APUExtraRAM+27,%al	movb APUExtraRAM+26,%dl	andl $255,%eax	movb ApuS,%bl	andl $255,%edx	sall $8,%eax	movl APURAM,%ecx	addb $-2,%bl	addl %eax,%edx	movb %bl,ApuS	addl %ecx,%edx	popl %ebx	movl %edx,APUPC	retApuOp31:	pushl %ebx	movl APURAM,%edx	movl APUPC,%ebx	movl %edx,%eax	subl %eax,%ebx	movb ApuS,%cl	movl %ebx,%eax	andl $255,%ecx	incl %eax	movw %ax,255(%edx,%ecx)	movb APUExtraRAM+25,%al	movb APUExtraRAM+24,%dl	andl $255,%eax	movb ApuS,%bl	andl $255,%edx	sall $8,%eax	movl APURAM,%ecx	addb $-2,%bl	addl %eax,%edx	movb %bl,ApuS	addl %ecx,%edx	popl %ebx	movl %edx,APUPC	retApuOp41:	pushl %ebx	movl APURAM,%edx	movl APUPC,%ebx	movl %edx,%eax	subl %eax,%ebx	movb ApuS,%cl	movl %ebx,%eax	andl $255,%ecx	incl %eax	movw %ax,255(%edx,%ecx)	movb APUExtraRAM+23,%al	movb APUExtraRAM+22,%dl	andl $255,%eax	movb ApuS,%bl	andl $255,%edx	sall $8,%eax	movl APURAM,%ecx	addb $-2,%bl	addl %eax,%edx	movb %bl,ApuS	addl %ecx,%edx	popl %ebx	movl %edx,APUPC	retApuOp51:	pushl %ebx	movl APURAM,%edx	movl APUPC,%ebx	movl %edx,%eax	subl %eax,%ebx	movb ApuS,%cl	movl %ebx,%eax	andl $255,%ecx	incl %eax	movw %ax,255(%edx,%ecx)	movb APUExtraRAM+21,%al	movb APUExtraRAM+20,%dl	andl $255,%eax	movb ApuS,%bl	andl $255,%edx	sall $8,%eax	movl APURAM,%ecx	addb $-2,%bl	addl %eax,%edx	movb %bl,ApuS	addl %ecx,%edx	popl %ebx	movl %edx,APUPC	retApuOp61:	pushl %ebx	movl APURAM,%edx	movl APUPC,%ebx	movl %edx,%eax	subl %eax,%ebx	movb ApuS,%cl	movl %ebx,%eax	andl $255,%ecx	incl %eax	movw %ax,255(%edx,%ecx)	movb APUExtraRAM+19,%al	movb APUExtraRAM+18,%dl	andl $255,%eax	movb ApuS,%bl	andl $255,%edx	sall $8,%eax	movl APURAM,%ecx	addb $-2,%bl	addl %eax,%edx	movb %bl,ApuS	addl %ecx,%edx	popl %ebx	movl %edx,APUPC	retApuOp71:	pushl %ebx	movl APURAM,%edx	movl APUPC,%ebx	movl %edx,%eax	subl %eax,%ebx	movb ApuS,%cl	movl %ebx,%eax	andl $255,%ecx	incl %eax	movw %ax,255(%edx,%ecx)	movb APUExtraRAM+17,%al	movb APUExtraRAM+16,%dl	andl $255,%eax	movb ApuS,%bl	andl $255,%edx	sall $8,%eax	movl APURAM,%ecx	addb $-2,%bl	addl %eax,%edx	movb %bl,ApuS	addl %ecx,%edx	popl %ebx	movl %edx,APUPC	retApuOp81:	pushl %ebx	movl APURAM,%edx	movl APUPC,%ebx	movl %edx,%eax	subl %eax,%ebx	movb ApuS,%cl	movl %ebx,%eax	andl $255,%ecx	incl %eax	movw %ax,255(%edx,%ecx)	movb APUExtraRAM+15,%al	movb APUExtraRAM+14,%dl	andl $255,%eax	movb ApuS,%bl	andl $255,%edx	sall $8,%eax	movl APURAM,%ecx	addb $-2,%bl	addl %eax,%edx	movb %bl,ApuS	addl %ecx,%edx	popl %ebx	movl %edx,APUPC	retApuOp91:	pushl %ebx	movl APURAM,%edx	movl APUPC,%ebx	movl %edx,%eax	subl %eax,%ebx	movb ApuS,%cl	movl %ebx,%eax	andl $255,%ecx	incl %eax	movw %ax,255(%edx,%ecx)	movb APUExtraRAM+13,%al	movb APUExtraRAM+12,%dl	andl $255,%eax	movb ApuS,%bl	andl $255,%edx	sall $8,%eax	movl APURAM,%ecx	addb $-2,%bl	addl %eax,%edx	movb %bl,ApuS	addl %ecx,%edx	popl %ebx	movl %edx,APUPC	retApuOpA1:	pushl %ebx	movl APURAM,%edx	movl APUPC,%ebx	movl %edx,%eax	subl %eax,%ebx	movb ApuS,%cl	movl %ebx,%eax	andl $255,%ecx	incl %eax	movw %ax,255(%edx,%ecx)	movb APUExtraRAM+11,%al	movb APUExtraRAM+10,%dl	andl $255,%eax	movb ApuS,%bl	andl $255,%edx	sall $8,%eax	movl APURAM,%ecx	addb $-2,%bl	addl %eax,%edx	movb %bl,ApuS	addl %ecx,%edx	popl %ebx	movl %edx,APUPC	retApuOpB1:	pushl %ebx	movl APURAM,%edx	movl APUPC,%ebx	movl %edx,%eax	subl %eax,%ebx	movb ApuS,%cl	movl %ebx,%eax	andl $255,%ecx	incl %eax	movw %ax,255(%edx,%ecx)	movb APUExtraRAM+9,%al	movb APUExtraRAM+8,%dl	andl $255,%eax	movb ApuS,%bl	andl $255,%edx	sall $8,%eax	movl APURAM,%ecx	addb $-2,%bl	addl %eax,%edx	movb %bl,ApuS	addl %ecx,%edx	popl %ebx	movl %edx,APUPC	retApuOpC1:	pushl %ebx	movl APURAM,%edx	movl APUPC,%ebx	movl %edx,%eax	subl %eax,%ebx	movb ApuS,%cl	movl %ebx,%eax	andl $255,%ecx	incl %eax	movw %ax,255(%edx,%ecx)	movb APUExtraRAM+7,%al	movb APUExtraRAM+6,%dl	andl $255,%eax	movb ApuS,%bl	andl $255,%edx	sall $8,%eax	movl APURAM,%ecx	addb $-2,%bl	addl %eax,%edx	movb %bl,ApuS	addl %ecx,%edx	popl %ebx	movl %edx,APUPC	retApuOpD1:	pushl %ebx	movl APURAM,%edx	movl APUPC,%ebx	movl %edx,%eax	subl %eax,%ebx	movb ApuS,%cl	movl %ebx,%eax	andl $255,%ecx	incl %eax	movw %ax,255(%edx,%ecx)	movb APUExtraRAM+5,%al	movb APUExtraRAM+4,%dl	andl $255,%eax	movb ApuS,%bl	andl $255,%edx	sall $8,%eax	movl APURAM,%ecx	addb $-2,%bl	addl %eax,%edx	movb %bl,ApuS	addl %ecx,%edx	popl %ebx	movl %edx,APUPC	retApuOpE1:	pushl %ebx	movl APURAM,%edx	movl APUPC,%ebx	movl %edx,%eax	subl %eax,%ebx	movb ApuS,%cl	movl %ebx,%eax	andl $255,%ecx	incl %eax	movw %ax,255(%edx,%ecx)	movb APUExtraRAM+3,%al	movb APUExtraRAM+2,%dl	andl $255,%eax	movb ApuS,%bl	andl $255,%edx	sall $8,%eax	movl APURAM,%ecx	addb $-2,%bl	addl %eax,%edx	movb %bl,ApuS	addl %ecx,%edx	popl %ebx	movl %edx,APUPC	retApuOpF1:	pushl %ebx	movl APURAM,%edx	movl APUPC,%ebx	movl %edx,%eax	subl %eax,%ebx	movb ApuS,%cl	movl %ebx,%eax	andl $255,%ecx	incl %eax	movw %ax,255(%edx,%ecx)	movb APUExtraRAM+1,%al	movb APUExtraRAM+0,%dl	andl $255,%eax	movb ApuS,%bl	andl $255,%edx	sall $8,%eax	movl APURAM,%ecx	addb $-2,%bl	addl %eax,%edx	movb %bl,ApuS	addl %ecx,%edx	popl %ebx	movl %edx,APUPC	retApuOp3F:	pushl %ebx	movl APUPC,%eax	movw 1(%eax),%ax	andl $65535,%eax	movl APURAM,%edx	movl %eax,APUAddress	movl %edx,%eax	movb ApuS,%cl	movl APUPC,%ebx	addl $-3,%eax	andl $255,%ecx	subl %eax,%ebx	movw %bx,255(%edx,%ecx)	movb ApuS,%bl	movl APUAddress,%eax	movl APURAM,%edx	addb $-2,%bl	addl %edx,%eax	movb %bl,ApuS	movl %eax,APUPC	popl %ebx	retApuOp4F:	pushl %ebx	movl APUPC,%eax	movb 1(%eax),%cl	movl APURAM,%edx	movb %cl,Work8	movl %edx,%eax	movl APUPC,%ebx	movb ApuS,%cl	addl $-2,%eax	andl $255,%ecx	subl %eax,%ebx	movw %bx,255(%edx,%ecx)	movb Work8,%al	movb ApuS,%bl	andl $255,%eax	movl APURAM,%edx	addb $-2,%bl	addl $65280,%eax	movb %bl,ApuS	addl %edx,%eax	popl %ebx	movl %eax,APUPC	retApuOp02:	movl APUPC,%eax	movb 1(%eax),%cl	xorl %eax,%eax	movb %cl,%al	pushl %eax	pushl %eax	call S9xAPUGetByteZ__FUc	orb $1,%al	addl $4,%esp	andl $255,%eax	pushl %eax	call S9xAPUSetByteZ__FUcUc	movl APUPC,%eax	addl $2,%eax	addl $8,%esp	movl %eax,APUPC	retApuOp22:	movl APUPC,%eax	movb 1(%eax),%dl	xorl %eax,%eax	movb %dl,%al	pushl %eax	pushl %eax	call S9xAPUGetByteZ__FUc	orb $2,%al	addl $4,%esp	andl $255,%eax	pushl %eax	call S9xAPUSetByteZ__FUcUc	movl APUPC,%ecx	addl $2,%ecx	addl $8,%esp	movl %ecx,APUPC	retApuOp42:	movl APUPC,%eax	movb 1(%eax),%dl	xorl %eax,%eax	movb %dl,%al	pushl %eax	pushl %eax	call S9xAPUGetByteZ__FUc	orb $4,%al	addl $4,%esp	andl $255,%eax	pushl %eax	call S9xAPUSetByteZ__FUcUc	movl APUPC,%ecx	addl $2,%ecx	addl $8,%esp	movl %ecx,APUPC	retApuOp62:	movl APUPC,%eax	movb 1(%eax),%dl	xorl %eax,%eax	movb %dl,%al	pushl %eax	pushl %eax	call S9xAPUGetByteZ__FUc	orb $8,%al	addl $4,%esp	andl $255,%eax	pushl %eax	call S9xAPUSetByteZ__FUcUc	movl APUPC,%ecx	addl $2,%ecx	addl $8,%esp	movl %ecx,APUPC	retApuOp82:	movl APUPC,%eax	movb 1(%eax),%dl	xorl %eax,%eax	movb %dl,%al	pushl %eax	pushl %eax	call S9xAPUGetByteZ__FUc	orb $16,%al	addl $4,%esp	andl $255,%eax	pushl %eax	call S9xAPUSetByteZ__FUcUc	movl APUPC,%ecx	addl $2,%ecx	addl $8,%esp	movl %ecx,APUPC	retApuOpA2:	movl APUPC,%eax	movb 1(%eax),%dl	xorl %eax,%eax	movb %dl,%al	pushl %eax	pushl %eax	call S9xAPUGetByteZ__FUc	orb $32,%al	addl $4,%esp	andl $255,%eax	pushl %eax	call S9xAPUSetByteZ__FUcUc	movl APUPC,%ecx	addl $2,%ecx	addl $8,%esp	movl %ecx,APUPC	retApuOpC2:	movl APUPC,%eax	movb 1(%eax),%dl	xorl %eax,%eax	movb %dl,%al	pushl %eax	pushl %eax	call S9xAPUGetByteZ__FUc	orb $64,%al	addl $4,%esp	andl $255,%eax	pushl %eax	call S9xAPUSetByteZ__FUcUc	movl APUPC,%ecx	addl $2,%ecx	addl $8,%esp	movl %ecx,APUPC	retApuOpE2:	movl APUPC,%eax	movb 1(%eax),%dl	xorl %eax,%eax	movb %dl,%al	pushl %eax	pushl %eax	call S9xAPUGetByteZ__FUc	orb $128,%al	addl $4,%esp	andl $255,%eax	pushl %eax	call S9xAPUSetByteZ__FUcUc	movl APUPC,%ecx	addl $2,%ecx	addl $8,%esp	movl %ecx,APUPC	retApuOp12:	movl APUPC,%eax	movb 1(%eax),%dl	xorl %eax,%eax	movb %dl,%al	pushl %eax	pushl %eax	call S9xAPUGetByteZ__FUc	addl $4,%esp	andl $254,%eax	pushl %eax	call S9xAPUSetByteZ__FUcUc	movl APUPC,%ecx	addl $2,%ecx	addl $8,%esp	movl %ecx,APUPC	retApuOp32:	movl APUPC,%eax	movb 1(%eax),%dl	xorl %eax,%eax	movb %dl,%al	pushl %eax	pushl %eax	call S9xAPUGetByteZ__FUc	addl $4,%esp	andl $253,%eax	pushl %eax	call S9xAPUSetByteZ__FUcUc	movl APUPC,%ecx	addl $2,%ecx	addl $8,%esp	movl %ecx,APUPC	retApuOp52:	movl APUPC,%eax	movb 1(%eax),%dl	xorl %eax,%eax	movb %dl,%al	pushl %eax	pushl %eax	call S9xAPUGetByteZ__FUc	addl $4,%esp	andl $251,%eax	pushl %eax	call S9xAPUSetByteZ__FUcUc	movl APUPC,%ecx	addl $2,%ecx	addl $8,%esp	movl %ecx,APUPC	retApuOp72:	movl APUPC,%eax	movb 1(%eax),%dl	xorl %eax,%eax	movb %dl,%al	pushl %eax	pushl %eax	call S9xAPUGetByteZ__FUc	addl $4,%esp	andl $247,%eax	pushl %eax	call S9xAPUSetByteZ__FUcUc	movl APUPC,%ecx	addl $2,%ecx	addl $8,%esp	movl %ecx,APUPC	retApuOp92:	movl APUPC,%eax	movb 1(%eax),%dl	xorl %eax,%eax	movb %dl,%al	pushl %eax	pushl %eax	call S9xAPUGetByteZ__FUc	addl $4,%esp	andl $239,%eax	pushl %eax	call S9xAPUSetByteZ__FUcUc	movl APUPC,%ecx	addl $2,%ecx	addl $8,%esp	movl %ecx,APUPC	retApuOpB2:	movl APUPC,%eax	movb 1(%eax),%dl	xorl %eax,%eax	movb %dl,%al	pushl %eax	pushl %eax	call S9xAPUGetByteZ__FUc	addl $4,%esp	andl $223,%eax

⌨️ 快捷键说明

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