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

📄 sa1ops.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.*******************************************************************************/#define Registers SA1Registers#undef VAR_CYCLES#include "sa1struc.h"#if 0#define PCS SA1PCS#define PB SA1PB#define PP SA1PP#define PL SA1PL#define PH SA1PH#define AA SA1AA#define AL SA1AL#define AH SA1AH#define DD SA1DD#define DL SA1DL#define DH SA1DH#define SS SA1SS#define SL SA1SL#define SH SA1SH#define XX SA1XX#define XL SA1XL#define XH SA1XH#define YY SA1YY#define YL SA1YL#define YH SA1YH#endif#undef _Carry#define _Carry SA1_Carry#undef _Zero#define _Zero SA1_Zero#undef _Negative#define _Negative SA1_Negative#undef _Overflow#define _Overflow SA1_Overflow#include "sa1addr.h"#include "sa1ops.h"#include "sa1gs.S".data.zzz:.string "*** IRQ\n".text.globl S9xSA1MainLoopS9xSA1MainLoop:	LOAD_REGISTERS	testl $IRQ_PENDING_FLAG, SA1Flags	jz .nosa1irq2	testb $0xff, SA1IRQActive	jz .nosa1irq1	testb $IRQ, FLAGS	jnz .nosa1irq2	cmpb $0, WaitingForInterrupt	je .nosa1wait	incl PC	movb $0, WaitingForInterrupt.nosa1wait:	call S9xSA1Opcode_IRQ	jmp .nosa1irq2.nosa1irq1:	andl $~IRQ_PENDING_FLAG, SA1Flags	.nosa1irq2:	movl $3, %eax.instruction_loop:	testb $0xff, SA1Executing	jz .exit	pushl %eax#ifdef DEBUGGER	testb $TRACE_FLAG, SA1Flags	jz .NO_SA1_TRACE	STORE_REGISTERS	ccall S9xSA1Trace	LOAD_REGISTERS.NO_SA1_TRACE:#endif	xorl %eax, %eax	movl SA1Opcodes, %ecx#ifdef CPU_SHUTDOWN        movl PC, SA1PCAtOpcodeStart#endif	movb (PC), %al	incl PC	jmp *(%ecx,%eax,4).globl S9xSA1MainAsmLoopS9xSA1MainAsmLoop:	popl %eax	decl %eax	jnz .instruction_loop.exit:	STORE_REGISTERS	ret/* ADC */Op69M1:	Immediate8 ADC	Adc8 IMM8Op69M0:	Immediate16 ADC2	Adc16 IMM16Op65M1:	Direct8 ADC2	call S9xSA1GetByte	Adc8 DIR8Op65M0:	Direct8 ADC	call S9xSA1GetWord	Adc16 DIR16	Op75M1:	DirectIndexedX8 ADC	call S9xSA1GetByte	Adc8 DIX8Op75M0:	DirectIndexedX8 ADC2	call S9xSA1GetWord	Adc16 DIX16Op72M1:	DirectIndirect8 ADC	call S9xSA1GetByte	Adc8 DI8Op72M0:	DirectIndirect8 ADC2	call S9xSA1GetWord	Adc16 DI16Op61M1:	DirectIndexedIndirect8 ADC	call S9xSA1GetByte	Adc8 DII8Op61M0:	DirectIndexedIndirect8 ADC2	call S9xSA1GetWord	Adc16 DII16Op71M1:	DirectIndirectIndexed8 ADC	call S9xSA1GetByte	Adc8 DIIY8Op71M0:	DirectIndirectIndexed8 ADC2	call S9xSA1GetWord	Adc16 DIIY16Op67M1:	DirectIndirectLong8 ADC	call S9xSA1GetByte	Adc8 DIL8Op67M0:	DirectIndirectLong8 ADC2	call S9xSA1GetWord	Adc16 DIL16Op77M1:	DirectIndirectIndexedLong8 ADC	call S9xSA1GetByte	Adc8 DIIL8Op77M0:	DirectIndirectIndexedLong8 ADC2	call S9xSA1GetWord	Adc16 DIIL8Op6DM1:	Absolute8 ADC	call S9xSA1GetByte	Adc8 ABS8Op6DM0:	Absolute8 ADC2	call S9xSA1GetWord	Adc16 ABS16Op7DM1:	AbsoluteIndexedX8 ADC	call S9xSA1GetByte	Adc8 ABSX8Op7DM0:	AbsoluteIndexedX8 ADC2	call S9xSA1GetWord	Adc16 ABSX16Op79M1:	AbsoluteIndexedY8 ADC	call S9xSA1GetByte	Adc8 ABSY8Op79M0:	AbsoluteIndexedY8 ADC2	call S9xSA1GetWord	Adc16 ABSY16Op6FM1:	AbsoluteLong8 ADC	call S9xSA1GetByte	Adc8 ABSL8Op6FM0:	AbsoluteLong8 ADC2	call S9xSA1GetWord	Adc16 ABSL16Op7FM1:	AbsoluteLongIndexedX8 ADC	call S9xSA1GetByte	Adc8 ALX8Op7FM0:	AbsoluteLongIndexedX8 ADC2	call S9xSA1GetWord	Adc16 ALX16Op63M1:	StackRelative8 ADC	call S9xSA1GetByte	Adc8 SREL8Op63M0:	StackRelative8 ADC2	call S9xSA1GetWord	Adc16 SREL16Op73M1:	StackRelativeIndirectIndexed8 ADC	call S9xSA1GetByte	Adc8 SRII8Op73M0:	StackRelativeIndirectIndexed8 ADC2	call S9xSA1GetWord	Adc16 SRII16/* AND */Op29M1:	Immediate8 AND	And8 IMM8Op29M0:	Immediate16 AND	And16 IMM16Op25M1:	Direct8 AND	call S9xSA1GetByte	And8 DIR8Op25M0:	Direct8 AND2	call S9xSA1GetWord	And16 DIR16Op35M1:	DirectIndexedX8 AND	call S9xSA1GetByte	And8 DIX8Op35M0:	DirectIndexedX8 AND2	call S9xSA1GetWord	And16 DIX16Op32M1:	DirectIndirect8 AND	call S9xSA1GetByte	And8 DI8Op32M0:	DirectIndirect8 AND2	call S9xSA1GetWord	And16 DI16Op21M1:	DirectIndexedIndirect8 AND	call S9xSA1GetByte	And8 DII8Op21M0:	DirectIndexedIndirect8 AND2	call S9xSA1GetWord	And16 DII16Op31M1:	DirectIndirectIndexed8 AND	call S9xSA1GetByte	And8 DIIY8Op31M0:	DirectIndirectIndexed8 AND2	call S9xSA1GetWord	And16 DIIY16Op27M1:	DirectIndirectLong8 AND	call S9xSA1GetByte	And8 DIL8Op27M0:	DirectIndirectLong8 AND2	call S9xSA1GetWord	And16 DIL16Op37M1:	DirectIndirectIndexedLong8 AND	call S9xSA1GetByte	And8 DIIL8Op37M0:	DirectIndirectIndexedLong8 AND2	call S9xSA1GetWord	And16 DIIL16Op2DM1:	Absolute8 AND	call S9xSA1GetByte	And8 ABS8Op2DM0:	Absolute8 AND2	call S9xSA1GetWord	And16 ABS16Op3DM1:	AbsoluteIndexedX8 AND	call S9xSA1GetByte	And8 ABSX8Op3DM0:	AbsoluteIndexedX8 AND2	call S9xSA1GetWord	And16 ABSX16Op39M1:	AbsoluteIndexedY8 AND	call S9xSA1GetByte	And8 ABSY8Op39M0:	AbsoluteIndexedY8 AND2	call S9xSA1GetWord	And16 ABSY16Op2FM1:	AbsoluteLong8 AND	call S9xSA1GetByte	And8 ABSL8Op2FM0:	AbsoluteLong8 AND2	call S9xSA1GetWord	And16 ABSL16Op3FM1:	AbsoluteLongIndexedX8 AND	call S9xSA1GetByte	And8 ALX8Op3FM0:	AbsoluteLongIndexedX8 AND2	call S9xSA1GetWord	And16 ALX16Op23M1:	StackRelative8 AND	call S9xSA1GetByte	And8 SREL8Op23M0:	StackRelative8 AND2	call S9xSA1GetWord	And16 SREL16Op33M1:	StackRelativeIndirectIndexed8 AND	call S9xSA1GetByte	And8 SRII8Op33M0:	StackRelativeIndirectIndexed8 AND2	call S9xSA1GetWord	And16 SRII16/* ASL */Op0AM1:	movb AL, %al	salb %al	movb %al, AL	SetZNC	jmp S9xSA1MainAsmLoopOp0AM0:	movw AA, %ax	salw %ax	movw %ax, AA	setnz SA1_Zero	setc SA1_Carry	movb %ah, SA1_Negative	jmp S9xSA1MainAsmLoop	Op06M1:	Direct8 ASL	Asl8 DIR8Op06M0:	Direct8 ASL2	Asl16 DIR16Op16M1:	DirectIndexedX8 ASL	Asl8 DIXOp16M0:	DirectIndexedX8 ASL2	Asl16 DIXOp0EM1:	Absolute8 ASL	Asl8 ABSOp0EM0:	Absolute8 ASL2	Asl16 ABSOp1EM1:	AbsoluteIndexedX8 ASL	Asl8 ABSXOp1EM0:	AbsoluteIndexedX8 ASL2	Asl16 ABSX/* BIT */Op89M1:	Immediate8 BIT	andb AL, %al	movb %al, SA1_Zero	jmp S9xSA1MainAsmLoopOp89M0:	Immediate16 BIT	andw AA, %ax	setnz SA1_Zero	jmp S9xSA1MainAsmLoopOp24M1:	Direct8 BIT	Bit8 DIROp24M0:	Direct8 BIT	Bit16 DIROp34M1:	DirectIndexedX8 BIT	Bit8 DIXOp34M0:	DirectIndexedX8 BIT2	Bit16 DIXOp2CM1:	Absolute8 BIT	Bit8 ABSOp2CM0:	Absolute8 BIT2	Bit16 ABSOp3CM1:	AbsoluteIndexedX8 BIT	Bit8 ABSXOp3CM0:	AbsoluteIndexedX8 BIT2	Bit16 ABSX/* CMP */OpC9M1:	Immediate8 CMP	Cmp8 IMMOpC9M0:	Immediate16 CMP	Cmp16 IMMOpC5M1:	Direct8 CMP	call S9xSA1GetByte	Cmp8 DIROpC5M0:	Direct8 CMP2	call S9xSA1GetWord	Cmp16 DIROpD5M1:	DirectIndexedX8 CMP	call S9xSA1GetByte	Cmp8 DIXOpD5M0:	DirectIndexedX8 CMP2	call S9xSA1GetWord	Cmp16 DIXOpD2M1:	DirectIndirect8 CMP	call S9xSA1GetByte	Cmp8 DIOpD2M0:	DirectIndirect8 CMP2	call S9xSA1GetWord	Cmp16 DIOpC1M1:	DirectIndexedIndirect8 CMP	call S9xSA1GetByte	Cmp8 DIIOpC1M0:	DirectIndexedIndirect8 CMP2	call S9xSA1GetWord	Cmp16 DIIOpD1M1:	DirectIndirectIndexed8 CMP	call S9xSA1GetByte	Cmp8 DIIYOpD1M0:	DirectIndirectIndexed8 CMP2	call S9xSA1GetWord	Cmp16 DIIYOpC7M1:	DirectIndirectLong8 CMP	call S9xSA1GetByte	Cmp8 DILOpC7M0:	DirectIndirectLong8 CMP2	call S9xSA1GetWord	Cmp16 DILOpD7M1:	DirectIndirectIndexedLong8 CMP	call S9xSA1GetByte	Cmp8 DIILOpD7M0:	DirectIndirectIndexedLong8 CMP2	call S9xSA1GetWord	Cmp16 DIILOpCDM1:	Absolute8 CMP	call S9xSA1GetByte	Cmp8 ABSOpCDM0:	Absolute8 CMP2	call S9xSA1GetWord	Cmp16 ABSOpDDM1:	AbsoluteIndexedX8 CMP	call S9xSA1GetByte	Cmp8 ABSXOpDDM0:	AbsoluteIndexedX8 CMP2	call S9xSA1GetWord	Cmp16 ABSXOpD9M1:	AbsoluteIndexedY8 CMP	call S9xSA1GetByte	Cmp8 ABSYOpD9M0:	AbsoluteIndexedY8 CMP2	call S9xSA1GetWord	Cmp16 ABSYOpCFM1:	AbsoluteLong8 CMP	call S9xSA1GetByte	Cmp8 ABSLOpCFM0:	AbsoluteLong8 CMP2	call S9xSA1GetWord	Cmp16 ABSLOpDFM1:	AbsoluteLongIndexedX8 CMP	call S9xSA1GetByte	Cmp8 ALXOpDFM0:	AbsoluteLongIndexedX8 CMP2	call S9xSA1GetWord	Cmp16 ALXOpC3M1:	StackRelative8 CMP	call S9xSA1GetByte	Cmp8 SRELOpC3M0:	StackRelative8 CMP2	call S9xSA1GetWord	Cmp16 SRELOpD3M1:	StackRelativeIndirectIndexed8 CMP	call S9xSA1GetByte	Cmp8 SRIIOpD3M0:	StackRelativeIndirectIndexed8 CMP2	call S9xSA1GetWord	Cmp16 SRII/* CPX */OpE0X1:	Immediate8 CPX	Cpx8 IMMOpE0X0:	Immediate16 CPX	Cpx16 IMMOpE4X1:	Direct8 CPX	call S9xSA1GetByte	Cpx8 DIROpE4X0:	Direct8 CPX2	call S9xSA1GetWord	Cpx16 DIROpECX1:	Absolute8 CPX	call S9xSA1GetByte	Cpx8 ABSOpECX0:	Absolute8 CPX2	call S9xSA1GetWord	Cpx16 ABS/* CPY */OpC0X1:	Immediate8 CPY	Cpy8 IMMOpC0X0:	Immediate16 CPY	Cpy16 IMMOpC4X1:	Direct8 CPY	call S9xSA1GetByte	Cpy8 DIROpC4X0:	Direct8 CPY2	call S9xSA1GetWord	Cpy16 DIROpCCX1:	Absolute8 CPY	call S9xSA1GetByte	Cpy8 ABSOpCCX0:	Absolute8 CPY2	call S9xSA1GetWord	Cpy16 ABS/* DEC */Op3AM1:	movb AL, %al	decb %al	movb %al, AL	SetZN	jmp S9xSA1MainAsmLoopOp3AM0:	decw AA	setnz SA1_Zero	movb AH, %al	movb %al, SA1_Negative	jmp S9xSA1MainAsmLoopOpC6M1:	Direct8 DEC	Dec8 DIROpC6M0:	Direct8 DEC2	Dec16 DIROpD6M1:	DirectIndexedX8 DEC	Dec8 DIXOpD6M0:	DirectIndexedX8 DEC2	Dec16 DIXOpCEM1:	Absolute8 DEC	Dec8 ABSOpCEM0:	Absolute8 DEC2	Dec16 ABSOpDEM1:	AbsoluteIndexedX8 DEC	Dec8 ABSXOpDEM0:	AbsoluteIndexedX8 DEC2	Dec16 ABSX/* EOR */Op49M1:	Immediate8 EOR	Eor8 IMMOp49M0:	Immediate16 EOR	Eor16 IMMOp45M1:	Direct8 EOR	call S9xSA1GetByte	Eor8 DIROp45M0:	Direct8 EOR2	call S9xSA1GetWord	Eor16 DIROp55M1:	DirectIndexedX8 EOR	call S9xSA1GetByte	Eor8 DIXOp55M0:	DirectIndexedX8 EOR2	call S9xSA1GetWord	Eor16 DIXOp52M1:	DirectIndirect8 EOR	call S9xSA1GetByte	Eor8 DIOp52M0:	DirectIndirect8 EOR2	call S9xSA1GetWord	Eor16 DIOp41M1:	DirectIndexedIndirect8 EOR	call S9xSA1GetByte	Eor8 DIIOp41M0:	DirectIndexedIndirect8 EOR2	call S9xSA1GetWord	Eor16 DIIOp51M1:	DirectIndirectIndexed8 EOR	call S9xSA1GetByte	Eor8 DIIYOp51M0:	DirectIndirectIndexed8 EOR2	call S9xSA1GetWord	Eor16 DIIYOp47M1:	DirectIndirectLong8 EOR	call S9xSA1GetByte	Eor8 DILOp47M0:	DirectIndirectLong8 EOR2	call S9xSA1GetWord	Eor16 DILOp57M1:	DirectIndirectIndexedLong8 EOR	call S9xSA1GetByte	Eor8 DIILOp57M0:	DirectIndirectIndexedLong8 EOR2	call S9xSA1GetWord	Eor16 DIILOp4DM1:	Absolute8 EOR	call S9xSA1GetByte	Eor8 ABSOp4DM0:	Absolute8 EOR2	call S9xSA1GetWord	Eor16 ABSOp5DM1:

⌨️ 快捷键说明

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