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

📄 sa1gs.s

📁 著名SFC模拟器Snes9x的源代码。
💻 S
字号:
/* * Snes9x - Portable Super Nintendo Entertainment System (TM) emulator. * * (c) Copyright 1996 - 2001 Gary Henderson (gary@daniver.demon.co.uk) and *                           Jerremy Koot (jkoot@snes9x.com) * * Super FX C emulator code  * (c) Copyright 1997 - 1999 Ivar (Ivar@snes9x.com) and *                           Gary Henderson. * Super FX assembler emulator code (c) Copyright 1998 zsKnight and _Demo_. * * DSP1 emulator code (c) Copyright 1998 Ivar, _Demo_ and Gary Henderson. * C4 asm and some C emulation code (c) Copyright 2000 zsKnight and _Demo_. * C4 C code (c) Copyright 2001 Gary Henderson (gary@daniver.demon.co.uk). * * DOS port code contains the works of other authors. See headers in * individual files. * * Snes9x homepage: 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. */.data.BankSave:	.long 0.textS9xSA1GetByte:	movl %edx, %eax	shrl $MEMMAP_SHIFT, %eax	and $MEMMAP_MASK, %eax	movl SA1Map(, %eax, 4), %eax	cmpl $10, %eax	jbe .GBSpecial	andl $0xffff, %edx	movb (%eax, %edx), %al	ret	.align 4.GBSpecial:	jmp *.GBJmpTable(, %eax, 4).data	.align 4.GBJmpTable:	.long .GBPPU	.long .GBCPU	.long .GBDSP	.long .GBLSRAM	.long .GBHSRAM	.long .GBNONE	.long .GBDEBUG	.long .GBNONE	.long .GBBWRAM	.long .GBBWBITMAP	.long .GBBWBITMAP2.text.GBPPU: /* MAP_PPU */	andl $0xffff, %edx	pushl %edx	ccall S9xGetSA1	popl %edx	ret.GBCPU: /* MAP_CPU */.GBDSP: /* MAP_DSP */	mov $0, %al	ret.GBLSRAM: /* MAP_LOROM_SRAM */	andl $0xffff, %edx	movl SRAM, %ecx	andw SRAMMask, %dx	movb (%ecx, %edx), %al	ret.GBHSRAM: /* MAP_HIROM_SRAM */	movl %edx, %ecx	andl $0xf0000, %ecx	andl $0x7fff, %edx	sarl $3, %ecx	addl $-24576, %edx	addl %ecx, %edx	movl SRAM, %eax	andw SRAMMask, %dx	movb (%eax, %edx), %al	ret.GBNONE:.GBDEBUG: /* MAP_DEBUG */	xorl %eax, %eax	ret.GBBWRAM: /* MAP_BWRAM */	andl $0x7fff, %edx	addl $-24576, %edx	movl SA1BWRAM, %eax	movb (%eax, %edx), %al	ret.GBBWBITMAP:	movl FillRAM, %eax	subl $0x600000, %edx	testb $0x80, 0x223f(%eax)	movl %edx, %eax	jz .GB4	// Depth 2	movb %dl, %cl	shrl $2, %eax	andb $3, %cl	andl $0xffff, %eax	addl SRAM, %eax	shlb $1, %cl	movb (%eax), %al	shrb %cl, %al	andb $3, %al	ret	.GB4:	movb %dl, %cl	shrl $1, %eax	andb $1, %cl	andl $0xffff, %eax	addl SRAM, %eax	shlb $2, %cl	movb (%eax), %al	shrb %cl, %al	andb $15, %al	ret	.GBBWBITMAP2:	andl $0xffff, %edx	movl FillRAM, %eax	subl $0x6000, %edx	testb $0x80, 0x223f(%eax)	movl %edx, %eax	jz .GB42	// Depth 2	movb %dl, %cl	shrl $2, %eax	andb $3, %cl	andl $0xffff, %eax	addl SA1BWRAM, %eax	shlb $1, %cl	movb (%eax), %al	shrb %cl, %al	andb $3, %al	ret	.GB42:	movb %dl, %cl	shrl $1, %eax	andb $1, %cl	andl $0xffff, %eax	addl SA1BWRAM, %eax	shlb $2, %cl	movb (%eax), %al	shrb %cl, %al	andb $15, %al	ret	S9xSA1GetWord:	pushl %edx	call S9xSA1GetByte	popl %edx	incl %edx	pushl %eax	call S9xSA1GetByte	movb %al, %dl	popl %eax	movb %dl, %ah	retS9xSA1SetByte:	pushl %eax	movl %edx, %eax	shrl $MEMMAP_SHIFT, %eax	and $MEMMAP_MASK, %eax	movl SA1WriteMap(, %eax, 4), %eax	cmpl $10, %eax	jbe .SBSpecial	andl $0xffff, %edx	popl %ecx	movb %cl, (%eax, %edx)	ret.SBSpecial:	jmp *.SBJmpTable(, %eax, 4).data	.align 4.SBJmpTable:	.long .SBPPU	.long .SBCPU	.long .SBDSP	.long .SBLSRAM	.long .SBHSRAM	.long .SBNONE	.long .SBDEBUG	.long .SBNONE	.long .SBBWRAM	.long .SBBWBITMAP	.long .SBBWBITMAP2.text.SBPPU: /* MAP_PPU */	andl $0xffff, %edx	popl %eax	pushl %edx	pushl %eax	ccall S9xSetSA1	addl $8, %esp	ret.SBCPU: /* MAP_CPU */	popl %eax	ret.SBDSP: /* MAP_DSP */	popl %eax	ret.SBLSRAM: /* MAP_LOROM_SRAM */	popl %eax	movw SRAMMask, %cx	orw %cx, %cx	jz .SBLSRAM_SKIP	andl $0xffff, %edx	andw %cx, %dx	movl SRAM, %ecx	movb %al, (%ecx, %edx).SBLSRAM_SKIP:	ret.SBHSRAM: /* MAP_HIROM_SRAM */	popl %eax	movl %edx, %ecx	andl $0xf0000, %ecx	andl $0x7fff, %edx	sarl $3, %ecx	addl $-24576, %edx	addl %ecx, %edx	movw SRAMMask, %cx	orw %cx, %cx	jz .SBHSRAM_SKIP	andw %cx, %dx	movl SRAM, %ecx	movb %al, (%ecx, %edx).SBHSRAM_SKIP:	ret.SBNONE:.SBDEBUG: /* MAP_DEBUG */	popl %eax	ret.SBBWRAM: /* MAP_BWRAM */	andl $0x7fff, %edx	popl %eax	addl $-24576, %edx	movl SA1BWRAM, %ecx	movb %al, (%ecx, %edx)	ret.SBBWBITMAP:	movl FillRAM, %eax	subl $0x600000, %edx	movb 0x223f(%eax), %al	testb $0x80, %al	movl %edx, %eax	jz .SB4	// Depth 2	shrl $2, %eax	movb %dl, %cl	andl $0xffff, %eax	addl SRAM, %eax	andb $3, %cl	popl %edx	shlb $1, %cl	movb %dl, %dh	movb $3, %dl	shlb %cl, %dl	notb %dl	andb $3, %dh	andb (%eax), %dl	shlb %cl, %dh	orb %dh, %dl	movb %dl, (%eax)	ret	.SB4:	shrl $1, %eax	movb %dl, %cl	andl $0xffff, %eax	addl SRAM, %eax	andb $1, %cl	popl %edx	shlb $2, %cl	movb %dl, %dh	movb $15, %dl	shlb %cl, %dl	notb %dl	andb $15, %dh	andb (%eax), %dl	shlb %cl, %dh	orb %dh, %dl	movb %dl, (%eax)	ret	.SBBWBITMAP2:	andl $0xffff, %edx	subl $0x6000, %edx	movl FillRAM, %eax	testb $0x80, 0x223f(%eax)	jz .SB42	// Depth 2	movl %edx, %eax	shrl $2, %eax	andl $0xffff, %eax	addl SA1BWRAM, %eax	movb %dl, %cl	popl %edx	andb $3, %cl	movb %dl, %dh	shlb $1, %cl	movb $3, %dl	andb $3, %dh	shlb %cl, %dl	shlb %cl, %dh	notb %dl	andb (%eax), %dl	orb %dh, %dl	movb %dl, (%eax)	ret	.SB42:	movl %edx, %eax	shrl $1, %eax	andl $0xffff, %eax	addl SA1BWRAM, %eax	movb %dl, %cl	andb $1, %cl	shlb $2, %cl	popl %edx	movb %dl, %dh	movb $15, %dl	shlb %cl, %dl	notb %dl	andb (%eax), %dl	andb $15, %dh	shlb %cl, %dh	orb %dh, %dl	movb %dl, (%eax)	ret	S9xSA1SetWord:	pushl %eax	pushl %edx	call S9xSA1SetByte	popl %edx	popl %eax	incl %edx	movb %ah, %al	jmp S9xSA1SetByteS9xSA1SetPCBase:	movl %edx, %eax	shrl $MEMMAP_SHIFT, %eax	and $MEMMAP_MASK, %eax	movl SA1Map(, %eax, 4), %eax	cmpl $10, %eax	jbe .SPCSpecial	andl $0xffff, %edx	movl %eax, SA1PCBase	addl %edx, %eax	movl %eax, PC	ret	.align 4.SPCSpecial:	jmp *.SPCJmpTable(, %eax, 4).data	.align 4.SPCJmpTable:	.long .SPCPPU	.long .SPCCPU	.long .SPCDSP	.long .SPCLSRAM	.long .SPCHSRAM	.long .SPCNONE	.long .SPCDEBUG	.long .SPCNONE	.long .SPCBWRAM	.long .SPCNONE	.long .SPCNONE.text.SPCPPU: /* MAP_PPU */	movl FillRAM, %ecx	andl $0xffff, %edx	movl %ecx, SA1PCBase	addl %edx, %ecx	movl %ecx, PC	ret.SPCCPU: /* MAP_CPU */	movl FillRAM, %ecx	andl $0xffff, %edx	movl %ecx, SA1PCBase	addl %edx, %ecx	movl %ecx, PC	ret.SPCDSP: /* MAP_DSP */	movl FillRAM, %ecx	andl $0xffff, %edx	movl %ecx, SA1PCBase	addl %edx, %ecx	movl %ecx, PC	ret.SPCLSRAM: /* MAP_LOROM_SRAM */	movl SRAM, %ecx	andl $0xffff, %edx	movl %ecx, SA1PCBase	addl %edx, %ecx	movl %ecx, PC	ret.SPCHSRAM: /* MAP_HIROM_SRAM */	movl SRAM, %eax	andl $0xffff, %edx	addl $-24576, %eax	movl %eax, SA1PCBase	addl %eax, %edx	movl %edx, PC	ret.SPCNONE:.SPCDEBUG: /* MAP_DEBUG */	movl SRAM, %eax	movl %eax, SA1PCBase	movl %eax, PC	ret.SPCBWRAM: /* MAP_BWRAM */	movl SA1BWRAM, %eax	andl $0xffff, %edx	addl $-24576, %eax	movl %eax, SA1PCBase	addl %eax, %edx	movl %edx, PC	ret

⌨️ 快捷键说明

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