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

📄 fxemu2c.mac

📁 著名SFC模拟器Snes9x的源代码。
💻 MAC
字号:
; Snes9x - Portable Super Nintendo Entertainment System (TM) emulator.;; Super FX assembler emulator code; (c) Copyright 1998, 1999 zsKnight and _Demo_.;; 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 FXReturn 0   dec dword [NumberOfOpcodes];   js %%endloop;   jmp [FxTabled+ecx*4];%%endloop;   jmp FXEndLoop;   jmp [FxTabled+ecx*4];   ALIGN32   jmp [FxTabled+ecx*4]   ALIGN32%endmacro%macro FXReturn2 0   dec dword [NumberOfOpcodes]   js %%endloop   jmp [FxTabled+ecx*4]%%endloop   jmp FXEndLoop;   jmp [FxTabled+ecx*4]   ALIGN32%endmacro%macro TORNd 1   ; V   FETCHPIPE   mov edi, SfxR0+%1*4   inc ebp                ; Increase program counter   call [FxTable+ecx*4]   mov edi,SfxR0   FXReturn%endmacro%macro WITHc 1  ; Verified.   FETCHPIPE   mov esi,SfxR0+%1*4   mov edi,SfxR0+%1*4   mov dword [SfxB],1   inc ebp                ; Increase program counter   call [FxTablec+ecx*4]   mov esi,SfxR0   mov edi,SfxR0   mov dword [SfxB],0         ; Clear B Flag   FXReturn%endmacro%macro STWRNc 1  ; V   mov eax,[SfxR0+%1*4]             ; Read register   mov ebx,[SfxRAMMem]   mov dword [SfxLastRamAdr],eax    ; Save last ram address   add dword [SfxLastRamAdr],ebx    ; Save last ram address   mov edx,[esi]            ; Read Source   FETCHPIPE   mov [ebx+eax],dl         ; Store Word   xor eax,1   inc ebp                ; Increase program counter   mov [ebx+eax],dh         ; Store Word   CLRFLAGS   FXReturn%endmacro%macro STBRNc 1  ; V   mov eax,[SfxR0+%1*4]             ; Read register   FETCHPIPE   add eax,[SfxRAMMem]   mov dword [SfxLastRamAdr],eax    ; Save last ram address   mov ebx,[esi]            ; Read Source   mov byte [eax],bl         ; Store Byte   CLRFLAGS   inc ebp                ; Increase program counter   FXReturn%endmacro%macro LDWRNc 1  ; V   mov eax,[SfxR0+%1*4]             ; Read register   mov ebx,[SfxRAMMem]   mov dword [SfxLastRamAdr],eax    ; Save last ram address   FETCHPIPE   mov dl,[ebx+eax]         ; Store Word   add dword [SfxLastRamAdr],ebx    ; Save last ram address   xor eax,1   and edx,0FFFFh   inc ebp                ; Increase program counter   mov dh,[ebx+eax]         ; Store Word   mov [edi],edx            ; Read Source   CLRFLAGS   FXReturn%endmacro%macro LDBRNc 1  ; V   mov eax,[SfxR0+%1*4]             ; Read register   FETCHPIPE   add eax,[SfxRAMMem]   xor ebx,ebx   mov dword [SfxLastRamAdr],eax    ; Save last ram address   mov bl,[eax]                     ; Read Byte   inc ebp                ; Increase program counter   mov [edi],ebx            ; Store Result   CLRFLAGS   FXReturn%endmacro%macro ADDRNc 1  ; V   mov eax, [esi]    ; Read Source   mov ebx, [SfxR0+%1*4]   FETCHPIPE   add ax,bx   seto byte[SfxOverflow]   setc byte[SfxCarry]   mov [SfxSignZero],eax   inc ebp                ; Increase program counter   mov [edi],eax      ; Write Destination   CLRFLAGS   FXReturn%endmacro%macro ADCRNc 1  ; V   FETCHPIPE   mov eax, [esi]    ; Read Source   mov ebx, [SfxR0+%1*4]   shr byte[SfxCarry],1   adc ax,bx   seto byte[SfxOverflow]   setc byte[SfxCarry]   mov [SfxSignZero],eax   inc ebp                ; Increase program counter   mov [edi],eax      ; Write Destination   CLRFLAGS   FXReturn%endmacro%macro ADIRNc 1  ; V   mov eax, [esi]    ; Read Source   FETCHPIPE   add ax,%1   seto byte[SfxOverflow]   setc byte[SfxCarry]   mov [SfxSignZero],eax   inc ebp                ; Increase program counter   mov [edi],eax      ; Write Destination   CLRFLAGS   FXReturn%endmacro%macro ADCIRNc 1 ; V   FETCHPIPE   mov eax, [esi]    ; Read Source   shr byte[SfxCarry],1   adc ax,%1   seto byte[SfxOverflow]   setc byte[SfxCarry]   mov [SfxSignZero],eax   inc ebp                ; Increase program counter   mov [edi],eax      ; Write Destination   CLRFLAGS   FXReturn%endmacro%macro SUBRNc 1  ; V   mov eax,[esi]    ; Read Source   mov ebx,[SfxR0+%1*4]   FETCHPIPE   sub ax,bx   seto byte[SfxOverflow]   setc byte[SfxCarry]   xor byte[SfxCarry],1   inc ebp                   ; Increase program counter   mov [edi],eax                        ; Write Destination   mov [SfxSignZero],eax   CLRFLAGS   FXReturn%endmacro%macro SBCRNc 1  ; V   FETCHPIPE   mov eax,[esi]    ; Read Source   mov ebx,[SfxR0+%1*4]   cmp byte[SfxCarry],1   sbb ax,bx   seto byte[SfxOverflow]   setc byte[SfxCarry]   xor byte[SfxCarry],1   inc ebp                ; Increase program counter   mov [edi],eax      ; Write Destination   mov [SfxSignZero],eax   CLRFLAGS   FXReturn%endmacro%macro SUBIRNc 1 ; V   mov eax,[esi]    ; Read Source   FETCHPIPE   sub ax,%1   seto byte[SfxOverflow]   setc byte[SfxCarry]   xor byte[SfxCarry],1   inc ebp                ; Increase program counter   mov [edi],eax      ; Write Destination   mov [SfxSignZero],eax   CLRFLAGS   FXReturn%endmacro%macro CMPRNc 1  ; V   mov eax,[esi]    ; Read Source   mov ebx,[SfxR0+%1*4]   FETCHPIPE   sub ax,bx   seto byte[SfxOverflow]   setc byte[SfxCarry]   xor byte[SfxCarry],1   mov [SfxSignZero],eax   CLRFLAGS   inc ebp                ; Increase program counter   FXReturn%endmacro%macro ANDRNc 1  ; V   mov eax,[esi]            ; Read Source   mov ebx,[SfxR0+%1*4]             ; Read RN   FETCHPIPE   and eax,ebx   inc ebp   mov dword [SfxSignZero],eax   mov [edi],eax            ; Write Destination   CLRFLAGS   FXReturn%endmacro%macro BICRNc 1  ; V   mov ebx,[SfxR0+%1*4]             ; Read RN   mov eax,[esi]            ; Read Source   xor ebx,0FFFFh   FETCHPIPE   and eax,ebx   inc ebp   mov dword [SfxSignZero],eax   mov [edi],eax            ; Write Destination   CLRFLAGS   FXReturn%endmacro%macro ANDIRNc 1 ; V   mov eax,[esi]            ; Read Source   FETCHPIPE   and eax,%1   inc ebp   mov dword [SfxSignZero],eax   mov [edi],eax            ; Write Destination   CLRFLAGS   FXReturn%endmacro%macro BICIRNc 1 ; V   mov eax,[esi]            ; Read Source   FETCHPIPE   and eax,%1   inc ebp   mov dword [SfxSignZero],eax   mov [edi],eax            ; Write Destination   CLRFLAGS   FXReturn%endmacro%macro MULTRNc 1 ; V   mov al,byte [esi]     ; Read Source   mov bl,byte [SfxR0+%1*4]      ; Read RN   FETCHPIPE   imul bl   inc ebp   and eax,0FFFFh   mov [SfxSignZero],eax   mov [edi],eax            ; Write Destination   CLRFLAGS   FXReturn%endmacro%macro UMULTRNc 1        ; V   mov al,byte [esi]     ; Read Source   mov bl,byte [SfxR0+%1*4]      ; Read RN   FETCHPIPE   mul bl   inc ebp   and eax,0FFFFh   mov [SfxSignZero],eax   mov [edi],eax            ; Write Destination   CLRFLAGS   FXReturn%endmacro%macro MULTIRNc 1        ; V   mov al,byte [esi]     ; Read Source   mov bl,%1                  ; Read RN   FETCHPIPE   imul bl   inc ebp   and eax,0FFFFh   mov [SfxSignZero],eax   mov [edi],eax            ; Write Destination   CLRFLAGS   FXReturn%endmacro%macro UMULTIRNc 1       ; V   mov al,byte [esi]     ; Read Source   mov bl,%1                  ; Read RN   FETCHPIPE   mul bl   inc ebp   and eax,0FFFFh   mov [SfxSignZero],eax   mov [edi],eax            ; Write Destination   CLRFLAGS   FXReturn%endmacro%macro LINKc 1   ; Verified.   mov eax,ebp   sub eax,[SfxCPB]   add eax,%1   FETCHPIPE   mov word [SfxR11],ax   CLRFLAGS   inc ebp   FXReturn%endmacro%macro JMPRNc 1  ; V   FETCHPIPE   mov eax,[SfxR0+%1*4]             ; Read RN   mov ebp,[SfxCPB]   add ebp,eax   CLRFLAGS   FXReturn%endmacro%macro LJMPRNc 1 ; V   FETCHPIPE   mov eax,[SfxR0+%1*4]   and eax,07Fh   mov byte[SfxPBR],al;   mov byte[fxtrace+eax],1   mov eax,[SfxMemTable+eax*4]   mov [SfxCPB],eax   mov ebp,eax   add ebp,[esi]             ; Read RN   mov dword [SfxCacheActive],0   push ecx   call FxOp02   pop ecx   dec ebp   FXReturn%endmacro%macro IBTRNc 1  ; V   movsx eax,byte[ebp]   mov cl,[ebp+1]   add ebp,2   mov [SfxR0+%1*4],ax   CLRFLAGS   FXReturn%endmacro%macro LMSRNc 1  ; Verified.   xor eax,eax   mov al,[ebp]   add eax,eax   inc ebp   add eax,[SfxRAMMem]   mov cl,[ebp]   mov dword [SfxLastRamAdr],eax   mov ebx,[eax]              ; Read word from ram   inc ebp   mov [SfxR0+%1*4],bx              ; Write data   CLRFLAGS   FXReturn%endmacro%macro SMSRNc 1  ; Verified.   xor eax,eax   mov al,[ebp]   inc ebp   add eax,eax   mov cl,[ebp]   add eax,[SfxRAMMem]   mov ebx,[SfxR0+%1*4]              ; Read data   mov dword [SfxLastRamAdr],eax   inc ebp   mov [eax],bx              ; Write word to ram   CLRFLAGS   FXReturn%endmacro%macro FROMRNd 1 ; V   FETCHPIPE   mov esi,SfxR0+%1*4   inc ebp                ; Increase program counter   call [FxTable+ecx*4]   mov esi,SfxR0   FXReturn%endmacro%macro ORRNc 1   ; V   mov eax,[esi]            ; Read Source   mov ebx,[SfxR0+%1*4]             ; Read   FETCHPIPE   or eax,ebx   inc ebp   mov [edi],eax            ; Write DREG   mov [SfxSignZero],eax   CLRFLAGS   FXReturn%endmacro%macro XORRNc 1  ; V   mov eax,[esi]            ; Read Source   mov ebx,[SfxR0+%1*4]             ; Read   FETCHPIPE   xor eax,ebx   inc ebp   mov [edi],eax            ; Write DREG   mov [SfxSignZero],eax   CLRFLAGS   FXReturn%endmacro%macro ORIc 1    ; V   mov eax,[esi]            ; Read Source   FETCHPIPE   or eax,%1   inc ebp   mov [edi],eax            ; Write DREG   mov [SfxSignZero],eax   CLRFLAGS   FXReturn%endmacro%macro XORIc 1   ; V   mov eax,[esi]            ; Read Source   FETCHPIPE   xor eax,%1   inc ebp   mov [edi],eax            ; Write DREG   mov [SfxSignZero],eax   CLRFLAGS   FXReturn%endmacro%macro INCRNc 1  ; Verified   inc word[SfxR0+%1*4]   FETCHPIPE   mov eax,[SfxR0+%1*4]            ; Read Source   mov [SfxSignZero],eax   CLRFLAGS   inc ebp   FXReturn%endmacro%macro DECRNc 1  ; Verified   dec word[SfxR0+%1*4]   FETCHPIPE   mov eax,[SfxR0+%1*4]            ; Read Source   mov [SfxR0+%1*4],eax   mov [SfxSignZero],eax   CLRFLAGS   inc ebp   FXReturn%endmacro%macro IWTRNc 1  ; aka LEA       ; Verified.   mov eax,[ebp]   mov cl,[ebp+2]   and eax,0FFFFh   add ebp,3   mov [SfxR0+%1*4],eax   CLRFLAGS   FXReturn%endmacro%macro LMRNc 1   ; Verified!   xor eax,eax   mov cl,[ebp+2]   mov ax,[ebp]   mov ebx,[SfxRAMMem]   mov [SfxLastRamAdr],eax   add [SfxLastRamAdr],ebx   mov dl,[eax+ebx]   xor eax,1   add ebp,3   mov dh,[eax+ebx]   mov word [SfxR0+%1*4],dx         ; Store Word   CLRFLAGS   FXReturn%endmacro%macro SMRNc 1   ; Verified   mov ebx,[SfxR0+%1*4]   mov eax,[ebp]   mov cl,[ebp+2]   and eax,0FFFFh   mov dx,bx   mov ebx,[SfxRAMMem]   mov [SfxLastRamAdr],eax   add [SfxLastRamAdr],ebx   mov [eax+ebx],dl   xor eax,1   add ebp,3   mov [eax+ebx],dh   CLRFLAGS   FXReturn%endmacro

⌨️ 快捷键说明

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