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

📄 sa1addr.h

📁 著名SFC模拟器Snes9x的源代码。
💻 H
字号:
/* * 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. */.macro GetCarry	movb SA1_Carry, %dl	shrb %dl.endm.macro GetNotCarry	cmpb $1, SA1_Carry.endm.macro SetZN	movb %al, SA1_Zero	movb %al, SA1_Negative.endm.macro Set16ZN	movb %ah, SA1_Negative	setnz SA1_Zero.endm.macro SetZNC	setc SA1_Carry	movb %al, SA1_Negative	movb %al, SA1_Zero.endm.macro Set16ZNC	setc SA1_Carry	setnz SA1_Zero	movb %ah, SA1_Negative.endm.macro SetZNCV	setc SA1_Carry	seto SA1_Overflow	movb %al, SA1_Negative	movb %al, SA1_Zero.endm.macro Set16ZNCV	setc SA1_Carry	seto SA1_Overflow	setnz SA1_Zero	movb %ah, SA1_Negative.endm.macro SetZNV	seto SA1_Overflow	movb %al, SA1_Negative	movb %al, SA1_Zero.endm.macro Set16ZNV	seto SA1_Overflow	setnz SA1_Zero	movb %ah, SA1_Negative.endm/************* IMMEDIATE8 ****************/.Macro Immediate8 K	movb (PC), %al	incl PC.endm/************* IMMEDIATE16 ****************/.macro Immediate16 K	movw (PC), %ax	addl $2, PC.endm/************* Relative ****************/.macro Relative K	movl PC, %edx	movsbl (%edx), %eax	incl %edx	movl %edx, PC	subl SA1PCBase, %edx	addl %eax, %edx	andl $0xffff, %edx.endm/************* RelativeLong ****************/.macro RelativeLong K	xorl %eax, %eax	movl PC, %edx	movw (%edx), %ax	addl $2, %edx	movl %edx, PC	subl SA1PCBase, %edx	addl %eax, %edx	andl $0xffff, %edx.endm/************* AbsoluteIndexedIndirect8 ****************/.macro AbsoluteIndexedIndirect8 K	xorl %edx, %edx	movw XX, %dx	addw (PC), %dx	addl $2, PC	orl  SA1ShiftedPB, %edx	call S9xSA1GetWord	movl %eax, %edx	andl $0xffff, %edx.endm/************* AbsoluteIndirectLong8 ****************/.macro AbsoluteIndirectLong8 K	movw (PC), %dx	addl $2, PC	andl $0xffff, %edx	pushl %edx	call S9xSA1GetWord	popl %edx	pushl %eax	addl $2, %edx	call S9xSA1GetByte	popl %edx	andl $0xff, %eax	andl $0xffff, %edx	sall $16, %eax	orl  %eax, %edx.endm.macro AbsoluteIndirect8 K	movw (PC), %dx	addl $2, PC	andl $0xffff, %edx	call S9xSA1GetWord	movl %eax, %edx	andl $0xffff, %edx.endm.macro Absolute8 K	movw (PC), %dx	addl $2, PC	andl $0xffff, %edx	orl  SA1ShiftedDB, %edx.endm.macro AbsoluteLong8 K	movl (PC), %edx	add $3, PC	andl $0xffffff, %edx.endm.macro Direct8 K	xorl %edx, %edx	movb (PC), %dl	addw DD, %dx	incl PC.endm.macro DirectIndirectIndexed8 K	xorl %edx, %edx	movb (PC), %dl	incl PC	addw DD, %dx	call S9xSA1GetWord	movl SA1ShiftedDB, %edx	movw %ax, %dx	xorl %eax, %eax	movw YY, %ax	addl %eax, %edx.endm.macro DirectIndirectIndexedLong8 K	xorl %edx, %edx	movb (PC), %dl	addw DD, %dx	incl PC	pushl %edx	call S9xSA1GetWord	popl %edx	pushw %ax	addw $2, %dx	call S9xSA1GetByte	andl $0xff, %eax	sall $16, %eax	xorl %edx, %edx	popw %ax	movw YY, %dx	addl %eax, %edx	andl $0xffffff, %edx.endm.macro DirectIndexedIndirect8 K	xorl %edx, %edx	movb (PC), %dl	addw DD, %dx	incl PC	addw XX, %dx	call S9xSA1GetWord	movl SA1ShiftedDB, %edx	movw %ax, %dx.endm.macro DirectIndexedX8 K	xorl %edx, %edx	movb (PC), %dl	addw DD, %dx	incl PC	addw XX, %dx.endm.macro DirectIndexedY8 K	xorl %edx, %edx	movb (PC), %dl	addw DD, %dx	incl PC	addw YY, %dx.endm.macro AbsoluteIndexedX8 K	movl SA1ShiftedDB, %edx	movw (PC), %dx	xorl %eax, %eax	addl $2, PC	movw XX, %ax	addl %eax, %edx	andl $0xffffff, %edx.endm.macro AbsoluteIndexedY8 K	movl SA1ShiftedDB, %edx	movw (PC), %dx	xorl %eax, %eax	addl $2, PC	movw YY, %ax	addl %eax, %edx	andl $0xffffff, %edx.endm.macro AbsoluteLongIndexedX8 K	movl (PC), %edx	xorl %eax, %eax	addl $3, PC	movw XX, %ax	addl %eax, %edx	andl $0xffffff, %edx.endm.macro DirectIndirect8 K	xorl %edx, %edx	movb (PC), %dl	addw DD, %dx	incl PC	call S9xSA1GetWord	movl SA1ShiftedDB, %edx	movw %ax, %dx.endm.macro DirectIndirectLong8 K	xorl %edx, %edx	movb (PC), %dl	addw DD, %dx	incl PC	pushl %edx	call S9xSA1GetWord	popl %edx	pushw %ax	addw $2, %dx	call S9xSA1GetByte	andl $0xff, %eax	sall $16, %eax	popw %ax	movl %eax, %edx.endm.macro StackRelative8 K	xorl %edx, %edx	movb (PC), %dl	addw SS, %dx	incl PC.endm.macro StackRelativeIndirectIndexed8 K	xorl %edx, %edx	movb (PC), %dl	addw SS, %dx	incl PC	call S9xSA1GetWord	movl SA1ShiftedDB, %edx	movw %ax, %dx	xorl %eax, %eax	movw YY, %ax	addl %eax, %edx	andl $0xffffff, %edx.endm.macro PushByte K	movl SS, %edx	andl $0xffff, %edx	call S9xSA1SetByte	decw SS.endm.macro PushWord K	movl SS, %edx	decl %edx	andl $0xffff, %edx	call S9xSA1SetWord	movl SS, %edx	subl $2, %edx	movw %dx, SS.endm.macro PullByte K	movl SS, %edx	incl %edx	movw %dx, SS	andl $0xffff, %edx	call S9xSA1GetByte.endm.macro PullWord K	movl SS, %edx	addw $2, %dx	movw %dx, SS	decl %edx	andl $0xffff, %edx	call S9xSA1GetWord.endm

⌨️ 快捷键说明

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