diff -NaHudr snes9x-1.43-src/2xSaImmx.asm snes9x-improvement7-src-dehacked/2xSaImmx.asm --- snes9x-1.43-src/2xSaImmx.asm 1970-01-01 02:00:00.000000000 +0200 +++ snes9x-improvement7-src-dehacked/2xSaImmx.asm 2005-03-20 23:46:35.000000000 +0200 @@ -0,0 +1,1359 @@ +;/*---------------------------------------------------------------------* +; * The following (piece of) code, (part of) the 2xSaI engine, * +; * copyright (c) 1999 by Derek Liauw Kie Fa. * +; * Non-Commercial use of the engine is allowed and is encouraged, * +; * provided that appropriate credit be given and that this copyright * +; * notice will not be removed under any circumstance. * +; * You may freely modify this code, but I request * +; * that any improvements to the engine be submitted to me, so * +; * that I can implement these improvements in newer versions of * +; * the engine. * +; * If you need more information, have any comments or suggestions, * +; * you can e-mail me. My e-mail: derek-liauw@usa.net. * +; *---------------------------------------------------------------------*/ + +;---------------------- +; 2xSaI version 0.59 WIP, soon to become version 0.60 +;---------------------- + + BITS 32 +%ifdef __DJGPP__ + GLOBAL __2xSaILine + GLOBAL __2xSaISuperEagleLine + GLOBAL _Init_2xSaIMMX +%else + GLOBAL __2xSaILine + GLOBAL __2xSaISuperEagleLine + GLOBAL _Init_2xSaIMMX +%endif + SECTION .text ALIGN = 32 + +%ifdef __DJGPP__ +;EXTERN_C void _2xSaILine (uint8 *srcPtr, uint32 srcPitch, uint32 width, +; uint8 *dstPtr, uint32 dstPitch, uint16 dstSegment); +%else +;EXTERN_C void _2xSaILine (uint8 *srcPtr, uint32 srcPitch, uint32 width, +; uint8 *dstPtr, uint32 dstPitch); +%endif + +srcPtr equ 8 +deltaPtr equ 12 +srcPitch equ 16 +width equ 20 +dstOffset equ 24 +dstPitch equ 28 +dstSegment equ 32 + + + + +colorB0 equ -2 +colorB1 equ 0 +colorB2 equ 2 +colorB3 equ 4 + +color7 equ -2 +color8 equ 0 +color9 equ 2 + +color4 equ -2 +color5 equ 0 +color6 equ 2 +colorS2 equ 4 + +color1 equ -2 +color2 equ 0 +color3 equ 2 +colorS1 equ 4 + +colorA0 equ -2 +colorA1 equ 0 +colorA2 equ 2 +colorA3 equ 4 + + +%ifdef __DJGPP__ +__2xSaISuperEagleLine: +%else +__2xSaISuperEagleLine: +%endif +; Store some stuff + push ebp + mov ebp, esp + pushad + +; Prepare the destination +%ifdef __DJGPP__ + ; Set the selector + mov eax, [ebp+dstSegment] + mov fs, ax +%endif + mov edx, [ebp+dstOffset] ; edx points to the screen +; Prepare the source + ; eax points to colorA + mov eax, [ebp+srcPtr] + mov ebx, [ebp+srcPitch] + mov ecx, [ebp+width] + ; eax now points to colorB1 + sub eax, ebx + +; Main Loop +.Loop: push ecx + + ;-----Check Delta------------------ + mov ecx, [ebp+deltaPtr] + + movq mm0, [eax+colorB0] + movq mm1, [eax+colorB3] + movq mm2, [eax+ebx+color4] + movq mm3, [eax+ebx+colorS2] + movq mm4, [eax+ebx+ebx+color1] + movq mm5, [eax+ebx+ebx+colorS1] + push eax + add eax, ebx + movq mm6, [eax+ebx+ebx+colorA0] + movq mm7, [eax+ebx+ebx+colorA3] + pop eax + + pcmpeqw mm0, [ecx+2+colorB0] + pcmpeqw mm1, [ecx+2+colorB3] + pcmpeqw mm2, [ecx+ebx+2+color4] + pcmpeqw mm3, [ecx+ebx+2+colorS2] + pcmpeqw mm4, [ecx+ebx+ebx+2+color1] + pcmpeqw mm5, [ecx+ebx+ebx+2+colorS1] + add ecx, ebx + pcmpeqw mm6, [ecx+ebx+ebx+2+colorA0] + pcmpeqw mm7, [ecx+ebx+ebx+2+colorA3] + sub ecx, ebx + + + pand mm0, mm1 + pand mm2, mm3 + pand mm4, mm5 + pand mm6, mm7 + pand mm0, mm2 + pand mm4, mm6 + pxor mm7, mm7 + pand mm0, mm4 + movq mm6, [eax+colorB0] + pcmpeqw mm7, mm0 + + movq [ecx+2+colorB0], mm6 + + packsswb mm7, mm7 + movd ecx, mm7 + test ecx, ecx + jz near .SKIP_PROCESS + + ;End Delta + + ;--------------------------------- + movq mm0, [eax+ebx+color5] + movq mm1, [eax+ebx+color6] + movq mm2, mm0 + movq mm3, mm1 + movq mm4, mm0 + movq mm5, mm1 + + pand mm0, [colorMask] + pand mm1, [colorMask] + + psrlw mm0, 1 + psrlw mm1, 1 + + pand mm3, [lowPixelMask] + paddw mm0, mm1 + + pand mm3, mm2 + paddw mm0, mm3 ;mm0 contains the interpolated values + movq [I56Pixel], mm0 + movq mm7, mm0 + + ;------------------- + movq mm0, mm7 + movq mm1, mm4 ;5,5,5,6 + movq mm2, mm0 + movq mm3, mm1 + + pand mm0, [colorMask] + pand mm1, [colorMask] + + psrlw mm0, 1 + psrlw mm1, 1 + + pand mm3, [lowPixelMask] + paddw mm0, mm1 + + pand mm3, mm2 + paddw mm0, mm3 ;mm0 contains the interpolated values + movq [product1a], mm0 + ;-------------------- + + movq mm0, mm7 + movq mm1, mm5 ;6,6,6,5 + movq mm2, mm0 + movq mm3, mm1 + + pand mm0, [colorMask] + pand mm1, [colorMask] + + psrlw mm0, 1 + psrlw mm1, 1 + + pand mm3, [lowPixelMask] + paddw mm0, mm1 + + pand mm3, mm2 + paddw mm0, mm3 + movq [product1b], mm0 + + ;------------------------- + ;------------------------- + movq mm0, [eax+ebx+ebx+color2] + movq mm1, [eax+ebx+ebx+color3] + movq mm2, mm0 + movq mm3, mm1 + movq mm4, mm0 + movq mm5, mm1 + + pand mm0, [colorMask] + pand mm1, [colorMask] + + psrlw mm0, 1 + psrlw mm1, 1 + + pand mm3, [lowPixelMask] + paddw mm0, mm1 + + pand mm3, mm2 + paddw mm0, mm3 + movq [I23Pixel], mm0 + movq mm7, mm0 + + ;--------------------- + movq mm0, mm7 + movq mm1, mm4 ;2,2,2,3 + movq mm2, mm0 + movq mm3, mm1 + + pand mm0, [colorMask] + pand mm1, [colorMask] + + psrlw mm0, 1 + psrlw mm1, 1 + + pand mm3, [lowPixelMask] + paddw mm0, mm1 + + pand mm3, mm2 + paddw mm0, mm3 + movq [product2a], mm0 + + ;---------------------- + movq mm0, mm7 + movq mm1, mm5 ;3,3,3,2 + movq mm2, mm0 + movq mm3, mm1 + + pand mm0, [colorMask] + pand mm1, [colorMask] + + psrlw mm0, 1 + psrlw mm1, 1 + + pand mm3, [lowPixelMask] + paddw mm0, mm1 + + pand mm3, mm2 + paddw mm0, mm3 + movq [product2b], mm0 + + + ;//////////////////////////////// + ; Decide which "branch" to take + ;-------------------------------- + movq mm4, [eax+ebx+color5] + movq mm5, [eax+ebx+color6] + movq mm6, [eax+ebx+ebx+color3] + movq mm7, [eax+ebx+ebx+color2] + + pxor mm3, mm3 + movq mm0, mm4 + movq mm1, mm5 + + pcmpeqw mm0, mm6 + pcmpeqw mm1, mm7 + pcmpeqw mm1, mm3 + pand mm0, mm1 + movq [Mask35], mm0 + + movq mm0, [eax+ebx+ebx+colorS1] + movq mm1, [eax+ebx+color4] + push eax + add eax, ebx + movq mm2, [eax+ebx+ebx+colorA2] + pop eax + movq mm3, [eax+colorB1] + pcmpeqw mm0, mm4 + pcmpeqw mm1, mm4 + pcmpeqw mm2, mm4 + pcmpeqw mm3, mm4 + pand mm0, mm1 + pand mm2, mm3 + por mm0, mm2 + pand mm0, [Mask35] + movq [Mask35b], mm0 + + ;----------- + pxor mm3, mm3 + movq mm0, mm4 + movq mm1, mm5 + + pcmpeqw mm0, mm6 + pcmpeqw mm1, mm7 + pcmpeqw mm0, mm3 + pand mm0, mm1 + movq [Mask26], mm0 + + movq mm0, [eax+ebx+ebx+color1] + movq mm1, [eax+ebx+colorS2] + push eax + add eax, ebx + movq mm2, [eax+ebx+ebx+colorA1] + pop eax + movq mm3, [eax+colorB2] + pcmpeqw mm0, mm5 + pcmpeqw mm1, mm5 + pcmpeqw mm2, mm5 + pcmpeqw mm3, mm5 + pand mm0, mm1 + pand mm2, mm3 + por mm0, mm2 + pand mm0, [Mask26] + movq [Mask26b], mm0 + + ;-------------------- + movq mm0, mm4 + movq mm1, mm5 + movq mm2, mm0 + + pcmpeqw mm2, mm1 + pcmpeqw mm0, mm6 + pcmpeqw mm1, mm7 + pand mm0, mm1 + pand mm2, mm0 + pxor mm0, mm2 + movq mm7, mm0 + + ;------------------ + packsswb mm7, mm7 + movd ecx, mm7 + test ecx, ecx + jz near .SKIP_GUESS + +;--------------------------------------------- +; Map of the pixels: I|E F|J +; G|A B|K +; H|C D|L +; M|N O|P + movq mm6, mm0 + movq mm4, [eax+ebx+color5] + movq mm5, [eax+ebx+color6] + pxor mm7, mm7 + pand mm6, [ONE] + + movq mm0, [eax+colorB1] + movq mm1, [eax+ebx+color4] + movq mm2, mm0 + movq mm3, mm1 + pcmpeqw mm0, mm4 + pcmpeqw mm1, mm4 + pcmpeqw mm2, mm5 + pcmpeqw mm3, mm5 + pand mm0, mm6 + pand mm1, mm6 + pand mm2, mm6 + pand mm3, mm6 + paddw mm0, mm1 + paddw mm2, mm3 + + pxor mm3, mm3 + pcmpgtw mm0, mm6 + pcmpgtw mm2, mm6 + pcmpeqw mm0, mm3 + pcmpeqw mm2, mm3 + pand mm0, mm6 + pand mm2, mm6 + paddw mm7, mm0 + psubw mm7, mm2 + + movq mm0, [eax+colorB2] + movq mm1, [eax+ebx+colorS2] + movq mm2, mm0 + movq mm3, mm1 + pcmpeqw mm0, mm4 + pcmpeqw mm1, mm4 + pcmpeqw mm2, mm5 + pcmpeqw mm3, mm5 + pand mm0, mm6 + pand mm1, mm6 + pand mm2, mm6 + pand mm3, mm6 + paddw mm0, mm1 + paddw mm2, mm3 + + pxor mm3, mm3 + pcmpgtw mm0, mm6 + pcmpgtw mm2, mm6 + pcmpeqw mm0, mm3 + pcmpeqw mm2, mm3 + pand mm0, mm6 + pand mm2, mm6 + paddw mm7, mm0 + psubw mm7, mm2 + + push eax + add eax, ebx + movq mm0, [eax+ebx+color1] + movq mm1, [eax+ebx+ebx+colorA1] + movq mm2, mm0 + movq mm3, mm1 + pcmpeqw mm0, mm4 + pcmpeqw mm1, mm4 + pcmpeqw mm2, mm5 + pcmpeqw mm3, mm5 + pand mm0, mm6 + pand mm1, mm6 + pand mm2, mm6 + pand mm3, mm6 + paddw mm0, mm1 + paddw mm2, mm3 + + pxor mm3, mm3 + pcmpgtw mm0, mm6 + pcmpgtw mm2, mm6 + pcmpeqw mm0, mm3 + pcmpeqw mm2, mm3 + pand mm0, mm6 + pand mm2, mm6 + paddw mm7, mm0 + psubw mm7, mm2 + + movq mm0, [eax+ebx+colorS1] + movq mm1, [eax+ebx+ebx+colorA2] + movq mm2, mm0 + movq mm3, mm1 + pcmpeqw mm0, mm4 + pcmpeqw mm1, mm4 + pcmpeqw mm2, mm5 + pcmpeqw mm3, mm5 + pand mm0, mm6 + pand mm1, mm6 + pand mm2, mm6 + pand mm3, mm6 + paddw mm0, mm1 + paddw mm2, mm3 + + pxor mm3, mm3 + pcmpgtw mm0, mm6 + pcmpgtw mm2, mm6 + pcmpeqw mm0, mm3 + pcmpeqw mm2, mm3 + pand mm0, mm6 + pand mm2, mm6 + paddw mm7, mm0 + psubw mm7, mm2 + + pop eax + movq mm1, mm7 + pxor mm0, mm0 + pcmpgtw mm7, mm0 + pcmpgtw mm0, mm1 + + por mm7, [Mask35] + por mm1, [Mask26] + movq [Mask35], mm7 + movq [Mask26], mm1 + +.SKIP_GUESS: + ;Start the ASSEMBLY !!! + + movq mm4, [Mask35] + movq mm5, [Mask26] + movq mm6, [Mask35b] + movq mm7, [Mask26b] + + movq mm0, [eax+ebx+color5] + movq mm1, [eax+ebx+color6] + movq mm2, [eax+ebx+ebx+color2] + movq mm3, [eax+ebx+ebx+color3] + pcmpeqw mm0, mm2 + pcmpeqw mm1, mm3 + movq mm2, mm4 + movq mm3, mm5 + por mm0, mm1 + por mm2, mm3 + pand mm2, mm0 + pxor mm0, mm2 + movq mm3, mm0 + + movq mm2, mm0 + pxor mm0, mm0 + por mm2, mm4 + pxor mm4, mm6 + por mm2, mm5 + pxor mm5, mm7 + pcmpeqw mm2, mm0 + ;---------------- + + movq mm0, [eax+ebx+color5] + movq mm1, mm3 + por mm1, mm4 + por mm1, mm6 + pand mm0, mm1 + movq mm1, mm5 + pand mm1, [I56Pixel] + por mm0, mm1 + movq mm1, mm7 + pand mm1, [product1b] + por mm0, mm1 + movq mm1, mm2 + pand mm1, [product1a] + por mm0, mm1 + movq [final1a], mm0 + + movq mm0, [eax+ebx+color6] + movq mm1, mm3 + por mm1, mm5 + por mm1, mm7 + pand mm0, mm1 + movq mm1, mm4 + pand mm1, [I56Pixel] + por mm0, mm1 + movq mm1, mm6 + pand mm1, [product1a] + por mm0, mm1 + movq mm1, mm2 + pand mm1, [product1b] + por mm0, mm1 + movq [final1b], mm0 + + movq mm0, [eax+ebx+ebx+color2] + movq mm1, mm3 + por mm1, mm5 + por mm1, mm7 + pand mm0, mm1 + movq mm1, mm4 + pand mm1, [I23Pixel] + por mm0, mm1 + movq mm1, mm6 + pand mm1, [product2b] + por mm0, mm1 + movq mm1, mm2 + pand mm1, [product2a] + por mm0, mm1 + movq [final2a], mm0 + + movq mm0, [eax+ebx+ebx+color3] + movq mm1, mm3 + por mm1, mm4 + por mm1, mm6 + pand mm0, mm1 + movq mm1, mm5 + pand mm1, [I23Pixel] + por mm0, mm1 + movq mm1, mm7 + pand mm1, [product2a] + por mm0, mm1 + movq mm1, mm2 + pand mm1, [product2b] + por mm0, mm1 + movq [final2b], mm0 + + + movq mm0, [final1a] + movq mm2, [final1b] + movq mm1, mm0 + movq mm4, [final2a] + movq mm6, [final2b] + movq mm5, mm4 + punpcklwd mm0, mm2 + punpckhwd mm1, mm2 + punpcklwd mm4, mm6 + punpckhwd mm5, mm6 + + + + +%ifdef __DJGPP__ + movq [fs:edx], mm0 + movq [fs:edx+8], mm1 + push edx + add edx, [ebp+dstPitch] + movq [fs:edx], mm4 + movq [fs:edx+8], mm5 + pop edx +%else + movq [edx], mm0 + movq [edx+8], mm1 + push edx + add edx, [ebp+dstPitch] + movq [edx], mm4 + movq [edx+8], mm5 + pop edx +%endif +.SKIP_PROCESS: + mov ecx, [ebp+deltaPtr] + add ecx, 8 + mov [ebp+deltaPtr], ecx + add edx, 16 + add eax, 8 + + pop ecx + sub ecx, 4 + cmp ecx, 0 + jg near .Loop + +; Restore some stuff + popad + mov esp, ebp + pop ebp + emms + ret + + +;------------------------------------------------------------------------- +;------------------------------------------------------------------------- +;------------------------------------------------------------------------- +;------------------------------------------------------------------------- +;------------------------------------------------------------------------- +;------------------------------------------------------------------------- +;------------------------------------------------------------------------- + + +;This is version 0.50 +colorI equ -2 +colorE equ 0 +colorF equ 2 +colorJ equ 4 + +colorG equ -2 +colorA equ 0 +colorB equ 2 +colorK equ 4 + +colorH equ -2 +colorC equ 0 +colorD equ 2 +colorL equ 4 + +colorM equ -2 +colorN equ 0 +colorO equ 2 +colorP equ 4 + +%ifdef __DJGPP__ +__2xSaILine: +%else +__2xSaILine: +%endif +; Store some stuff + push ebp + mov ebp, esp + pushad + +; Prepare the destination +%ifdef __DJGPP__ + ; Set the selector + mov eax, [ebp+dstSegment] + mov fs, ax +%endif + mov edx, [ebp+dstOffset] ; edx points to the screen +; Prepare the source + ; eax points to colorA + mov eax, [ebp+srcPtr] + mov ebx, [ebp+srcPitch] + mov ecx, [ebp+width] + ; eax now points to colorE + sub eax, ebx + + +; Main Loop +.Loop: push ecx + + ;-----Check Delta------------------ + mov ecx, [ebp+deltaPtr] + + movq mm0, [eax+colorI] + movq mm1, [eax+colorJ] + movq mm2, [eax+ebx+colorG] + movq mm3, [eax+ebx+colorK] + movq mm4, [eax+ebx+ebx+colorH] + movq mm5, [eax+ebx+ebx+colorL] + push eax + add eax, ebx + movq mm6, [eax+ebx+ebx+colorM] + movq mm7, [eax+ebx+ebx+colorP] + pop eax + + pcmpeqw mm0, [ecx+2+colorI] + pcmpeqw mm1, [ecx+2+colorK] + pcmpeqw mm2, [ecx+ebx+2+colorG] + pcmpeqw mm3, [ecx+ebx+2+colorK] + pcmpeqw mm4, [ecx+ebx+ebx+2+colorH] + pcmpeqw mm5, [ecx+ebx+ebx+2+colorL] + add ecx, ebx + pcmpeqw mm6, [ecx+ebx+ebx+2+colorM] + pcmpeqw mm7, [ecx+ebx+ebx+2+colorP] + sub ecx, ebx + + + pand mm0, mm1 + pand mm2, mm3 + pand mm4, mm5 + pand mm6, mm7 + pand mm0, mm2 + pand mm4, mm6 + pxor mm7, mm7 + pand mm0, mm4 + movq mm6, [eax+colorI] + pcmpeqw mm7, mm0 + + movq [ecx+2+colorI], mm6 + + packsswb mm7, mm7 + movd ecx, mm7 + test ecx, ecx + jz near .SKIP_PROCESS + + ;End Delta + + ;--------------------------------- + + +;1 + ;if ((colorA == colorD) && (colorB != colorC) && (colorA == colorE) && (colorB == colorL) + movq mm0, [eax+ebx+colorA] ;mm0 and mm1 contain colorA + movq mm2, [eax+ebx+colorB] ;mm2 and mm3 contain colorB + + movq mm1, mm0 + movq mm3, mm2 + + pcmpeqw mm0, [eax+ebx+ebx+colorD] + pcmpeqw mm1, [eax+colorE] + pcmpeqw mm2, [eax+ebx+ebx+colorL] + pcmpeqw mm3, [eax+ebx+ebx+colorC] + + pand mm0, mm1 + pxor mm1, mm1 + pand mm0, mm2 + pcmpeqw mm3, mm1 + pand mm0, mm3 ;result in mm0 + + ;if ((colorA == colorC) && (colorB != colorE) && (colorA == colorF) && (colorB == colorJ) + movq mm4, [eax+ebx+colorA] ;mm4 and mm5 contain colorA + movq mm6, [eax+ebx+colorB] ;mm6 and mm7 contain colorB + movq mm5, mm4 + movq mm7, mm6 + + pcmpeqw mm4, [eax+ebx+ebx+colorC] + pcmpeqw mm5, [eax+colorF] + pcmpeqw mm6, [eax+colorJ] + pcmpeqw mm7, [eax+colorE] + + pand mm4, mm5 + pxor mm5, mm5 + pand mm4, mm6 + pcmpeqw mm7, mm5 + pand mm4, mm7 ;result in mm4 + + por mm0, mm4 ;combine the masks + movq [Mask1], mm0 + + ;-------------------------------------------- + +;2 + ;if ((colorB == colorC) && (colorA != colorD) && (colorB == colorF) && (colorA == colorH) + movq mm0, [eax+ebx+colorB] ;mm0 and mm1 contain colorB + movq mm2, [eax+ebx+colorA] ;mm2 and mm3 contain colorA + movq mm1, mm0 + movq mm3, mm2 + + pcmpeqw mm0, [eax+ebx+ebx+colorC] + pcmpeqw mm1, [eax+colorF] + pcmpeqw mm2, [eax+ebx+ebx+colorH] + pcmpeqw mm3, [eax+ebx+ebx+colorD] + + pand mm0, mm1 + pxor mm1, mm1 + pand mm0, mm2 + pcmpeqw mm3, mm1 + pand mm0, mm3 ;result in mm0 + + ;if ((colorB == colorE) && (colorB == colorD) && (colorA != colorF) && (colorA == colorI) + movq mm4, [eax+ebx+colorB] ;mm4 and mm5 contain colorB + movq mm6, [eax+ebx+colorA] ;mm6 and mm7 contain colorA + movq mm5, mm4 + movq mm7, mm6 + + pcmpeqw mm4, [eax+ebx+ebx+colorD] + pcmpeqw mm5, [eax+colorE] + pcmpeqw mm6, [eax+colorI] + pcmpeqw mm7, [eax+colorF] + + pand mm4, mm5 + pxor mm5, mm5 + pand mm4, mm6 + pcmpeqw mm7, mm5 + pand mm4, mm7 ;result in mm4 + + por mm0, mm4 ;combine the masks + movq [Mask2], mm0 + + +;interpolate colorA and colorB + movq mm0, [eax+ebx+colorA] + movq mm1, [eax+ebx+colorB] + + movq mm2, mm0 + movq mm3, mm1 + + pand mm0, [colorMask] + pand mm1, [colorMask] + + psrlw mm0, 1 + psrlw mm1, 1 + + pand mm3, [lowPixelMask] + paddw mm0, mm1 + + pand mm3, mm2 + paddw mm0, mm3 ;mm0 contains the interpolated values + + ;assemble the pixels + movq mm1, [eax+ebx+colorA] + movq mm2, [eax+ebx+colorB] + + movq mm3, [Mask1] + movq mm5, mm1 + movq mm4, [Mask2] + movq mm6, mm1 + + pand mm1, mm3 + por mm3, mm4 + pxor mm7, mm7 + pand mm2, mm4 + + pcmpeqw mm3, mm7 + por mm1, mm2 + pand mm0, mm3 + + por mm0, mm1 + + punpcklwd mm5, mm0 + punpckhwd mm6, mm0 + +%ifdef __DJGPP__ + movq [fs:edx], mm5 + movq [fs:edx+8], mm6 +%else + movq [edx], mm5 + movq [edx+8], mm6 +%endif + +;------------------------------------------------ +; Create the Nextline +;------------------------------------------------ +;3 ;if ((colorA == colorD) && (colorB != colorC) && (colorA == colorG) && (colorC == colorO) + movq mm0, [eax+ebx+colorA] ;mm0 and mm1 contain colorA + movq mm2, [eax+ebx+ebx+colorC] ;mm2 and mm3 contain colorC + movq mm1, mm0 + movq mm3, mm2 + + push eax + add eax, ebx + pcmpeqw mm0, [eax+ebx+colorD] + pcmpeqw mm1, [eax+colorG] + pcmpeqw mm2, [eax+ebx+ebx+colorO] + pcmpeqw mm3, [eax+colorB] + pop eax + + pand mm0, mm1 + pxor mm1, mm1 + pand mm0, mm2 + pcmpeqw mm3, mm1 + pand mm0, mm3 ;result in mm0 + + ;if ((colorA == colorB) && (colorG != colorC) && (colorA == colorH) && (colorC == colorM) + movq mm4, [eax+ebx+colorA] ;mm4 and mm5 contain colorA + movq mm6, [eax+ebx+ebx+colorC] ;mm6 and mm7 contain colorC + movq mm5, mm4 + movq mm7, mm6 + + push eax + add eax, ebx + pcmpeqw mm4, [eax+ebx+colorH] + pcmpeqw mm5, [eax+colorB] + pcmpeqw mm6, [eax+ebx+ebx+colorM] + pcmpeqw mm7, [eax+colorG] + pop eax + + pand mm4, mm5 + pxor mm5, mm5 + pand mm4, mm6 + pcmpeqw mm7, mm5 + pand mm4, mm7 ;result in mm4 + + por mm0, mm4 ;combine the masks + movq [Mask1], mm0 + ;-------------------------------------------- + +;4 + ;if ((colorB == colorC) && (colorA != colorD) && (colorC == colorH) && (colorA == colorF) + movq mm0, [eax+ebx+ebx+colorC] ;mm0 and mm1 contain colorC + movq mm2, [eax+ebx+colorA] ;mm2 and mm3 contain colorA + movq mm1, mm0 + movq mm3, mm2 + + pcmpeqw mm0, [eax+ebx+colorB] + pcmpeqw mm1, [eax+ebx+ebx+colorH] + pcmpeqw mm2, [eax+colorF] + pcmpeqw mm3, [eax+ebx+ebx+colorD] + + pand mm0, mm1 + pxor mm1, mm1 + pand mm0, mm2 + pcmpeqw mm3, mm1 + pand mm0, mm3 ;result in mm0 + + ;if ((colorC == colorG) && (colorC == colorD) && (colorA != colorH) && (colorA == colorI) + movq mm4, [eax+ebx+ebx+colorC] ;mm4 and mm5 contain colorC + movq mm6, [eax+ebx+colorA] ;mm6 and mm7 contain colorA + movq mm5, mm4 + movq mm7, mm6 + + pcmpeqw mm4, [eax+ebx+ebx+colorD] + pcmpeqw mm5, [eax+ebx+colorG] + pcmpeqw mm6, [eax+colorI] + pcmpeqw mm7, [eax+ebx+ebx+colorH] + + pand mm4, mm5 + pxor mm5, mm5 + pand mm4, mm6 + pcmpeqw mm7, mm5 + pand mm4, mm7 ;result in mm4 + + por mm0, mm4 ;combine the masks + movq [Mask2], mm0 + ;---------------------------------------------- + +;interpolate colorA and colorC + movq mm0, [eax+ebx+colorA] + movq mm1, [eax+ebx+ebx+colorC] + + movq mm2, mm0 + movq mm3, mm1 + + pand mm0, [colorMask] + pand mm1, [colorMask] + + psrlw mm0, 1 + psrlw mm1, 1 + + pand mm3, [lowPixelMask] + paddw mm0, mm1 + + pand mm3, mm2 + paddw mm0, mm3 ;mm0 contains the interpolated values + ;------------- + + ;assemble the pixels + movq mm1, [eax+ebx+colorA] + movq mm2, [eax+ebx+ebx+colorC] + + movq mm3, [Mask1] + movq mm4, [Mask2] + + pand mm1, mm3 + pand mm2, mm4 + + por mm3, mm4 + pxor mm7, mm7 + por mm1, mm2 + + pcmpeqw mm3, mm7 + pand mm0, mm3 + por mm0, mm1 + movq [ACPixel], mm0 + +;//////////////////////////////// +; Decide which "branch" to take +;-------------------------------- + movq mm0, [eax+ebx+colorA] + movq mm1, [eax+ebx+colorB] + movq mm6, mm0 + movq mm7, mm1 + pcmpeqw mm0, [eax+ebx+ebx+colorD] + pcmpeqw mm1, [eax+ebx+ebx+colorC] + pcmpeqw mm6, mm7 + + movq mm2, mm0 + movq mm3, mm0 + + pand mm0, mm1 ;colorA == colorD && colorB == colorC + pxor mm7, mm7 + + pcmpeqw mm2, mm7 + pand mm6, mm0 + pand mm2, mm1 ;colorA != colorD && colorB == colorC + + pcmpeqw mm1, mm7 + + pand mm1, mm3 ;colorA == colorD && colorB != colorC + pxor mm0, mm6 + por mm1, mm6 + movq mm7, mm0 + movq [Mask2], mm2 + packsswb mm7, mm7 + movq [Mask1], mm1 + + movd ecx, mm7 + test ecx, ecx + jz near .SKIP_GUESS + +;--------------------------------------------- +; Map of the pixels: I|E F|J +; G|A B|K +; H|C D|L +; M|N O|P + movq mm6, mm0 + movq mm4, [eax+ebx+colorA] + movq mm5, [eax+ebx+colorB] + pxor mm7, mm7 + pand mm6, [ONE] + + movq mm0, [eax+colorE] + movq mm1, [eax+ebx+colorG] + movq mm2, mm0 + movq mm3, mm1 + pcmpeqw mm0, mm4 + pcmpeqw mm1, mm4 + pcmpeqw mm2, mm5 + pcmpeqw mm3, mm5 + pand mm0, mm6 + pand mm1, mm6 + pand mm2, mm6 + pand mm3, mm6 + paddw mm0, mm1 + paddw mm2, mm3 + + pxor mm3, mm3 + pcmpgtw mm0, mm6 + pcmpgtw mm2, mm6 + pcmpeqw mm0, mm3 + pcmpeqw mm2, mm3 + pand mm0, mm6 + pand mm2, mm6 + paddw mm7, mm0 + psubw mm7, mm2 + + movq mm0, [eax+colorF] + movq mm1, [eax+ebx+colorK] + movq mm2, mm0 + movq mm3, mm1 + pcmpeqw mm0, mm4 + pcmpeqw mm1, mm4 + pcmpeqw mm2, mm5 + pcmpeqw mm3, mm5 + pand mm0, mm6 + pand mm1, mm6 + pand mm2, mm6 + pand mm3, mm6 + paddw mm0, mm1 + paddw mm2, mm3 + + pxor mm3, mm3 + pcmpgtw mm0, mm6 + pcmpgtw mm2, mm6 + pcmpeqw mm0, mm3 + pcmpeqw mm2, mm3 + pand mm0, mm6 + pand mm2, mm6 + paddw mm7, mm0 + psubw mm7, mm2 + + push eax + add eax, ebx + movq mm0, [eax+ebx+colorH] + movq mm1, [eax+ebx+ebx+colorN] + movq mm2, mm0 + movq mm3, mm1 + pcmpeqw mm0, mm4 + pcmpeqw mm1, mm4 + pcmpeqw mm2, mm5 + pcmpeqw mm3, mm5 + pand mm0, mm6 + pand mm1, mm6 + pand mm2, mm6 + pand mm3, mm6 + paddw mm0, mm1 + paddw mm2, mm3 + + pxor mm3, mm3 + pcmpgtw mm0, mm6 + pcmpgtw mm2, mm6 + pcmpeqw mm0, mm3 + pcmpeqw mm2, mm3 + pand mm0, mm6 + pand mm2, mm6 + paddw mm7, mm0 + psubw mm7, mm2 + + movq mm0, [eax+ebx+colorL] + movq mm1, [eax+ebx+ebx+colorO] + movq mm2, mm0 + movq mm3, mm1 + pcmpeqw mm0, mm4 + pcmpeqw mm1, mm4 + pcmpeqw mm2, mm5 + pcmpeqw mm3, mm5 + pand mm0, mm6 + pand mm1, mm6 + pand mm2, mm6 + pand mm3, mm6 + paddw mm0, mm1 + paddw mm2, mm3 + + pxor mm3, mm3 + pcmpgtw mm0, mm6 + pcmpgtw mm2, mm6 + pcmpeqw mm0, mm3 + pcmpeqw mm2, mm3 + pand mm0, mm6 + pand mm2, mm6 + paddw mm7, mm0 + psubw mm7, mm2 + + pop eax + movq mm1, mm7 + pxor mm0, mm0 + pcmpgtw mm7, mm0 + pcmpgtw mm0, mm1 + + por mm7, [Mask1] + por mm1, [Mask2] + movq [Mask1], mm7 + movq [Mask2], mm1 + +.SKIP_GUESS: + ;---------------------------- + ;interpolate A, B, C and D + movq mm0, [eax+ebx+colorA] + movq mm1, [eax+ebx+colorB] + movq mm4, mm0 + movq mm2, [eax+ebx+ebx+colorC] + movq mm5, mm1 + movq mm3, [qcolorMask] + movq mm6, mm2 + movq mm7, [qlowpixelMask] + + pand mm0, mm3 + pand mm1, mm3 + pand mm2, mm3 + pand mm3, [eax+ebx+ebx+colorD] + + psrlw mm0, 2 + pand mm4, mm7 + psrlw mm1, 2 + pand mm5, mm7 + psrlw mm2, 2 + pand mm6, mm7 + psrlw mm3, 2 + pand mm7, [eax+ebx+ebx+colorD] + + paddw mm0, mm1 + paddw mm2, mm3 + + paddw mm4, mm5 + paddw mm6, mm7 + + paddw mm4, mm6 + paddw mm0, mm2 + psrlw mm4, 2 + pand mm4, [qlowpixelMask] + paddw mm0, mm4 ;mm0 contains the interpolated value of A, B, C and D + +;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ + ;assemble the pixels + movq mm1, [Mask1] + movq mm2, [Mask2] + movq mm4, [eax+ebx+colorA] + movq mm5, [eax+ebx+colorB] + pand mm4, mm1 + pand mm5, mm2 + + pxor mm7, mm7 + por mm1, mm2 + por mm4, mm5 + pcmpeqw mm1, mm7 + pand mm0, mm1 + por mm4, mm0 ;mm4 contains the diagonal pixels + + movq mm0, [ACPixel] + movq mm1, mm0 + punpcklwd mm0, mm4 + punpckhwd mm1, mm4 + + push edx + add edx, [ebp+dstPitch] + +%ifdef __DJGPP__ + movq [fs:edx], mm0 + movq [fs:edx+8], mm1 +%else + movq [edx], mm0 + movq [edx+8], mm1 +%endif + pop edx + +.SKIP_PROCESS: + mov ecx, [ebp+deltaPtr] + add ecx, 8 + mov [ebp+deltaPtr], ecx + add edx, 16 + add eax, 8 + + pop ecx + sub ecx, 4 + cmp ecx, 0 + jg near .Loop + +; Restore some stuff + popad + mov esp, ebp + pop ebp + emms + ret + +;------------------------------------------------------------------------- +;------------------------------------------------------------------------- +;------------------------------------------------------------------------- +;------------------------------------------------------------------------- +;------------------------------------------------------------------------- +;------------------------------------------------------------------------- +;------------------------------------------------------------------------- + +%ifdef __DJGPP__ +_Init_2xSaIMMX: +%else +_Init_2xSaIMMX: +%endif +; Store some stuff + push ebp + mov ebp, esp + push edx + + +;Damn thing doesn't work +; mov eax,1 +; cpuid +; test edx, 0x00800000 ;test bit 23 +; jz end2 ;bit not set => no MMX detected + + mov eax, [ebp+8] ;PixelFormat + cmp eax, 555 + jz Bits555 + cmp eax, 565 + jz Bits565 +end2: + mov eax, 1 + jmp end +Bits555: + mov edx, 0x7BDE7BDE + mov eax, colorMask + mov [eax], edx + mov [eax+4], edx + mov edx, 0x04210421 + mov eax, lowPixelMask + mov [eax], edx + mov [eax+4], edx + mov edx, 0x739C739C + mov eax, qcolorMask + mov [eax], edx + mov [eax+4], edx + mov edx, 0x0C630C63 + mov eax, qlowpixelMask + mov [eax], edx + mov [eax+4], edx + mov eax, 0 + jmp end +Bits565: + mov edx, 0xF7DEF7DE + mov eax, colorMask + mov [eax], edx + mov [eax+4], edx + mov edx, 0x08210821 + mov eax, lowPixelMask + mov [eax], edx + mov [eax+4], edx + mov edx, 0xE79CE79C + mov eax, qcolorMask + mov [eax], edx + mov [eax+4], edx + mov edx, 0x18631863 + mov eax, qlowpixelMask + mov [eax], edx + mov [eax+4], edx + mov eax, 0 + jmp end +end: + pop edx + mov esp, ebp + pop ebp + ret + + +;------------------------------------------------------------------------- +;------------------------------------------------------------------------- +;------------------------------------------------------------------------- +;------------------------------------------------------------------------- +;------------------------------------------------------------------------- +;------------------------------------------------------------------------- +;------------------------------------------------------------------------- + + SECTION .data ALIGN = 32 +;Some constants +colorMask dd 0xF7DEF7DE,0xF7DEF7DE +lowPixelMask dd 0x08210821,0x08210821 + +qcolorMask dd 0xE79CE79C,0xE79CE79C +qlowpixelMask dd 0x18631863,0x18631863 + +darkenMask dd 0xC718C718,0xC718C718 +GreenMask dd 0x07E007E0,0x07E007E0 +RedBlueMask dd 0xF81FF81F,0xF81FF81F + +FALSE dd 0x00000000,0x00000000 +TRUE dd 0xffffffff,0xffffffff +ONE dd 0x00010001,0x00010001 + + + SECTION .bss ALIGN = 32 +ACPixel resb 8 +Mask1 resb 8 +Mask2 resb 8 + +I56Pixel resb 8 +I23Pixel resb 8 +Mask26 resb 8 +Mask35 resb 8 +Mask26b resb 8 +Mask35b resb 8 +product1a resb 8 +product1b resb 8 +product2a resb 8 +product2b resb 8 +final1a resb 8 +final1b resb 8 +final2a resb 8 +final2b resb 8 diff -NaHudr snes9x-1.43-src/InputCustom.cpp snes9x-improvement7-src-dehacked/InputCustom.cpp --- snes9x-1.43-src/InputCustom.cpp 2005-04-09 00:59:55.000000000 +0300 +++ snes9x-improvement7-src-dehacked/InputCustom.cpp 2005-04-09 00:59:23.000000000 +0300 @@ -2,21 +2,16 @@ #include #include #include -#include +#include #include "InputCustom.h" #include "wsnes9x.h" #include "language.h" static TCHAR szClassName[] = _T("InputCustom"); +static TCHAR szHotkeysClassName[] = _T("InputCustomHot"); LRESULT CALLBACK InputCustomWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); -typedef struct -{ - COLORREF crForeGnd; // Foreground text colour - COLORREF crBackGnd; // Background text colour - HFONT hFont; // The font - HWND hwnd; // The control's window handle -} InputCust; +LRESULT CALLBACK CharInputCustomWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); extern SJoyState JoystickF [16]; @@ -269,8 +264,12 @@ } + void TranslateKey(WORD keyz,char *out) { +// sprintf(out,"%d",keyz); +// return; + char temp[100]; if(keyz&0x8000) { @@ -338,6 +337,7 @@ case VK_RCONTROL: sprintf(out,GAMEDEVICE_VK_RCONTROL); break; case VK_LMENU: sprintf(out,GAMEDEVICE_VK_LMENU); break; case VK_RMENU: sprintf(out,GAMEDEVICE_VK_RMENU); break; + case 3: sprintf(out,GAMEDEVICE_VK_PAUSE); break; case VK_PAUSE: sprintf(out,GAMEDEVICE_VK_PAUSE); break; case VK_CAPITAL: sprintf(out,GAMEDEVICE_VK_CAPITAL); break; case VK_ESCAPE: sprintf(out,GAMEDEVICE_VK_ESCAPE); break; @@ -372,9 +372,28 @@ case VK_DIVIDE: sprintf(out,GAMEDEVICE_VK_DIVIDE); break; case VK_NUMLOCK: sprintf(out,GAMEDEVICE_VK_NUMLOCK); break; case VK_SCROLL: sprintf(out,GAMEDEVICE_VK_SCROLL); break; - - - + case 189: sprintf(out,"-"); break; + case 187: sprintf(out,"="); break; + case 16: sprintf(out,"Shift"); break; + case 17: sprintf(out,"Control"); break; + case 18: sprintf(out,"Alt"); break; + case 219: sprintf(out,"["); break; + case 221: sprintf(out,"]"); break; + case 220: sprintf(out,"\\"); break; + case 191: sprintf(out,"/"); break; + case 192: sprintf(out,"`"); break; + case 112: sprintf(out,"F1"); break; + case 113: sprintf(out,"F2"); break; + case 114: sprintf(out,"F3"); break; + case 115: sprintf(out,"F4"); break; + case 116: sprintf(out,"F5"); break; + case 117: sprintf(out,"F6"); break; + case 118: sprintf(out,"F7"); break; + case 119: sprintf(out,"F8"); break; + case 120: sprintf(out,"F9"); break; + case 121: sprintf(out,"F10"); break; + case 122: sprintf(out,"F11"); break; + case 123: sprintf(out,"F12"); break; } return ; @@ -382,7 +401,7 @@ } -COLORREF CheckKey( WORD Key) +COLORREF CheckKey( WORD Key, int conflictMinHitNum) { COLORREF red,blue,white; red =RGB(255,0,0); @@ -407,11 +426,12 @@ int Found = 0; for( int J = 0; J != 5; J++) { +// if( J == OldJoypad) + if(!Joypad[J].Enabled) + { continue; } - - - //if( J == OldJoypad) - //{ continue; } + if( Key == 0 || Key == 27) // don't complain about multiple keys being set to 'disabled' + { continue; } if( Key == Joypad[J].Left) { Found ++; } @@ -450,7 +470,7 @@ - if( Found > 1) + if( Found > conflictMinHitNum) { return blue; } @@ -479,6 +499,28 @@ RegisterClassEx(&wc); } +void InitKeyCustomControl() +{ + + WNDCLASSEX wc; + + wc.cbSize = sizeof(wc); + wc.lpszClassName = szHotkeysClassName; + wc.hInstance = GetModuleHandle(0); + wc.lpfnWndProc = CharInputCustomWndProc; + wc.hCursor = LoadCursor (NULL, IDC_ARROW); + wc.hIcon = 0; + wc.lpszMenuName = 0; + wc.hbrBackground = (HBRUSH)GetSysColorBrush(COLOR_BTNFACE); + wc.style = 0; + wc.cbClsExtra = 0; + wc.cbWndExtra = sizeof(InputCust *); + wc.hIconSm = 0; + + + RegisterClassEx(&wc); + +} HWND CreateInputCustom(HWND hwndParent) { HWND hwndCtrl; @@ -495,7 +537,7 @@ return hwndCtrl; } -static InputCust * GetInputCustom(HWND hwnd) +InputCust * GetInputCustom(HWND hwnd) { return (InputCust *)GetWindowLong(hwnd, 0); } @@ -562,6 +604,7 @@ COLORREF col; switch(msg) { + case WM_GETDLGCODE: return DLGC_WANTARROWS|DLGC_WANTALLKEYS|DLGC_WANTCHARS; break; @@ -656,7 +699,299 @@ icp->crForeGnd = ((~col) & 0x00ffffff); icp->crBackGnd = col; InvalidateRect(icp->hwnd, NULL, FALSE); - UpdateWindow(icp->hwnd);*/ + UpdateWindow(icp->hwnd);*/ + break; + } + + case WM_TIMER: + FunkyJoyStickTimer(); + break; + case WM_LBUTTONDOWN: + SetFocus(hwnd); + break; + case WM_ENABLE: + COLORREF col; + if(wParam) + { + col = RGB( 255,255,255); + icp->crForeGnd = ((~col) & 0x00ffffff); + icp->crBackGnd = col; + } + else + { + col = RGB( 192,192,192); + icp->crForeGnd = ((~col) & 0x00ffffff); + icp->crBackGnd = col; + } + InvalidateRect(icp->hwnd, NULL, FALSE); + UpdateWindow(icp->hwnd); + return true; + default: + break; + } + + return DefWindowProc(hwnd, msg, wParam, lParam); +} + +static bool keyPressLock = false; + +static LRESULT CALLBACK CharInputCustomWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + // retrieve the custom structure POINTER for THIS window + InputCust *icp = GetInputCustom(hwnd); + HWND pappy = (HWND__ *)GetWindowLongPtr(hwnd,GWL_HWNDPARENT); + funky= hwnd; + + char temp[100]; + COLORREF col; + switch(msg) + { + + case WM_GETDLGCODE: + return DLGC_WANTARROWS|DLGC_WANTALLKEYS|DLGC_WANTCHARS; + break; + + + case WM_NCCREATE: + + // Allocate a new CustCtrl structure for this window. + icp = (InputCust *) malloc( sizeof(InputCust) ); + + // Failed to allocate, stop window creation. + if(icp == NULL) return FALSE; + + // Initialize the CustCtrl structure. + icp->hwnd = hwnd; + icp->crForeGnd = GetSysColor(COLOR_WINDOWTEXT); + icp->crBackGnd = GetSysColor(COLOR_WINDOW); + icp->hFont = (HFONT__ *) GetStockObject(DEFAULT_GUI_FONT); + + // Assign the window text specified in the call to CreateWindow. + SetWindowText(hwnd, ((CREATESTRUCT *)lParam)->lpszName); + + // Attach custom structure to this window. + SetInputCustom(hwnd, icp); + + InvalidateRect(icp->hwnd, NULL, FALSE); + UpdateWindow(icp->hwnd); + + keyPressLock = false; + + // Continue with window creation. + return TRUE; + + // Clean up when the window is destroyed. + case WM_NCDESTROY: + free(icp); + break; + case WM_PAINT: + return InputCustom_OnPaint(icp,wParam,lParam); + break; + case WM_ERASEBKGND: + return 1; +/* + case WM_KEYUP: + { + int count = 0; + for(int i=0;i<256;i++) + if(GetAsyncKeyState(i)) + count++; + + if(count < 2) + { + int p = count; + } + if(count < 1) + { + int p = count; + } + + TranslateKey(wParam,temp); + col = CheckKey(wParam); + + icp->crForeGnd = ((~col) & 0x00ffffff); + icp->crBackGnd = col; + SetWindowText(hwnd,temp); + InvalidateRect(icp->hwnd, NULL, FALSE); + UpdateWindow(icp->hwnd); + SendMessage(pappy,WM_USER+43,wParam,(LPARAM)hwnd); + } + break; +*/ + case WM_SYSKEYDOWN: + case WM_KEYDOWN: + + { + int count = 0; + for(int i=2;i<256;i++) + { + if(i >= VK_LSHIFT && i <= VK_RMENU) + continue; + if(GetAsyncKeyState(i)) + count++; + } + + if(count <= 1) + { + keyPressLock = false; + } + } + + // no break + + case WM_USER+45: +// case WM_CHAR: + { + + if(wParam == VK_SHIFT || wParam == VK_MENU || wParam == VK_CONTROL) + break; + + if(wParam == VK_ESCAPE) + { + TranslateKey(wParam,temp); + } + else + { + char * temp2 = temp; + + sprintf(temp2, ""); + if(GetAsyncKeyState(VK_CONTROL)) + sprintf(temp2,"Ctrl + "), temp2 += strlen("Ctrl + "); + if(GetAsyncKeyState(VK_MENU)) + sprintf(temp2,"Alt + "), temp2 += strlen("Alt + "); + if(GetAsyncKeyState(VK_SHIFT)) + sprintf(temp2,"Shift + "), temp2 += strlen("Shift + "); + + TranslateKey(wParam,temp2); + } + + col = CheckKey(wParam,0); + if(col == RGB(255,0,0)) // un-redify + col = RGB(255,255,255); + + icp->crForeGnd = ((~col) & 0x00ffffff); + icp->crBackGnd = col; + SetWindowText(hwnd,temp); + InvalidateRect(icp->hwnd, NULL, FALSE); + UpdateWindow(icp->hwnd); + SendMessage(pappy,WM_USER+43,wParam,(LPARAM)hwnd); + + keyPressLock = true; + + } + break; + case WM_SYSKEYUP: + case WM_KEYUP: + if(!keyPressLock) + { + int count = 0; + for(int i=2;i<256;i++) + { + if(i >= VK_LSHIFT && i <= VK_RMENU) + continue; + if(GetAsyncKeyState(i)) + count++; + } + + if(count <= 1) + { + if(wParam == VK_SHIFT || wParam == VK_MENU || wParam == VK_CONTROL) + { + if(wParam == VK_SHIFT) + { + sprintf(temp, "Shift"); + } + if(wParam == VK_MENU) + { + sprintf(temp, "Alt"); + } + if(wParam == VK_CONTROL) + { + sprintf(temp, "Control"); + } + col = CheckKey(wParam,0); + if(col == RGB(255,0,0)) // un-redify + col = RGB(255,255,255); + if(col == RGB(255,255,255)) // tint green + col = RGB(192,255,192); + + icp->crForeGnd = ((~col) & 0x00ffffff); + icp->crBackGnd = col; + SetWindowText(hwnd,temp); + InvalidateRect(icp->hwnd, NULL, FALSE); + UpdateWindow(icp->hwnd); + SendMessage(pappy,WM_USER+43,wParam,(LPARAM)hwnd); + } + } + } + break; + case WM_USER+44: + + { + if(wParam == VK_SHIFT) + sprintf(temp, "Shift"); + else if(wParam == VK_MENU) + sprintf(temp, "Alt"); + else if(wParam == VK_CONTROL) + sprintf(temp, "Control"); + else if(wParam == VK_ESCAPE || wParam == 0) + TranslateKey(wParam,temp); + else + { + + char * temp2 = temp; + + sprintf(temp2, ""); + if(lParam & CUSTKEY_CTRL_MASK) + sprintf(temp2,"Ctrl + "), temp2 += strlen("Ctrl + "); + if(lParam & CUSTKEY_ALT_MASK) + sprintf(temp2,"Alt + "), temp2 += strlen("Alt + "); + if(lParam & CUSTKEY_SHIFT_MASK) + sprintf(temp2,"Shift + "), temp2 += strlen("Shift + "); + + TranslateKey(wParam,temp2); + } + + if(IsWindowEnabled(hwnd)) + { + col = CheckKey(wParam,0); + if(col == RGB(255,0,0)) // un-redify + col = RGB(255,255,255); + } + else + { + col = RGB( 192,192,192); + } + icp->crForeGnd = ((~col) & 0x00ffffff); + icp->crBackGnd = col; + SetWindowText(hwnd,temp); + InvalidateRect(icp->hwnd, NULL, FALSE); + UpdateWindow(icp->hwnd); + } + break; + + case WM_SETFOCUS: + { + col = RGB( 0,255,0); + icp->crForeGnd = ((~col) & 0x00ffffff); + icp->crBackGnd = col; + InvalidateRect(icp->hwnd, NULL, FALSE); + UpdateWindow(icp->hwnd); + tid = wParam; + + + SetTimer(hwnd,tid,125,NULL); + + + break; + } + case WM_KILLFOCUS: + { + /*col = RGB( 255,255,255); + icp->crForeGnd = ((~col) & 0x00ffffff); + icp->crBackGnd = col; + InvalidateRect(icp->hwnd, NULL, FALSE); + UpdateWindow(icp->hwnd);*/ break; } @@ -689,3 +1024,4 @@ return DefWindowProc(hwnd, msg, wParam, lParam); } + diff -NaHudr snes9x-1.43-src/InputCustom.h snes9x-improvement7-src-dehacked/InputCustom.h --- snes9x-1.43-src/InputCustom.h 2005-04-09 00:59:56.000000000 +0300 +++ snes9x-improvement7-src-dehacked/InputCustom.h 2005-04-09 00:59:23.000000000 +0300 @@ -7,6 +7,19 @@ void InitInputCustomControl(void); HWND CreateInputCustom(HWND hwndParent); +void InitKeyCustomControl(void); +HWND CreateKeyCustom(HWND hwndParent); + +typedef struct +{ + COLORREF crForeGnd; // Foreground text colour + COLORREF crBackGnd; // Background text colour + HFONT hFont; // The font + HWND hwnd; // The control's window handle +} InputCust; +COLORREF CheckKey( WORD Key, int conflictMinHitNum = 1); +InputCust * GetInputCustom(HWND hwnd); + #ifdef __cplusplus } diff -NaHudr snes9x-1.43-src/Valid.Ext snes9x-improvement7-src-dehacked/Valid.Ext --- snes9x-1.43-src/Valid.Ext 1970-01-01 02:00:00.000000000 +0200 +++ snes9x-improvement7-src-dehacked/Valid.Ext 2005-03-20 23:46:36.000000000 +0200 @@ -0,0 +1,23 @@ +N +smcN +zipY +gzY +swcN +figN +058N +078N +japN +usaN +048N +eurN +sfcN +1N +mgdN +ufoN +binN +gd3N +mghN +gd7N +ausN +dx2N +aN \ No newline at end of file diff -NaHudr snes9x-1.43-src/directx.cpp snes9x-improvement7-src-dehacked/directx.cpp --- snes9x-1.43-src/directx.cpp 2005-04-09 00:59:56.000000000 +0300 +++ snes9x-improvement7-src-dehacked/directx.cpp 2005-04-09 00:59:23.000000000 +0300 @@ -192,32 +192,36 @@ return (false); } } - dErr = lpDS->SetCooperativeLevel (GUI.hWnd, DSSCL_PRIORITY); + dErr = lpDS->SetCooperativeLevel (GUI.hWnd, DSSCL_PRIORITY | DSSCL_EXCLUSIVE); if (dErr != DS_OK) { - if (lpDS -> SetCooperativeLevel (GUI.hWnd, DSSCL_NORMAL) != DS_OK) - { - lpDS -> Release(); - lpDS = NULL; + dErr = lpDS->SetCooperativeLevel (GUI.hWnd, DSSCL_PRIORITY); + if (dErr != DS_OK) + { + if (lpDS -> SetCooperativeLevel (GUI.hWnd, DSSCL_NORMAL) != DS_OK) + { + lpDS -> Release(); + lpDS = NULL; - DSAvailable = false; - } - if (DSAvailable) - MessageBox (GUI.hWnd, TEXT("\ -Unable to set DirectSound's priority cooperative level.\n\ -Another application is dicating the sound playback rate,\n\ -sample size and mono/stereo setting."), - TEXT("Snes9X - Unable to Set DirectSound priority"), - MB_OK | MB_ICONWARNING); - else - MessageBox (GUI.hWnd, TEXT("\ -Unable to set any DirectSound cooperative level. You will\n\ -not be able to hear any sound effects or music while playing.\n\n\ -It is usually caused by another application that has already\n\ -opened DirectSound in exclusive mode."), - TEXT("Snes9X - Unable to DirectSound"), - MB_OK | MB_ICONWARNING); - } + DSAvailable = false; + } + if (DSAvailable) + MessageBox (GUI.hWnd, TEXT("\ + Unable to set DirectSound's priority cooperative level.\n\ + Another application is dicating the sound playback rate,\n\ + sample size and mono/stereo setting."), + TEXT("Snes9X - Unable to Set DirectSound priority"), + MB_OK | MB_ICONWARNING); + else + MessageBox (GUI.hWnd, TEXT("\ + Unable to set any DirectSound cooperative level. You will\n\ + not be able to hear any sound effects or music while playing.\n\n\ + It is usually caused by another application that has already\n\ + opened DirectSound in exclusive mode."), + TEXT("Snes9X - Unable to DirectSound"), + MB_OK | MB_ICONWARNING); + } + } #ifdef FMOD_SUPPORT } #endif @@ -512,9 +516,10 @@ #endif F_CALLBACKAPI FMODStreamCallback (FSOUND_STREAM *stream, void *buff, int len, void *param) { - bool8 mute = DirectX.IdleCount >= GUI.PausedFramesBeforeMutingSound; + bool8 mute = DirectX.IdleCount >= GUI.PausedFramesBeforeMutingSound; if (mute || Settings.ForcedPause || - Settings.Paused || Settings.StopEmulation) + (Settings.Paused && (Settings.FAMute || !Settings.FrameAdvance && !(DirectX.IdleCount < 8))) // gives frame advance sound + || Settings.StopEmulation || GUI.AVIOut) { ZeroMemory (buff, len); } diff -NaHudr snes9x-1.43-src/faqs.txt snes9x-improvement7-src-dehacked/faqs.txt --- snes9x-1.43-src/faqs.txt 2005-04-09 00:59:56.000000000 +0300 +++ snes9x-improvement7-src-dehacked/faqs.txt 2005-04-09 00:59:23.000000000 +0300 @@ -1,35 +1,31 @@ -Le FAQ De Snes9x +Le FAQ de Snes9x Wassail, This is the much anticipated and highly informative Frequently Asked Questions article, -which contains, believe it or not, Frequently Asked Questions! This time around we have -also included Frequently Answered Answers! I shall be your host on this gleeful sojourn -through a text document where anything can, but probably won't, happen. On our first -section of this mystical journey you shall see various frequently asked questions, as -well as their answers! +which contains, believe it or not, Frequently Asked Questions as well as Frequently +Answered Answers! I shall be your host on this gleeful sojourn through a text document, +where anything can, but probably won't, happen. -Amendments: By popular demand the FAQ is now sorted in some form of coherent order, and has little liney things, which are supposedly neat. -The majority of the things in this FAQ are based off the Windows port of Snes9x. While some -of the information is relevant to most, or all, ports, no gaurantees are made that what is -said will be accurate for all versions. Note that there is a section for the various official -ports in chapter 4. - +On our first section of this mystical journey you shall see various frequently asked +questions, as well as their answers! ________________________________________________________________________ Chapter 1: - Emulator Specific Questions - Or - It's Not The Size Of An Emulator That Counts; It's How You Use It. + Or +It's Not the Size of an Emulator That Counts; It's How You Use it. Q: When is the next version (of Snes9x) coming out? A: Chances are it will be coming out when enough changes have been made to suitably -make a release. You can generally guesstimate the release date by paying attention to -the Developers forum at snes9x.com. +make a release. You can generally guesstimate the release date by paying attention to the +Developers forum at snes9x.com. + +Q: Why doesn't Snes9x have feature X? + A: There is no feature X, it is only an illusion... A trick of the mind, if you will. Q: Why do my games run too fast? A: Through proper nutrition and training an increase in abilities is often found. It is @@ -37,199 +33,128 @@ limit. Generally not allowing them to run will cause atrophy, making them somewhat slower. Seriously though, try using the + and/or - keys to adjust the emulated speed. If you are feeling lucky, you might also wish to try holding down Shift, and pressing the + -and/or - keys. In the display settings make sure the "Use Frame Limiter" and "Automatic -Frame Skipping" boxes are checked. +and/or - keys. Q: Why doesn't Snes9x support transparencies? - A: It does! Make sure the "Transparency" box is checked in the settings menu. + A: It does!!!! Q: I recently purchased a game pad controller. Will it work on Snes9x? - A: More than likely yes. Any USB compatable controller will work. Generally this -means any controller made within the past 7 years or so. If you are having problems -consider updating drivers and recalibrating your controller. - -Q: In Snes9x my game pad is having trouble inputting any diagonal directions on the D-Pad. -How can I fix this? - A: While setting up your controller functions in Snes9x, make sure you do not setup the -diagonal buttons; leave them blank. Ye olde Snes only had 4 buttons on the D-Pad: Up, down, -left and right. By pressing two directions you would go in the appropriate diagonal direction -(game specific, of course). If you have accidently set a value in the diagonal boxes already -either select them one at a time and hit "Escape", or press the "toggle diagonals" button. - -Q: Soooooooo... Why the heck do you have diagonals in the controller setup anyway? - A: Simple really. Some people enjoy using the keyboard, or have no other choice. -In the next chapter the topic of keyboard input limitations will be addressed. Being able to -input the diagonals can help hinder that occurrence. It can also make keyboard usage a bit easier... -assigning the directional controls to the number pad for instance. - -Q: I gotsid me a translation patch (.ips) for my game. Now what do I do so I can use it? - A: Make sure both your ROM image and .ips file are in the same folder. Finally make sure -they have the exact same name (minus file extensions, of course). As an example "Pie.smc" -should have "Pie.ips" and "Super_Pie3(E).smc" should have "Super_Pie3(E).ips". Now open up -Snes9x, load your ROM and voila! It should be noted that IPS patches are almost always designed -for use with a specific dump of a ROM. If you are positive you are using it correctly, but it -still does not work, consider trying a ROM from a different source. - -Q: I had a bad checksummed game that didn't work so I adjusted the header, but it still -doesn't work :( Why? - A: It should be noted that while it is possible to plop a ROM into Snestool, or several other -programs, and adjust the header size to be the same as a proper "good checksum" ROM,this merely -mimics the appearance of a good ROM. Any problems still found within its evil will remain. -One could compare it to covering up a circumorbital haematoma with a paper bag. + A: More than likely yes. Some Gravis Game pads seem to have more trouble than most +however. Consider updating drivers and recalibrating your controller if it does not work. +Q: Why can't I run forward while jumping and shooting? + A: Lack of cognitive exercise can often affect brain patterns, resulting in an inability to +multitask. An example would be an inability to rub ones tummy whilst patting ones +head. Occasionally the cognitive abilities can atrophy so much that you are unable to run +and jump whilst carrying firearms. Alternatively, all keyboards can only input so much +data to the CPU at a time. Depending on the brand and placement of the keys, this +number can vary, however three keys does seem to be a standard limit. There are +multiple solutions to this problem. Obtaining a game pad of some form is the most +highly suggested method, as playing the Snes with a keyboard was not one of the greatest +videogame ideas of the last century. You can also try to reassign buttons to keys that +allow more input; Ctrl and Alt for example. The final method is to assign multiple tasks +to a single key, though this can be frustrating in near-all instances. As an example you +could configure the spacebar to jump AND shoot, however the drawback is that you +would not be able to jump without shooting, or shoot without jumping. ________________________________________________________________________ Chapter 2: - Game Specific Questions - Or - How I learned To Stop Worrying And Love The ROM - -Q: What's da dilly-o wit' dem Graphics packs, foo? - A: Some games contain processors that are difficult to completely emulate due to their -compression schemes. Through various means something called a "graphics pack" has been -created that will allow you to view the graphics in these games despite the compression. -Most graphic packs are rather large in file size, since they contain all the uncompressed -graphics in a game. The games that require graphics packs are: + Or +How I learned To Stop Worrying and Love the ROM -Far East of Eden Zero (J) -Far East of Eden Zero: Shounen Jump No Shou (J) -Momatarou Dentetsu Happy (J) -Super Power League 4 (J) +Q: Why doesn't Star Ocean/SFA 2 work? + A: These games contained a rare processor with a rather nasty compression scheme, +making it hard to properly crack. It is possible to play these on Snes9x, though you need +to obtain the aptly named "graphics packs" which contain the uncompressed graphics of +the two games. After you have obtained these you can fiddle with setting them up, which +is explained in the read me, and then you too can play your emulated copy of the games +you no doubt own. -After many hours of work one of the two aformentioned chips has been emulated more efficiently. -SNES games using the "S-DD1" chip can now run without a graphics pack. While there are some pros -and cons to either choice, I recommend not using a graphics pack as they are large and may not -be complete. It can be much slower without one, however, should yOu feel speed is more important -than accuracy. The exact ROMs that can now run without graphics packs are: +Q: Heeeeeey, Star Ocean is working, and I don't have this graphics pack thing you are +talking about. + A: Yes, last time I mentioned it contained a processor that was difficult to completely +emulate due to its compression scheme. Through vast work our crack team has bested the +little bugger and now you can reap the benefits. What this means is that games with said +processing unit, the s-dd1, can now run without graphics packs. You can still use the +graphics packs if you would like to, and it may increase speed and playability of said +games. Snes9x will, by default, run these games without using the graphic packs but you +can change this in the options menu. The exact ROMs that can now run without graphics +packs are Star Ocean (J), Street Fighter Alpha 2 (E), Street Fighter Alpha 2 (U) and Street +Fighter Zero 2 (J) -Star Ocean (J) -Street Fighter Alpha 2 (E) -Street Fighter Alpha 2 (U) -Street Fighter Zero 2 (J) +Q: Why doesn't MegaManX2 and/or 3 work? + A: With the present state of economy it is often hard for valuable tradesmen to find +long-standing jobs. As such, it is possible that it proves even more difficult for the +aforementioned games. More than likely it does work, however depending on your +operating system, it may not yet be implemented. If this is the case, upgrade your OS or, +alternatively, bribe your port maintainer to implement the code. Q: Why doesn't game X work? - A: There are three possible answers to this question, depending on the scenario. Answer -one is that it does work, but your ROM dump is incorrect (this MAY be fixed by reattaching -your cartridge to your copier and redumping). Answer two is that we have found a solution -to the problem, but have not yet implemented a fix. Answer three, a subsidiary of answer two, -is that we do NOT know what is wrong with it, and as such have not yet implemented a fix. + A: There are three possible answers to this question, depending on the scenario. Answer +one is that it does work, but your ROM dump is incorrect (this MAY be fixed by re +attaching your cartridge to your copier and redumping). Answer two is that we have +found a solution to the problem, but have not yet implemented a fix. Answer three, a +subsidiary of answer two, is that we do NOT know what is wrong with it, and as such +have not yet implemented a fix. -Q: Why doesn't Snes9x display SD3/Secret of Mana/other hi-res games properly? - A: Some games had resolution changes at certain parts during the game that affect the pixel -size of what is shown on screen. Due to the way this is handled some games require specific -options to keep "right". First, make sure that Hi-res support is selected in the option menus, -That option can slow down performance on slower machines, which is why it may be off by default. -Second, it is recommended your filter option is set to "normal," as oppossed to "none." Some of -the other filtering modes may work without problems, but I have not tested them to be sure. -Note: In the event the "hi-res" option is greyed out, make sure your display resolution is at -least 512 x 480. - -Q: Why can't I press many buttons at once? Especially in that Chrono Trigger game. - A: Most standard keyboards (There are a few exceptions, though only a few) can only -output so much data to the compter at a time. As such your computer is often unable to -carry-out the instructions you have given it. There are solutions abound, of course, -and here they are now: Lovely recommendation one is to rearrange the keymapping in Snes9x -so that all the necessary buttons are on a single keystroke... That way you can press 1 key -and have it do all the actions. The draw back to this is that if you set "a" to jump -and shoot you will be unable to jump without shooting, or shoot without jumping, until -you change it back. The super sexy recommendation number 2 is to set the ctrl and alt -keys to some of the necessary buttons. The draw back to this is that often these buttons -can cause problems if used in tandum with other keys, due to Windows shortcuts. You may, -for instance, be using alt to jump and while in midair hit f4 to load a savestate... -That will close the program, which is bad. Finally, and the method I personally recommend, -is to purchase a gamepad. The draw backs to this are that it requires time and money. +Q: Why doesn't Snes9x display SD3/Secret of Mana/other hi-res game? + A: To answer this one must first understand what hi-res games are. There are games +that used higher resolution than the Super Nintendo standard. You can easily activate the +Hi-res mode by configuring it in the settings panel. This may slow down game speed on +some lower-end computers, which is why it is an optional feature. + +Q: In some games, including Seiken Densetsu 3, the text and options screen seems +stretched and distorted. How do I stop this? + A: First, make sure you have Hi-res enabled in the display screen. Also make sure your +image filter is not set to "NONE." If you find the Hi-res checkbox is unselectable, +increase your resolution in the Snes9x display options to at least 512 x 480. Q: I'm all like "Hey, Yoshi's Island" and it's all like "error" and I'm all like "Ooooh, no Yoshi's Island" but my friend is like "Yay, Yoshi's Island." Why? A: Try selecting "mode 2" from the interleave dropdown box in the "open" menu before loading said ROM Image. - ________________________________________________________________________ Chapter 3: All About Netplay - Or - More Slow Than A Quadriplegic Ninja Turtle, But Only Half As Entertaining + Or +More Slow Than a Quadriplegic Ninja Turtle, But Only Half as Entertaining Q: Snes9x netplay sucks, can I make it better? - A: Yes, yes you can! Snes9x is open source so all you need to make netplay better is -advanced programming knowledge and a will to improve upon the Snes9x code. At present -time Snes9x is more for LANplay, best used in a small network of local computers. I -recommend Zsnes (www.zsnes.com) and zbattle (www.zbattle.net) for your random chaotic -netplay needs. + A: Yes you can! Snes9x is open source so all you need to make netplay better is +advanced programming knowledge and a will to improve upon the Snes9x code.At +present time Snes9x is more for LANplay, best used in a small network of local +computers. I recommend Zsnes (www.zsnes.com) and zbattle (www.zbattle.net) for your +random chaotic netplay needs. Q: I am using a Windows port of Snes9x. My friend is using a Mac. Can we netplay? A: Yes... Just not with each other. Snes9x, at this time, does not support cross-platform netplay. Or good netplay. -Q: Yea who don know dat but when i do what do afta y find som1 - (now that I have someone to play with, what do I do?) - A: An excellent... ...question. I couldn't have worded it better myself. Despite my -sarcasm however I must cringe at the fact I can actually understand it enough to answer. -The answer depends on if you are acting as the server/host or the client. If you are the -host you must first find your IP Address and give it to the person you intend to play online -with. Next open Snes9x, load the ROM you wish to netplay, and then from the netplay menu, -select "Act as server." Then you wait until the client connects... Now, if you are the client, -first receive the IP address from the host, open Snes9x, and open the ROM you wish to netplay. -Select "connect to server" from the netplay menu, and fill out the necessary information. -Server address should contain the IP Address of the host. After that is done click "Connect." -Assuming both parties have done their role correctly, a netplay match should soon start. - -Q: How do I chat with my partner during netplay? - A: I personally recommend yelling really loudly, but the telephone is also a somewhat -plausible answer I suppose. Seriously. - -Q: Can I play with more than 2 players? - A: Indeed you can. Basically the same steps to starting a multiplayer game apply, however -there are a few important differences. Obviously the game you wish to multiplay in must support -three or more players. I may add a list of these games at a later date. Now then, make sure that -you, as well as everyone intending to play, has selected the "enable multitap 5" option from the -input menu. If you don't do this it just won't work. - - ________________________________________________________________________ Chapter 4: -Mac, And Linux Specific Questions - Or - Don't Buy Into The Paneful Propaganda +Mac, Linux & Dreamcast Specific Questions + Or +Don't Buy into the Paneful Propaganda Q: My buddy, whose soul has been lost to M$, says he can run games like Doom and Starfox2, but Snes9x on my Mac has all sorts of problems when running them. What I do? - A: The PC version of Snes9x partially uses x86 asm code in place of the C code used on -the Mac, which might cause a difference in compatibility. As of now I believe both ports can -all run the same things. If you find one that runs on the PC version, but not the MAC please -let us know. - -Q: On my Mac the damnable games refuse to do anything, even though I'm pressing keys. Why? - A: This problem is caused by a bug found within OSX 10.2.x. In this bug the authentication -dialog turns off GetKeys() (the function that reads keyboard state) when a user enters his -password, and doesn't turn it back on. This bug has been fixed in 10.3.x. - -Q: On my Mac everything is fine when I play the game, however the next time I play, my save data -is not there. Why? - A: First, check to see if the .SRM file is still on your hard drive. If it is then make sure -you have set where Snes9x checks for files in the "file" tab, in the preferences section. If the -.SRM cannot be found then most likely you are trying to save files into a locked volume, such as -a cd drive, or read-only folder. This will fail. Check the file saving preferences and adjust where -the files are saving. - -Q: Can I change the keybindings on Linux? - A: From what I've been told the keymap is hardcoded to the source, making changing them rather -difficult. The only way to change them, for now, would be to edit and recompile the source, which -from what I've been told isn't something everyone can do. + A: The aforementioned games, as well as a few others, use a special chip called the +Super FX. To emulate this chip the Windows port uses an i386 assembler core, while the +Mac uses a c++ core. Full support for the Super FX chip has not yet been implemented +due to the differences in coding. - ________________________________________________________________________ Chapter 5: Miscellaneous Questions - Or - Q-Bert Is My Only Friend + Or +Q-Bert Is My Only Friend Q: Is it legal?! A: This has been asked time and again, and the answer is yes. Developing, @@ -271,7 +196,7 @@ and when this happened so that we can take measures to stop it from happening again. While the fact we aren't making money from the program in no way bothers us (It is freeware after all), that some grubby bastards are does. - + Q: So err, where exactly do I contact y'all, eh? A: The most convenient way to contact us would be via www.snes9x.com. There is a forum that is checked at least 12 times a day by regulars, and at least a few of us can @@ -280,25 +205,7 @@ before posting, as things already answered many a time will probably result in random insults or heavy sarcasm. - -________________________________________________________________________ - -Chapter 6: -The Conclusion - Or - That Block Of Words And Various Punctuation Symbols At The End Of The Document That Isn't - Totally Dissimilar To Something That May, Or May Not, Be Considered A Conclusion Given The - Contents Held Within The Paragraph(s) It Contains - -I hope you enjoyed this jaunt through the magical land of FAQs. Much has been said but, -obviously, there is still room to grow and expand. Should you feel you have a question worthy -of this vast tome of knowledge please leave it in the "board feedback" section of the Snes9x Forum. -I have been your host and shall return again next time with an even greater FAQ. - -I would like to take the time to thank the vast plethora of people who have helped me conjur this -machination of goodness. However, in the annals of time I have probably forgotten many of those -who have given me advice, defintions, technologial information and cookies. It would be unfair -to only mention the small portion of names I remember from an excessivley long and ever-expanding -list. As such, I won't. Toodles. - -Knowledge is power; Learn it well +Q: Is Maria S. Kendora available? + A: No, at present time she is happily involved with a very nice man, and as such is not +accepting proposals unless you are rich, handsome AND live in the southern peninsula of +France, next to Andorra. diff -NaHudr snes9x-1.43-src/how2compile.txt snes9x-improvement7-src-dehacked/how2compile.txt --- snes9x-1.43-src/how2compile.txt 2005-04-09 00:59:56.000000000 +0300 +++ snes9x-improvement7-src-dehacked/how2compile.txt 2005-04-09 00:59:23.000000000 +0300 @@ -1,7 +1,10 @@ Various software and tools are required to compile Snes9x on Windows: -- Microsoft Visual C++ 6.0 SP5 with the latest Platform SDK to compile all the - C++ source code.. +- Microsoft Visual C++ 6.0 to compile all the C++ source code except for some + parts of the GUI. + +- Borland C++ Builder v3 or V4 to compile the remaining GUI items. If you don't + want to update those three GUI portions then it is not required. - gcc(optional) - I use version 2.95.2. Used to assemble various CPU i386 asm cores that I wrote. Available as part of Cygwin - a UNIX-like environment diff -NaHudr snes9x-1.43-src/info.txt snes9x-improvement7-src-dehacked/info.txt --- snes9x-1.43-src/info.txt 1970-01-01 02:00:00.000000000 +0200 +++ snes9x-improvement7-src-dehacked/info.txt 2005-04-09 00:59:23.000000000 +0300 @@ -0,0 +1,55 @@ +Snes9x 1.43 improvement v6 + +Newest change(s) in this version: +* Terranigma desync bug fixed (incorporated into Fake Mute option) (nitsuja) +* Added "Clear SRAM" option to recording dialog, so you can make sure you're starting from a totally clean state. (nitsuja) +* Added alternate save state system (increment/decrement/save/load current slot, as new hotkeys). (nitsuja) +* Made "save screenshot" a customizable hotkey. (nitsuja) +* Moved frame counter display to not overwrite other messages, changed messages and message timings a bit. (nitsuja) + +General: +* Made "Pause When Inactive" an option in the Settings dialog, so you can turn it off if you want Snes9x to keep playing games when it isn't the active window. If you also want sound to play while it's inactive, you can set Sound Driver to "FMOD DirectSound" in the Sound Settings menu. (nitsuja) + +Input-Related: +* Customizable hotkeys (nitsuja) +* The option to allow left+right and up+down to be pressed has been added. (nitsuja) +* Option to display pressed input buttons (credit to Bisqwit) +* Removed 1-frame lag from the input that's displayed. (nitsuja) +* Added ability to toggle a button on or lock it on autofire using modifiers or a per-controller toggle switch. Very useful for getting around the maximum limit of keys your keyboard lets you hold at once, and also for relieving you from having to hold a button for extended periods of time. +* Fixed joypad dialog and added turbo buttons (nitsuja) +* Made "fast-forward" and "show input" customizable hotkeys, so input can now be shown while playing. (nitsuja) + +Graphics-Related: +* Made black bar at bottom of game optional (nitsuja) +* Added a display option to maintain correct aspect ratio. (nitsuja) +* Enabled the GUI option to use video memory and bilinear-filter any mode, not just OpenGL + +Sound-Related: +* Gave frame advance sound (optional) (nitsuja) + +Movie-Related: +* Zelda desync bug fixed! (credit to FabianX) +* OotW/PoP2 sound desync bug fixed (Fake Mute desync workaround option) (credit to Bisqwit) +* Movie length limit fixed (credit to Bisqwit and DeHackEd) +* Movie play and record dialogs contain relevant sync-related emulator options. (nitsuja) +* An option to switch between WIP and Final timing has been added, so you can record for the version of your choice and play back either type of movie. (nitsuja) +* Incorporated important sync settings being saved into movies upon record and re-record, and loaded from them on playback. (Currently, you must click Browse... and select the movie for it to load the sync settings.) This does not interfere with official version compatibility going in either direction, at least not with the 1.43 Final or WIP. (nitsuja) +* Changed it so left+right does not even get recorded into the movie if the left+right option is not enabled. (Snes9x used to always record both directions into the movie even when it ignored one of them.) (nitsuja) +* Changed default to read-only for playing movies, since more people seem to prefer that being the default. (nitsuja) +* The ROM's CRC32 and name are now stored in recorded movie files, and displayed along with your current ROM upon loading. Old movies that are modified using this version will have the new information inserted into the movie using the current ROM. Backward compatibility is still maintained. (nitsuja) + +Movie Compatibility -- Because there is now an option to switch between timing modes: +* This version can play all movies made with either the Final or the WIP, with the right settings on. +* This version can make movies for either the Final or the WIP, whichever is desired. + +Known Issues / things to watch out for: +* If you do not record a movie with the WIP1 timing, you may get occasional desyncs while recording, because this is how the official Snes9x 1.43 Final version behaves. +* Some games (such as Terranigma) desync when you play them at too high a speed (such as with fast-forward) due to unknown reasons. +* Some games (such as Super Bomberman 2 and Mortal Kombat II) require Volume Height Envelope Reading to be OFF to record reliably. +* Some games (such as Nosferatu) still rely on specific sound settings (such as a certain KHz rate, etc.) to play back reliably. +* Movies will still desync if you play them without letting the game emulate for at least 10 seconds to "warm up" first. +* Turning on Left+Right/Up+Down may cause movies that were made without this option to desync. +* If you turn on Left+Right/Up+Down, no *official* version of the Snes9x emulator will be able to play back the movie that's generated. +* If a movie of a game that was affected by the sound desync bug (such as Out of this World) is recorded with this emulator, it can also be played back in this version, but if you want to play it back with an official version you'll have to set the sound playback rate to when playing it. +* The input that is displayed is not updated between frames; you have to advance at least one frame to see the new input you're entering be displayed. +* Key conflict catching is not very comprehensive and can also catches things that are no longer conflicts (in which case, just ignore the color). diff -NaHudr snes9x-1.43-src/language.h snes9x-improvement7-src-dehacked/language.h --- snes9x-1.43-src/language.h 2005-04-09 00:59:56.000000000 +0300 +++ snes9x-improvement7-src-dehacked/language.h 2005-04-09 00:59:23.000000000 +0300 @@ -108,7 +108,7 @@ #define APP_NAME "Snes9x" -/* possible global strings */ +// possible global strings #define SNES9X_INFO "Snes9x: Information" #define SNES9X_WARN "Snes9x: WARNING!" #define SNES9X_DXS "Snes9X: DirectSound" @@ -117,12 +117,12 @@ #define BUTTON_OK "&OK" #define BUTTON_CANCEL "&Cancel" -/* Gamepad Dialog Strings */ +// Gamepad Dialog Strings #define INPUTCONFIG_TITLE "Input Configuration" -#define INPUTCONFIG_JPTOGGLE "Enable" +#define INPUTCONFIG_JPTOGGLE "Enabled" #define INPUTCONFIG_DIAGTOGGLE "Toggle Diagonals" -/* #define INPUTCONFIG_OK "&OK" */ -/* #define INPUTCONFIG_CANCEL "&Cancel" */ +//#define INPUTCONFIG_OK "&OK" +//#define INPUTCONFIG_CANCEL "&Cancel" #define INPUTCONFIG_JPCOMBO "Joypad #%d" #define INPUTCONFIG_LABEL_UP "Up" #define INPUTCONFIG_LABEL_DOWN "Down" @@ -138,11 +138,11 @@ #define INPUTCONFIG_LABEL_SELECT "Select" #define INPUTCONFIG_LABEL_UPLEFT "Up Left" #define INPUTCONFIG_LABEL_UPRIGHT "Up Right" -#define INPUTCONFIG_LABEL_DOWNRIGHT "Down Right" -#define INPUTCONFIG_LABEL_DOWNLEFT "Down Left" -#define INPUTCONFIG_LABEL_BLUE "Blue means the current key/button is already mapped; Red means it's a Snes9x/Windows reserved key." +#define INPUTCONFIG_LABEL_DOWNRIGHT "Dn Right" +#define INPUTCONFIG_LABEL_DOWNLEFT "Dn Left" +#define INPUTCONFIG_LABEL_BLUE "Blue means the button is already mapped;\nRed means it's used by windows or Snes9x" -/* gaming buttons and axises */ +// gaming buttons and axises #define GAMEDEVICE_JOYNUMPREFIX "(J%d)" #define GAMEDEVICE_JOYBUTPREFIX "#[%d]" #define GAMEDEVICE_XNEG "Left" @@ -167,10 +167,10 @@ #define GAMEDEVICE_VNEG "V Down" #define GAMEDEVICE_BUTTON "Button %d" -/* gaming general */ +//gaming general #define GAMEDEVICE_DISABLED "Disabled" -/* gaming keys */ +//gaming keys #define GAMEDEVICE_KEY "#%d" #define GAMEDEVICE_NUMPADPREFIX "Numpad-%c" #define GAMEDEVICE_VK_TAB "Tab" @@ -218,13 +218,13 @@ #define GAMEDEVICE_VK_NUMLOCK "Num-lock" #define GAMEDEVICE_VK_SCROLL "Scroll-lock" -/* evil things I found in WinProc */ +//evil things I found in WinProc -#define WINPROC_TURBOMODE_ON "Turbo Mode Activated" -#define WINPROC_TURBOMODE_OFF "Turbo Mode Deactivated" -#define WINPROC_TURBOMODE_TEXT "Turbo Mode" +#define WINPROC_TURBOMODE_ON "Fast-Forward Activated" +#define WINPROC_TURBOMODE_OFF "Fast-Forward Deactivated" +#define WINPROC_TURBOMODE_TEXT "Fast-Forward" #define WINPROC_HDMA_TEXT "HDMA emulation" -#define WINPROC_BG1 "BG#1" /* Background Layers */ +#define WINPROC_BG1 "BG#1" //Background Layers #define WINPROC_BG2 "BG#2" #define WINPROC_BG3 "BG#3" #define WINPROC_BG4 "BG#4" @@ -269,20 +269,20 @@ #define WINPROC_SND_OFF "Disabling the sound CPU emulation will help to improve\nemulation speed but you will not hear any sound effects\nor music. If you later want to re-enable the sound CPU\nemulation you will need to reset your game before it will\ntake effect.\n\nAre you sure this is what you want?" #define WINPROC_SND_RESTART "You will need to reset your game or load another one\nbefore enabling the sound CPU will take effect." -/* Emulator Settings */ +//Emulator Settings #define EMUSET_TITLE "Emulation Settings" -#define EMUSET_LABEL_FREEZE "Freeze Folder Directory" +#define EMUSET_LABEL_FREEZE "Save Folder Directory" #define EMUSET_BROWSE "&Browse..." #define EMUSET_LABEL_ASRAM "Auto-Save S-RAM" #define EMUSET_LABEL_ASRAM_TEXT "seconds after last change (0 disables auto-save)" #define EMUSET_LABEL_SMAX "Skip at most" #define EMUSET_LABEL_SMAX_TEXT "frames in auto-frame rate mode" #define EMUSET_LABEL_STURBO "Skip Rendering" -#define EMUSET_LABEL_STURBO_TEXT "frames in Turbo mode" -#define EMUSET_TOGGLE_TURBO "Tab Toggles Turbo" +#define EMUSET_LABEL_STURBO_TEXT "frames in fast-forward mode" +#define EMUSET_TOGGLE_TURBO "Toggled fast-forward mode" -/* Netplay Options */ +//Netplay Options #define NPOPT_TITLE "Netplay Options" #define NPOPT_LABEL_PORTNUM "Socket Port Number" @@ -296,7 +296,7 @@ #define NPOPT_CLIENTSETTINGSBLOCK "Client Settings" #define NPOPT_SERVERSETTINGSBLOCK "Server Settings" -/* Netplay Connect */ +//Netplay Connect #define NPCON_TITLE "Connect to Server" @@ -305,7 +305,7 @@ #define NPCON_CLEARHISTORY "Clear History" -/* Movie Messages */ +//Movie Messages #define MOVIE_INFO_REPLAY "Movie replay" #define MOVIE_INFO_RECORD "Movie record" @@ -322,7 +322,15 @@ #define MOVIE_ERR_WRONG_FORMAT "File is wrong format." #define MOVIE_ERR_WRONG_VERSION "File is wrong version." +// Whoops! +#define FREEZE_INFO_WRONG_FORMAT "File not in Snes9x freeze format" +#define FREEZE_INFO_WRONG_VERSION "Incompatable Snes9x freeze file format version" +#define FREEZE_ERR_WRONG_FORMAT "File not in Snes9x freeze format" +#define FREEZE_ERR_WRONG_VERSION "Incompatable Snes9x freeze file format version" +#define FREEZE_ERR_NOT_FOUND "ROM image \"%s\" for freeze file not found" +#define FREEZE_INFO_LOADED "Loaded %s" +#define FREEZE_ERR_WRONG_ROM_NAME "Current loaded ROM image doesn't match that required by freeze-game file." -/* AVI Messages */ +// AVI Messages #define AVI_CONFIGURATION_CHANGED "AVI recording stopped (configuration settings changed)." diff -NaHudr snes9x-1.43-src/offsets.h snes9x-improvement7-src-dehacked/offsets.h --- snes9x-1.43-src/offsets.h 1970-01-01 02:00:00.000000000 +0200 +++ snes9x-improvement7-src-dehacked/offsets.h 2005-04-09 00:59:23.000000000 +0300 @@ -0,0 +1,275 @@ +#define Flags CPU + 0 +#define BranchSkip CPU + 4 +#define NMIActive CPU + 5 +#define IRQActive CPU + 6 +#define WaitingForInterrupt CPU + 7 +#define InDMA CPU + 8 +#define WhichEvent CPU + 9 +#define PCS CPU + 12 +#define PCBase CPU + 16 +#define PCAtOpcodeStart CPU + 20 +#define WaitAddress CPU + 24 +#define WaitCounter CPU + 28 +#define Cycles CPU + 32 +#define NextEvent CPU + 36 +#define V_Counter CPU + 40 +#define MemSpeed CPU + 44 +#define MemSpeedx2 CPU + 48 +#define FastROMSpeed CPU + 52 +#define AutoSaveTimer CPU + 56 +#define SRAMModified CPU + 60 +#define NMITriggerPoint CPU + 64 +#define TriedInterleavedMode2 CPU + 69 +#define BRKTriggered CPU + 68 +#define NMICycleCount CPU + 72 +#define IRQCycleCount CPU + 76 +#define PB Registers + 0 +#define DB Registers + 1 +#define PP Registers + 2 +#define PL Registers + 2 +#define PH PL + 1 +#define AA Registers + 4 +#define AL Registers + 4 +#define AH AL + 1 +#define DD Registers + 6 +#define DL Registers + 6 +#define DH DL + 1 +#define SS Registers + 8 +#define SL Registers + 8 +#define SH SL + 1 +#define XX Registers + 10 +#define XL Registers + 10 +#define XH XL + 1 +#define YY Registers + 12 +#define YL Registers + 12 +#define YH YL + 1 +#define PCR Registers + 14 +#define RAM Memory + 0 +#define ROM Memory + 4 +#define VRAM Memory + 8 +#define SRAM Memory + 12 +#define BWRAM Memory + 16 +#define FillRAM Memory + 20 +#define C4RAM Memory + 24 +#define HiROM Memory + 28 +#define LoROM Memory + 29 +#define SRAMMask Memory + 32 +#define SRAMSize Memory + 36 +#define Map Memory + 40 +#define WriteMap Memory + 16424 +#define MemorySpeed Memory + 32808 +#define BlockIsRAM Memory + 36904 +#define BlockIsROM Memory + 41000 +#define ROMFilename Memory + 53368 +#define APUPCS IAPU + 0 +#define APURAM IAPU + 4 +#define APUExecuting IAPU + 12 +#define APUDirectPage IAPU + 8 +#define APUBit IAPU + 13 +#define APUAddress IAPU + 16 +#define APUWaitAddress1 IAPU + 20 +#define APUWaitAddress2 IAPU + 24 +#define APUWaitCounter IAPU + 28 +#define APUShadowRAM IAPU + 32 +#define APUCachedSamples IAPU + 36 +#define APU_Carry IAPU + 40 +#define APU_Zero IAPU + 41 +#define APU_Overflow IAPU + 42 +#define APUTimerErrorCounter IAPU + 44 +#define NextAPUTimerPos IAPU + 48 +#define APUCycles APU + 0 +#define APUShowROM APU + 4 +#define APUFlags APU + 5 +#define APUKeyedChannels APU + 6 +#define APUOutPorts APU + 7 +#define APUDSP APU + 11 +#define APUExtraRAM APU + 139 +#define APUTimer APU + 204 +#define APUTimerTarget APU + 210 +#define APUTimerEnabled APU + 216 +#define TimerValueWritten APU + 219 +#define CPUSpeed ICPU + 0 +#define CPUOpcodes ICPU + 4 +#define _Carry ICPU + 8 +#define _Zero ICPU + 9 +#define _Negative ICPU + 10 +#define _Overflow ICPU + 11 +#define ShiftedDB ICPU + 20 +#define ShiftedPB ICPU + 16 +#define CPUExecuting ICPU + 12 +#define Scanline ICPU + 28 +#define Frame ICPU + 24 +#define APUEnabled Settings + 0 +#define Shutdown Settings + 1 +#define SoundSkipMethod Settings + 2 +#define H_Max Settings + 4 +#define HBlankStart Settings + 8 +#define CyclesPercentage Settings + 12 +#define DisableIRQ Settings + 16 +#define Paused Settings + 17 +#define PAL Settings + 31 +#define SoundSync Settings + 108 +#define SA1Enabled Settings + 82 +#define SuperFXEnabled Settings + 80 +#define UseWIPAPUTiming Settings + 117 +#define ApuP APURegisters + 0 +#define ApuYA APURegisters + 2 +#define ApuA APURegisters + 2 +#define ApuY APURegisters + 3 +#define ApuX APURegisters + 4 +#define ApuS APURegisters + 5 +#define ApuPC APURegisters + 6 +#define APUPCR APURegisters + 6 +#define BGMode PPU + 0 +#define BG3Priority PPU + 1 +#define Brightness PPU + 2 +#define GHight PPU + 4 +#define GInc PPU + 5 +#define GAddress PPU + 6 +#define GMask1 PPU + 8 +#define GFullGraphicCount PPU + 10 +#define GShift PPU + 12 +#define CGFLIP PPU + 62 +#define CGDATA PPU + 64 +#define FirstSprite PPU + 576 +#define LastSprite PPU + 577 +#define OBJ PPU + 578 +#define OAMPriorityRotation PPU + 2114 +#define OAMAddr PPU + 2116 +#define OAMFlip PPU + 2119 +#define OAMTileAddress PPU + 2120 +#define IRQVBeamPos PPU + 2122 +#define IRQHBeamPos PPU + 2124 +#define VBeamPosLatched PPU + 2126 +#define HBeamPosLatched PPU + 2128 +#define HBeamFlip PPU + 2130 +#define VBeamFlip PPU + 2131 +#define HVBeamCounterLatched PPU + 2132 +#define MatrixA PPU + 2134 +#define MatrixB PPU + 2136 +#define MatrixC PPU + 2138 +#define MatrixD PPU + 2140 +#define CentreX PPU + 2142 +#define CentreY PPU + 2144 +#define Joypad1ButtonReadPos PPU + 2146 +#define Joypad2ButtonReadPos PPU + 2147 +#define CGADD PPU + 2148 +#define FixedColourGreen PPU + 2150 +#define FixedColourRed PPU + 2149 +#define FixedColourBlue PPU + 2151 +#define SavedOAMAddr PPU + 2152 +#define ScreenHeight PPU + 2154 +#define WRAM PPU + 2156 +#define BG_Forced PPU + 2160 +#define ForcedBlanking PPU + 2161 +#define OBJThroughMain PPU + 2162 +#define OBJThroughSub PPU + 2163 +#define OBJSizeSelect PPU + 2164 +#define OBJNameBase PPU + 2166 +#define OAMReadFlip PPU + 2169 +#define OAMData PPU + 2170 +#define VTimerEnabled PPU + 2714 +#define HTimerEnabled PPU + 2715 +#define HTimerPosition PPU + 2716 +#define Mosaic PPU + 2718 +#define BGMosaic PPU + 2719 +#define Mode7HFlip PPU + 2723 +#define Mode7VFlip PPU + 2724 +#define Mode7Repeat PPU + 2725 +#define Window1Left PPU + 2726 +#define Window1Right PPU + 2727 +#define Window2Left PPU + 2728 +#define Window2Right PPU + 2729 +#define ClipWindowOverlapLogic PPU + 2736 +#define ClipWindow1Enable PPU + 2742 +#define ClipWindow2Enable PPU + 2748 +#define ClipWindow1Inside PPU + 2754 +#define ClipWindow2Inside PPU + 2760 +#define RecomputeClipWindows PPU + 2766 +#define CGFLIPRead PPU + 2767 +#define OBJNameSelect PPU + 2768 +#define Need16x8Mulitply PPU + 2770 +#define Joypad3ButtonReadPos PPU + 2771 +#define MouseSpeed PPU + 2772 +#define RangeTimeOver PPU + 2118 +#define ColorsChanged IPPU + 0 +#define HDMA IPPU + 1 +#define HDMAStarted IPPU + 2 +#define MaxBrightness IPPU + 3 +#define LatchedBlanking IPPU + 4 +#define OBJChanged IPPU + 5 +#define RenderThisFrame IPPU + 6 +#define SkippedFrames IPPU + 20 +#define FrameSkip IPPU + 24 +#define TileCache IPPU + 28 +#define TileCached IPPU + 40 +#define VRAMReadBuffer IPPU + 52 +#define Interlace IPPU + 55 +#define DoubleWidthPixels IPPU + 57 +#define RenderedScreenHeight IPPU + 60 +#define RenderedScreenWidth IPPU + 64 +#define Red IPPU + 68 +#define Green IPPU + 1092 +#define Blue IPPU + 2116 +#define XB IPPU + 3140 +#define ScreenColors IPPU + 3144 +#define PreviousLine IPPU + 3656 +#define CurrentLine IPPU + 3660 +#define Joypads IPPU + 3668 +#define SuperScope IPPU + 3688 +#define Mouse IPPU + 3692 +#define PrevMouseX IPPU + 3700 +#define PrevMouseY IPPU + 3708 +#define Clip IPPU + 3716 +#define SA1Opcodes SA1 + 0 +#define SA1_Carry SA1 + 4 +#define SA1_Zero SA1 + 5 +#define SA1_Negative SA1 + 6 +#define SA1_Overflow SA1 + 7 +#define SA1CPUExecuting SA1 + 8 +#define SA1ShiftedPB SA1 + 12 +#define SA1ShiftedDB SA1 + 16 +#define SA1Flags SA1 + 20 +#define SA1Executing SA1 + 24 +#define SA1NMIActive SA1 + 25 +#define SA1IRQActive SA1 + 26 +#define SA1WaitingForInterrupt SA1 + 27 +#define SA1PCS SA1 + 32 +#define SA1PCBase SA1 + 36 +#define SA1PCAtOpcodeStart SA1 + 44 +#define SA1WaitAddress SA1 + 48 +#define SA1WaitCounter SA1 + 52 +#define SA1WaitByteAddress1 SA1 + 56 +#define SA1WaitByteAddress2 SA1 + 60 +#define SA1BWRAM SA1 + 40 +#define SA1Map SA1 + 64 +#define SA1WriteMap SA1 + 16448 +#define SA1op1 SA1 + 32832 +#define SA1op2 SA1 + 32834 +#define SA1arithmetic_op SA1 + 32836 +#define SA1sum SA1 + 32840 +#define SA1overflow SA1 + 32848 +#define VirtualBitmapFormat SA1 + 32849 +#define SA1_in_char_dma SA1 + 32850 +#define SA1variable_bit_pos SA1 + 32851 +#define SA1PB SA1Registers + 0 +#define SA1DB SA1Registers + 1 +#define SA1PP SA1Registers + 2 +#define SA1PL SA1Registers + 2 +#define SA1PH SA1PL + 1 +#define SA1AA SA1Registers + 4 +#define SA1AL SA1Registers + 4 +#define SA1AH SA1AL + 1 +#define SA1DD SA1Registers + 6 +#define SA1DL SA1Registers + 6 +#define SA1DH SA1DL + 1 +#define SA1SS SA1Registers + 8 +#define SA1SL SA1Registers + 8 +#define SA1SH SA1SL + 1 +#define SA1XX SA1Registers + 10 +#define SA1XL SA1Registers + 10 +#define SA1XH SA1XL + 1 +#define SA1YY SA1Registers + 12 +#define SA1YL SA1Registers + 12 +#define SA1YH SA1YL + 1 +#define SA1PCR SA1Registers + 14 diff -NaHudr snes9x-1.43-src/readme.txt snes9x-improvement7-src-dehacked/readme.txt --- snes9x-1.43-src/readme.txt 2005-04-09 00:59:56.000000000 +0300 +++ snes9x-improvement7-src-dehacked/readme.txt 2005-04-09 00:59:23.000000000 +0300 @@ -1,9 +1,6 @@ Snes9x: The Portable Super Nintendo Entertainment System Emulator ================================================================= -Files included in the Snes9x archive: -Snes9x.exe, readme.txt, license.txt fmod.dll faqs.txt changes.txt - -v1.43 01-Jan-2005 +v1.42 4-Dec-2003 ================= Home page: http://www.snes9x.com @@ -12,16 +9,16 @@ ======== Changes Since Last Release Introduction +What's Emulated +What's Not What You Will Need Getting Started +Game colour System Keyboard Controls -Joystick support +Joystick Support Game Saving Netplay Support -Movie Support Cheat Support -What's Emulated? -What's Not? Super FX S-DD1 and SPC7110 S-RTC @@ -49,56 +46,142 @@ and Super Famicom Nintendo game systems on your PC or Workstation. The games include some real gems that were only ever released in Japan. -The original Snes9x project was founded by Gary Henderson and Jerremy Koot as -a collaboration of their earlier attempts at SNES emulation (snes96 and snes97) -Over the years the project has grown and has collected some of the greatest -talent in the emulation community (at least of the SNES variety) some of which -have been listed in the credits section, others have helped but have been loss -in the course of time. - -"Why emulate the SNES?" +Snes9x is the result of well over six years worth of part-time hacking, +coding, recoding, debugging, etc. Snes9x is coded in C++, with three assembler +CPU emulation cores on the i386 Linux, DOS and Windows ports. -Well, there are many reasons for this. The main reason is for nostalgia purposes. -It's a hard find in this day and age to get a SNES and games for it. Plus many -of us over the course of time have lost our beloved consoles (may they R.I.P) but -still have our original carts. With no other means to play them, we turn to -emulators. Besides this there are many conveniences of doing this on the -computer instead of dragging out your old system. +Snes9x is better than a real SNES: +o Freeze a game at any position, then restore the game to that exact spot at + a later date - ideal for saving a game just before a difficult bit. +o Built-in cheat cartridge. +o Built-in peripheral emulation. The SNES mouse, Multi-player 5 and SuperScope + external add-ons are all emulated, they cost extra money with a real SNES. +o Stereo sound - yes I know the SNES produced stereo sound, but who actually + paid the inflated price for the special lead just so you could hear it? +o No more cartridge contact cleaning! +o Some SNES hardware features that be turned on and off during game play, + games might be using one of these features to deliberately make a section + of the game more difficult. Easy, just turn the feature off! +o Networked game play on some ports. +o Speed up or slow down SNES games. +o Save screen shots to impress(?!) your friends. ('F12') +o No unsightly stacks of cartridges. -Advantages consist of: -- ability to save in any location of the game, despite how the game was designed - it's amazingly useful when you don't want to redo the same level over and over. -- built-in peripherals. This is anything from multi-taps, to super scopes, to - cheat devices. -- ability to rip sprites and music for your own personal use -- easier to organize and no stacks of cartridges that scare off non-nerdish women. -- filters can be used to enhance graphics on old games. +Snes9x is worse than a real SNES: +o Unless your computer is very fast (Pentium II+), some games just can't + hit every frame being rendered and the emulator starts to skip the drawing + of some frames to keep the emulator running at a constant speed - to you + it appears as if the graphics aren't moving as smoothly as they could. +o Not all games work; bugs and missing features cause some games to fail to + work or renders them un-playable. +o You have to wait for your computer to boot before you can play games, + no waiting on the real SNES! +o The SNES has an analogue low-pass sound filter that give a nice bass to + all the sounds and music - Snes9x doesn't emulate this. If you have + a posh sound card, you could try fiddling with it mixer controls to produce + a similar effect. Turning on interpolated sound helps a lot. -As with all things there are disadvantages though: -- If you have an ancient PC (pre-Pentium 2) you aren't likely to get a playable - experience. -- some games are still unemulated (though this a very tiny minority) -- the emulator can be difficult for new users to configure (please read "getting - started" section below for info) +What's Emulated +=============== +- The 65c816 main CPU. +- The Sony SPC700 sound CPU. +- SNES variable length machine cycles. +- 8 channel DMA and H-DMA (raster effects). +- All background modes, 0 to 7. +- Sound DSP, with eight 16-bit, stereo channels, compressed samples, hardware + attack-decay-sustain-release volume processing, echo, pitch modulation + and digital FIR sound filter. +- 8x8, 16x8 and 16x16 tile sizes, flipped in either direction. +- 32x32, 32x64, 64x32 and 64x64 screen tile sizes. +- H-IRQ, V-IRQ and NMI. +- Mode 7 screen rotation, scaling and screen flipping. +- Vertical offset-per-tile in modes 2, and 4. +- Horizontal offset-per-tile in modes 2, 4 and 6. +- 256x224, 256x239, 512x224, 512x239, 512x448 and 512x478 SNES screen + resolutions. +- Sub-screen and fixed colour blending effects. +- Mosaic effect. +- Single and dual graphic clip windows, with all four logic combination modes. +- Colour blending effects only inside or outside a window. +- 128 8x8, 16x16, 32x32 or 64x64 sprites, flipped in either direction. +- SNES palette changes during frame (15/16-bit internal rendering only). +- Direct colour mode - uses tile and palette-group data directly as RGB value. +- Super FX, a 21/10MHz RISC CPU found in the cartridge of several games. +- S-DD1, a data decompression chip used only in Star Ocean and Street Fighter 2 + Alpha. The compression algorithm is integrated into Snes9x, but you may still + use the old graphics pack cheat as a speed boost. +- SPC7110, similar in use to S-DD1, but the algorithm is still unknown. +- S-RTC, a real-time clock chip. Dai Kaijyu Monogatari II is the only game + that uses it. +- SA-1, a faster version of CPU found in the main SNES unit together with some + custom game-accelerator hardware. +- C4, a custom Capcom chip used only in Megaman X2 and X3. Its a sprite scaler/ + rotator/line drawer/simple maths co-processor chip used to enhance some + in-game effects. +- OBC1 is a sprite management chip. Metal combat is the only game to use this. +- Greater DSP-1 support, enough that all games should load, but some may have + graphical glitches. +- DSP-2 support. Only used in Dungeon Master +- SNES mouse. +- SuperScope (light gun) emulated using computer mouse. +- Multi-player 5 - allowing up to five people to play games simultaneously on + games that support that many players. +- Game-Genie and Action Replay cheat codes. +- Multiple ROM image formats, with or without a 512 byte copier header. +- Single or split images, compressed using zip and gzip, and interleaved in one of two + ways. +- Auto S-RAM (battery backed RAM) loading and saving. +- Freeze-game support, now portable between different Snes9x ports. +- Interpolated sound. +What's Not +========== +- Only partial DSP-1 support, enough to play Mario Kart, Pilotwings and many + others. All DSP-1 games should boot, but may display graphical errors. +- Any other odd chips that manufactures sometimes placed inside the + cartridge to enhance games and as a nice side-effect, also act as an + anti-piracy measure. (Examples: DSP-X, Seta, etc) +- Pseudo hi-res. mode - SNES hardware uses interpolation to give apparent + increase in horizontal resolution, which is only partially emulated. +- Mosaic effect on mode 7. +- A couple of SPC700 instructions that I can't work exactly out what they + should do. +- Fixed colour and mosaic effects in SNES hi-res. (512x448) modes. +- Offset-per-tile in mode 6. Luckily I haven't found a game that uses it, yet. +- The expansion slot found in many carts. What You Will Need ================== -A windows 9x/2k based machine for this port -DirectX 6.1b or later -133mhz processor BARE MINIMUM (1ghz+ rec for best settings) -16MB ram BARE MINIMUM (128megs+ rec for graphic pack games) -Any directsound capable sound card +Windows 95, 98, NT, ME, 2K, or XP with at least DirectX 6 and OpenGL installed +running on a modern, fast (e.g. Pentium 200 or higher) computer with at least +32Mb of RAM. Some games require another CPU to be emulated and/or make heavy use +of colour translucency effects, so an even faster computer may be required to +get an acceptable frame rate. -Certain games use added hardware which will REQUIRE a faster pc. Again, the -specs listed above the BARE MINIMUM to use snes9x in any playable form. Most -people will not even find that playable. It is recommended that you get a semi- -modern PC with a 600mhz Pentium 3/celeron/duron/athlon processor if you want -good results. A 1 GHz is recommended for those that want a near perfect -experience. Also 64MB of ram is highly suggested with the possibility of more -being needed if you play a game that requires graphic packs. +If you're running the original version of Windows 95 you will need to download +Microsoft's OpenGL upgrade kit from there web site; they keep moving the exact +location, but last time I looked I found it by using the following method: +http://www.microsoft.com -> support -> Product support options -> +download centre -> keyword search: OpenGL, product: Windows 95; the OpenGL +DLL install package was the first option in the list after pressing Find It! + +If you want SNES sound emulation, you'll need a DirectSound compatible sound +card - virtually all modern PCI sound cards are DirectSound compatible - or +use FMOD's older Windows WAVE sound driver. +Snes9x's full-screen mode uses DirectDraw to switch to the required resolution +and depth, but if you intend to use the Windowed mode, for maximum emulation +speed you should have your desktop depth set to 256 colours if translucency +emulation and 16-bit rendering are switched off and not required, or hi-colour +mode (32768/65536 colours) if translucency effects are required. + +If you have a Voodoo 3dfx card, Snes9x can use this hardware to stretch and +smooth the relatively lo-resolution SNES image to fill your computer screen. +Newer nvidia cards can do the same trick, just select stretch image option. +There is also an OpenGL display output mode that can stretch and smooth +the SNES image. If your OpenGL hardware supports 16-bit textures (most do), +OpenGL mode is as fast, or faster than Voodoo 3dfx mode. Software -------- @@ -113,7 +196,8 @@ Getting Started =============== -Launch Snes9x using the Windows explorer to locate the directory where you +Launch Snes9x from the Windows Start menu if you used the package install +method; alternatively use Windows explorer to locate the directory where you un-zipped the snes9x.exe and the fmod.dll files and double-click on the snes9x.exe executable. You could create a shortcut to Snes9x and drag that icon out onto your desktop. @@ -125,38 +209,39 @@ stored your SNES games. Single-click and then press Load to load and start the game. -SNES Rom images come in lots of different formats. Predominately you will be -playing ROMs that are still zipped. Snes9x supports zipped ROMs as long as there -is only 1 per zip file. Other formats are listed above in the "software" section. +SNES ROM images come in lots of different formats, depending on the copier +device that was originally used to create the image amongst other things. +Sometimes Snes9x has trouble auto-detecting the exact ROM format. Try playing +around with the values of the combo boxes in the ROM load dialog if the game +doesn't appear to work after its been loaded. In particular, games that use +the Super FX RISC processor seem to be mostly in an odd interleaved format +that Snes9x has trouble auto-detecting; try selecting 'Interleave mode 2' from +the load ROM dialog if you have a Super FX game that isn't working. Game colour System ------------------- - -Snes9x displays the ROM information when a ROM is first loaded. Depending on the -colours used you can tell whether or not a ROM is a good working ROM, or if -it's been altered or is corrupted. +========================== --White means the ROM should be a perfect working copy --Green means the ROM is mode 1 interleaved --Cyan means the ROM is mode 2 interleaved --Yellow means the ROM has probably been altered. Either it's a translation, - PD ROM, hacked, or possibly a bad ROM. It may also be an overdumped ROM. --Red means the ROM the ROM is definitely hacked and that a new version should be -found. some ROM Tools such as NSRT can also fix these ROMs. +Snes9x displays the rom information when a rom is first loaded. Depending on the +colours used you can tell whether or not a rom is a good working rom, or if it's been +altered or is corrupted. -When asking for help on the Snes9x forums, please list the colour and CRC32 -that is displayed. This will help to find out what the problem is. +-White means the rom should be a perfect working copy +-Green means the rom is mode 1 interleaved +-Cyan means the rom is mode 2 interleaved +-yellow means the rom has probably been altered. Either it's a translation, PD rom, hacked, + or possibly a bad rom. It may also be an overdumped ROM. +-red means the rom the rom is definately hacked and that a new version should be found. + some ROM Tools such as NSRT can also fix these ROMs. -These colours do NOT signify whether a game will work or not. It is just a means -for reference so we can understand what may or may not be a problem. If the -name is red search the internet for a program called NSRT (At present time this -can be found at http://nsrt.edgeemu.com) which may be able to fix it. Most -often the problem with games that don't work it's because they are corrupt or -are a bad dump and should be redownloaded. +When asking for help on the Snes9x forums, please list the colour and CRC32 that is displayed. +This will help to find out what the problem is. SNES Joypad Emulation --------------------- -The default key mapping for joy-pad 1 is: +On a real SNES, players controlled games using an 8-button digital joy-pad; on +Snes9x you can use your computer's keyboard (the default) or any joystick +or controller device supported by Window's DirectInput. The default key +mapping for joy-pad 1 is: 'up arrow' Up direction 'down arrow' Down direction @@ -172,41 +257,33 @@ 'space' Select button The real SNES allowed up to five joy-pads to be plugged in at once via a -special adapter. Having five people crowd around the keyboard would not be +special adapter, although there are only a few games that actually supported +that many players. Having five people crowd around the keyboard would not be much fun, and anyway, all keyboards have a limit on the number of keys that can be pressed simultaneously and still be detected correctly; much better to -use multiple joysticks or Netplay. - -Joystick Support -================ - -Configure and calibrate your joystick/joy-pad using Windows joystick applet in -the control panel BEFORE starting Snes9X, then use Snes9X's joy-pad config -dialog available from the Options menu to map your joystick/joy-pad's buttons -to the emulated SNES joy-pad(s) buttons. See 'Keyboard/Joystick Config' above -for details. +use multiple joysticks or NetPlay. Keyboard/Joystick Config ------------------------ -Add support for your joystick and calibrate it using Windows' joystick applet +Add support for your joystick and calibrate it using Windows' joystick applet from the Windows control panel before starting Snes9x, then use Joy-pad -Configuration dialog in Snes9x to customize the keyboard/joystick to SNES +Configuration dialog in Snes9x to customise the keyboard/joystick to SNES joy-pad mappings. The dialog is easy to use: select which SNES joy-pad you are -configuring using the combo box (#1 to #5). Make sure that you click the -"enabled" box on that controller or snes9x won't recognize a controller being -plugged in. Click on the text box next to 'UP' and then press the key on the -keyboard or button on your joystick that you would like to perform the UP action. -The focus will automatically move on to the 'RIGHT' text box, press the key or -joystick button that you want to perform the RIGHT action, and so on until -you've customized all the SNES joy-pad buttons. +configuring using the combo box (#1 to #5), click on the text box next to 'UP' +and then press the key on the keyboard or button on your joystick that you would +like to perform the UP action. The focus will automatically move on to the 'RIGHT' + text box, press the key or joystick button that you want to perform the RIGHT +action, and so on until you've customised all the SNES joy-pad buttons. -Use of diagonals should only be used by keyboard users who are having problems -pressing more then one or 2 buttons at a time. First you must hit "toggle -diagonals" so that you are able to change them. +If you're using the keyboard, you might want to also program four keys for +diagonal movement - I'm told it helps with beat-em-up type games. Click on the +each of the blue-coloured diagonal text boxes in turn and press a key on the +keyboard you would like to perform the action. Using the numeric keypad for +direction keys might be useful in this case. -If you want to play a game that uses the multitap, you must first enable it in -the input menu. +If you are using a joypad you do NOT UNDER ANY CIRCUMSTANCES SET ANYTHING +FOR DIAGONAL. That is strictly a keyboard issue. Alternate Controllers ===================== @@ -220,8 +297,8 @@ First, select the optional controller you want enabled from the Input menu. The controller is now selectable by pressing '7'. -Load your game and select the controller using 7. If the game does not pick up -the controller, reset the game. At some point, this will probably be rewritten. +Load your game and select the controller using 7. If the game does not pick +up the controller, reset the game. At some point, this will probably be rewritten. We do not know when this will occur. @@ -229,106 +306,87 @@ ============================ While the emulator is running: +'Escape' Show/hide the menu-bar. +'Pause' Pause the emulator -'Escape' Show/hide the menu-bar. - -'Pause' Pause the emulator - -Alt+'Return' Toggle between full-screen and windowed mode. - -'`' Superscope turbo button. - -'~' Superscope pause button. - -'Tab' Turbo mode (fast forward) - for skipping long intros. - -'0' Toggle H-DMA emulation on/off. - -'1' Toggle background 1 on/off. - -'2' Toggle background 2 on/off. - -'3' Toggle background 3 on/off. - -'4' Toggle background 4 on/off. - -'5' Toggle sprites on/off - -'6' Toggle swapping of joy-pad one and two around - -'7' Rotate between Multi-player 5, mouse on port 1, - mouse on port 2 and SuperScope emulation. (need to enable - special controllers in the menu first) - -'8' Toggle background layer priorities for backgrounds - involved in sub-screen addition/subtraction. - -'9' Toggle transparency effects on and off - only if - 16-bit or higher screen mode selected. - -Shift+'9' Toggle mode 7 bi-linear filtering on and off. - -'Backspace' Toggle emulation of graphics window effects on/off. - -Shift+'F1-F9 ' Save a freeze game file. - -'F1-F9' Load a freeze game file, restoring a game to an - exact position. - - -Shift+'+' Increase emulated frame time by 1ms - slowing down - the game. (auto-frame skip only) - -Shift+'-' Decrease emulated frame time by 1ms - speeding up the - game. (auto-frame skip only) - -Shift+'insert' Toggles turbo on the 'L' button. Note: toggles for all - controllers - -Shift+'delete' Toggles turbo on the 'R' button... - -Shift+'[' Toggles turbo on the 'select' button... +Alt+'Return' Toggle between full-screen and windowed mode. -Shift+']' Toggles turbo on the 'start' button... +'`' Superscope turbo button. +'~' Superscope pause button. -Shift+'home' Toggles turbo on the 'Y' button... +'Tab' Turbo mode (fast forward) - for skipping long intros. -Shift+'pageup' Toggles turbo on the 'X' button... +'0' Toggle H-DMA emulation on/off. +'1' Toggle background 1 on/off. +'2' Toggle background 2 on/off. +'3' Toggle background 3 on/off. +'4' Toggle background 4 on/off. +'5' Toggle sprites on/off +'6' Toggle swapping of joy-pad one and two around +'7' Rotate between Multi-player 5, mouse on port 1, + mouse on port 2 and SuperScope emulation. (need to enable + special controllers in the menu first) +'8' Toggle background layer priorities for backgrounds + involved in sub-screen addition/subtraction. +'9' Toggle transparency effects on and off - only if + 16-bit or higher screen mode selected. +Shift+'9' Toogle mode 7 bi-linear filtering on and off. +'Backspace' Toggle emulation of graphics window effects on/off. -Shift+'end' Toggles turbo on the 'B' button... +Shift+'F1-F9 ' Save a freeze game file. +'F1-F9' Load a freeze game file, restoring a game to an + exact position. -Shift+'pagedown' Toggles turbo on the 'A' button... +Shift+'+' Increase emulated frame time by 1ms - slowing down + the game. (auto-frame skip only) +Shift+'-' Decrease emulated frame time by 1ms - speeding up the + game. (auto-frame skip only) -'+' Increase frame rendering skip rate, making the screen - updates more jerky but speeding up the game. +Shift+'insert' Toggles turbo on the 'L' button. Note: toggles for all controllers +Shift+'delete' Toggles turbo on the 'R' button... +Shift+'[' Toggles turbo on the 'select' button... +Shift+']' +Shift+'home' Toggles turbo on the 'Y' button... +Shift+'pageup' Toggles turbo on the 'X' button... +Shift+'end' Toggles turbo on the 'B' button... +Shift+'pagedown' Toggles turbo on the 'A' button... -'-' Decrease frame rendering skip rate, making the game - update more smoothly, but potentially slowing down the - game. Repeatedly pressing the key will eventually - switch to auto-frame skip rate where the rate is - dynamically adjusted to keep a constant game play - speed. -'.' Toggles movie recording on/off. +'+' Increase frame rendering skip rate, making the screen + updates more jerky but speeding up the game. +'-' Decrease frame rendering skip rate, making the game + update more smoothly, but potentially slowing down the + game. Repeatedly pressing the key will eventually + switch to auto-frame skip rate where the rate is + dynamically adjusted to keep a constant game play + speed. -'F12' Takes a screenshot +'F12' Takes a screenshot Several of the menu items also have keyboard accelerators; browse the menus to see what they are. +Joystick Support +================ + +Configure and calibrate your joystick/joy-pad using Windows joystick applet in +the control panel BEFORE starting Snes9X, then use Snes9X's joy-pad config +dialog available from the Options menu to map your joystick/joy-pad's buttons +to the emulated SNES joy-pad(s) buttons. See 'Keyboard/Joystick Config' above +for details. Game Saving =========== Many SNES games could take a very long time to complete from start to finish so -they allowed your progress to be saved into RAM fitted inside the game pack; +they allowed your progressed to be saved into RAM fitted inside the game pack; the RAM contents were backed up by a battery when the SNES was switched off or the game removed. Snes9x simulates this by saving the contents of the emulated -battery-backed RAM into a file (*.srm) when you load a new game or exit Snes9x. -The file is then automatically re-loaded the next time you play the game. +battery-backed RAM into a file when you load a new game or exit Snes9x. The +file is then automatically re-loaded the next time you play the game. -Snes9x also provides freeze-files; these are files that save a game's +Snes9x also provides freeze-files; these are files that saves a game's position at any point in the game, not just at predefined places chosen by the game's designers - ideal for saving your game just before a tricky bit! Snes9x provides 9 save slots; during a game, press Shift + F1 to F9 to save a @@ -336,49 +394,82 @@ Freeze game files and Save-RAM (S-RAM) save files are normally written to and read from the folder where the ROM image was located, but sometimes this is not -desirable or possible, especially if it’s a CD-ROM, which is of course is -usually read-only! You can change the folder where Snes9X saves and loads S-RAM -and freeze-files using the Settings Dialog, available from the Options menu. +desirable or possible, especially if its a CD-ROM, which is of course +read-only! You can change the folder where Snes9X saves and loads S-RAM and +freeze-files using the Settings Dialog, available from the Options menu. Snes9x uses its own unique format for freeze-files, as does ZSNES, but Snes9x can also load ZSNES format freeze-files. Just copy the ZSNES freeze files into your save directory and, if the native format Snes9x freeze file doesn't exist -(.00X where X is a digit), Snes9x will try to load the -corresponding ZSNES freeze file instead (.zsX where X is a 't' +(.00X where X is a digit), Snes9x will try to load the +corresponding ZSNES freeze file instead (.zsX where X is a 't' or a digit). When you freeze a game position after loading a ZSNES format freeze file, Snes9x will save it in native Snes9x format. Netplay Support =============== -Netplay Support is disabled in this release -Movie Support -============= +This support should currently be considered beta. Netplay support allows +up to five players to sit in front of different computers and simultaneously +play the same game, or just watch someone else play a game. All the computers +have to be connected to a network that allows TCP/IP traffic to flow between +them; this includes a local Ethernet-style network, a modem connection to +another machine, a Windows direct-cable connection, or, if you're lucky and +have short ping times, the Internet. -This feature allows you to record your actions while playing a game. This can be -used for your own personal playback or to show other people that you can do -something without them having to be around when you did it. These can be saved -and shared on the internet with ease as they are comparatively small. +Its currently easier if you use Snes9x in windowed mode while using Netplay, +mainly because Netplay currently displays status information in the window's +title bar, and it might be necessary to setup a separate chat application so +you can talk to the other players when deciding what game to play next. -To use, simply click file and click on movie. Click the record button. Here you -can decide when to start recording. If you want to record from the very start -of a game,click on record from reset. If you want to start recording from where -you are alreadyin a game click the record from now. You can also choose which -controllers to record. If you are playing by yourself leave joypad 1 as the -only one selected. The more controllers you choose to record the larger the -file size will be. +One machine has to act as a server which other players (client sessions) +connect to. The 'master' player, player 1, uses the server machine; the master +decides what game to play. The server machine should be selected to be the +fastest machine on the fastest connection in the group taking part due to the +extra functions it has to perform. -To play back a movie you recorded simple click file, movie, play and select the -file to play. Make sure the movie was recorded with the same ROM that you have -loaded" +Load up a game, then select the 'Act as server' option from the Netplay menu +to become a Netplay server; the 'network', in whatever form it takes, will +need to be initialised, if necessary, before you do this. Then just wait for +other players to connect... -If you make a mistake while recording a movie, there is a movie rerecord -function. Simply create a save state anytime while recording. If you want to -re-record simply load the save state and it will bring up the message -"movie re-record". Loading any save state while a movie is playing or recording -will cause this to happen. If you want to watch a video with no chance to -accidentally alter it check "open as read only" when you go to play it. +Clients connect to the server using the 'Connect to server...' dialog, again +available from the Netplay menu. Type in the IP address or host name of the +machine running the Snes9x server session and press OK. The first remote client +to connect will become player 2, and so on. Start Menu->Run->winipcfg will tell +you your current IP address, but note that most dial-up ISPs will allocate you +a new IP address each time you dial in. +If the server has the 'Send ROM Image to Client' option checked, it will send +the client a copy of the game it is currently playing; don't enable this option +when using a slow network - sending 4Mbytes+ to several clients will takes ages +when using a modem! If the option is not checked the server will request the +client loads up the correct game first before joining the game. + +Once the client has got a copy of the game the server is playing, the server +will then either send it S-RAM data and reset all players' games if the +'Sync Using Reset Game' option is checked, or send it a freeze file to get the +new client in sync with the other player's progress in a game. + +If the master player loads a different game, the server will either +automatically send remote clients a copy, or request that they load the game. +If the master player loads a freeze file, the server will automatically send +that to remote clients as well. + +Client sessions must be able to keep up with the server at all times - if they +can't, either because the machine is just too slow, or its busy, the games +will get out of sync and it will be impossible to successfully play a +multi-player game... + +...To make sure this doesn't happen, don't move the Snes9x window unnecessarily +and don't use Ctlt+Alt+Del to display the task manager while playing. Also stop +any unnecessary applications and as many background tasks as possible. Even +something as simple as a text editor might periodically write unsaved data to +the disk, stealing CPU time away from Snes9x causing it to skip a frame or +delay a sound effect; not a problem for most games, but the Bomberman series +(the best multi-player games on the SNES) sync the game to sound samples +finishing. Turning off 'Volume envelope height reading' from the Sound Options +dialog might help with this problem. Cheat Support ============= @@ -395,8 +486,8 @@ Type in a Game Genie or Pro-Action Reply code into the "Enter Cheat Code" text edit box and press . Be sure to include the '-' when typing in a Game Genie code. You can then type in an optional short description as a reminder -to yourself of what function the cheat performs. Press again or click -the Add button to add the cheat to the list. +to yourself what function the cheat performs. Press again or click the +Add button to add the cheat to the list. Note that the Add button remains insensitive while "Enter Cheat Code" text edit box is empty or contains an invalid code. The cheat code is always @@ -413,10 +504,10 @@ have requested this functionality. Type in the address into the "Address" text edit box then type the value into the "Value" text edit box. The value is normally entered in decimal, but if you prefix the value with a '$' or append -an 'h' then you can enter the value in hex. +a 'h' then you can enter the value in hex. Double-clicking on an cheat line from the list in the dialog or clicking on -the "En" column toggles an individual cheat on and off. All cheats can be +the "En" column, toggles a individual cheat on and off. All cheats can be switched on and off by checking and unchecking the "Apply cheats" item from the Cheat menu. @@ -440,15 +531,15 @@ Cheat Search Example -------------------- -Let’s give ourselves infinite health and lives on Ocean's Addams Family +Lets give ourselves infinite health and lives on Ocean's Addams Family platform game: -Load up the game; keep pressing the start button (Return key by default) to +Load up the game, keep pressing the start button (Return key by default) to skip past the title screens until you actually start playing the game. You'll notice the game starts with 2 health hearts and 5 lives. Remember that information, it will come in useful later. -Launch the cheat search dialog for the first time; Alt+A is its accelerator. +Launch the cheat search dialog for the first time, Alt+A is its accelerator. Press the Reset button just in case you've used the dialog before, leave the Search Type and Data Size radio boxes at their default values and press OK. @@ -469,7 +560,7 @@ Just to make sure you've found the correct location, press OK on the dialog, and play the game until you loose another life. Launch the search dialog again after the life counter on screen has been updated and press the Search -button. Now there are even fewer items in the list, but 7E00AC is there again, +button. Now there's even fewer items in the list, but 7E00AC is there again, this time the current value is 3 and the previous value was 4. Looks very much like we've found the correct location. @@ -485,7 +576,7 @@ If the memory location you add a cheat on proves to be wrong, just go to the Cheat Code Editor dialog and delete the incorrect entry. -Now let’s try and find the Addams Family health counter. While two hearts are +Now lets try and find the Addams Family health counter. While two hearts are displayed on the screen, visit the cheat search dialog and press the Reset button followed by OK. Play the game until you loose a heart by touching a baddie, then visit the cheat search dialog again. @@ -497,7 +588,7 @@ Look at address line 7E00C3, its current value is 1 and its previous value was 2. Scrolling through the list doesn't reveal any other likely memory locations, -so let’s try our luck. Click on the 7E00C3 line, press the Add Cheat button and +so lets try our luck. Click on the 7E00C3 line, press the Add Cheat button and type in a new value of say 4 into the dialog that appears and press OK. Press OK on the Search for New Cheats dialog to return to the game. @@ -510,79 +601,6 @@ Now every time you play Addams Family you'll have infinite lives and health. Have fun finding cheats for other games. -What's Emulated? -=============== -- The 65c816 main CPU. -- The Sony SPC700 sound CPU. -- SNES variable length machine cycles. -- 8 channel DMA and H-DMA (raster effects). -- All background modes, 0 to 7. -- Sound DSP, with eight 16-bit, stereo channels, compressed samples, hardware - attack-decay-sustain-release volume processing, echo, pitch modulation - and digital FIR sound filter. -- 8x8, 16x8 and 16x16 tile sizes, flipped in either direction. -- 32x32, 32x64, 64x32 and 64x64 screen tile sizes. -- H-IRQ, V-IRQ and NMI. -- Mode 7 screen rotation, scaling and screen flipping. -- Vertical offset-per-tile in modes 2, and 4. -- Horizontal offset-per-tile in modes 2, 4 and 6. -- 256x224, 256x239, 512x224, 512x239, 512x448 and 512x478 SNES screen - resolutions. -- Sub-screen and fixed colour blending effects. -- Mosaic effect. -- Single and dual graphic clip windows, with all four logic combination modes. -- Colour blending effects only inside or outside a window. -- 128 8x8, 16x16, 32x32 or 64x64 sprites, flipped in either direction. -- SNES palette changes during frame (15/16-bit internal rendering only). -- Direct colour mode - uses tile and palette-group data directly as RGB value. -- Super FX, a 21/10MHz RISC CPU found in the cartridge of several games. -- S-DD1, a data decompression chip used only in Star Ocean and Street Fighter 2 - Alpha. The compression algorithm is integrated into Snes9x, but you may still - use the old graphics pack cheat as a speed boost. -- SPC7110, similar in use to S-DD1, but the algorithm is still unknown. -- S-RTC, a real-time clock chip. Dai Kaijyu Monogatari II is the only game - that uses it. -- SA-1, a faster version of CPU found in the main SNES unit together with some - custom game-accelerator hardware. -- C4, a custom Capcom chip used only in Megaman X2 and X3. It’s a sprite scaler/ - rotator/line drawer/simple maths co-processor chip used to enhance some - in-game effects. -- OBC1 is a sprite management chip. Metal combat is the only game to use this. -- Greater DSP-1 support, enough that all games should load, but some may have - graphical glitches. -- DSP-2 support. Only used in Dungeon Master -- DSP-4 partial support. Top Gear 3000 goes in game but still very glitchy -- SNES mouse. -- SuperScope (light gun) emulated using computer mouse. -- Multi-player 5 - allowing up to five people to play games simultaneously on - games that support that many players. -- Game-Genie and Action Replay cheat codes. -- Multiple ROM image formats, with or without a 512 byte copier header. -- Single or split images, compressed using zip and gzip, and interleaved in one - of two ways. -- Auto S-RAM (battery backed RAM) loading and saving. -- Freeze-game support, now portable between different Snes9x ports. -- Interpolated sound. -- Justifier support. Konami's Justifier is similar to the Super Scope and used - in Lethal Enforcers -- Seta-10 CPU (ST010). This is used F1 Race of Champions 2 - -What's Not? -========== -- DSP-1 support not complete, enough to play Mario Kart, Pilotwings and many - others. All DSP-1 games should boot, but may display graphical errors. -- Any other odd chips that manufactures sometimes placed inside the - cartridge to enhance games and as a nice side-effect, also act as an - anti-piracy measure. (DSP-3, DSP-4, SETA 11 and SETA 18, as examples) -- Pseudo hi-res. mode - SNES hardware uses interpolation to give apparent - increase in horizontal resolution, which is only partially emulated. -- Mosaic effect on mode 7. -- A couple of SPC700 instructions that I can't work exactly out what they - should do. -- Fixed colour and mosaic effects in SNES hi-res. (512x448) modes. -- Offset-per-tile in mode 6. Luckily I haven't found a game that uses it, yet. -- The expansion slot found in many carts. - Super FX ======== The Super FX is a 10.5/21MHz RISC CPU developed by Argonaut Software used as a @@ -592,10 +610,9 @@ Doom, Winter Gold, Dirt Trax FX, StarFox, Stunt Race FX and Vortex. If you're lucky, you might find a copy of the unreleased Starfox 2 image floating around, but its sound code is corrupt and you'll need to disable sound CPU emulation to -play it. (NOTE: A new version of Starfox 2 was recently released that is closer -to being a complete ROM. It is mostly playable in the emulator but due to it -being an incomplete game it does have many errors. This is not the fault of -the emulator) +play it. (NOTE: A new version of Starfox 2 was recently released that is closer to +being a complete rom. It is mostly playable in the emulator but due to it being an +incomplete game it does have many errors. This is not the fault of the emulator) Lots of Super FX ROM images available are in an odd, interleaved format that I haven't worked out an easy way to auto-detect. If Snes9x detects that a @@ -611,25 +628,24 @@ time as the SNES DMA's data from the ROM to RAM. Only two games are known to use the chip: Star Ocean and Street Fighter Alpha 2. -SPC7110 is a compression and memory mapping chip. It provides a few extra -features, as well. It functions as an RTC interface, and has a multiply/divide -unit that has more precision than the SNES. The SPC7110 is found only in 4 -games: Super Power League 4, Far East of Eden Zero, Far East of Eden Zero - -Shounen Jump no Shou, and Momotaro Densetsu Happy. +SPC7110 is a compression and memory mapping chip. it provides a few extra features, +as well. It functions as an RTC interface, and has a multiply/divide unit that has more +precision than the SNES.The SPC7110 is found only in 4 games: Super Power League +4, Far East of Eden Zero, Far East of Eden Zero - Shounen Jump no Shou, and +Momotaro Densetsu Happy. These chips use some unknown compression algorithms, so to actually support the -games using these, pre-decompressed graphics packs must be downloaded from the -web, unpacked, and the resultant folder can be selected from the Snes9x options --> GFX Pack Configuration. As of Snes9x 1.42, the S-DD1 can be used without the -graphics packs. +games using these, pre-decompressed graphics packs must be downloaded from +http://www.dejap.com, unpacked, and the resultant folder can be selected from the +Snes9x options -> GFX Pack Configuration. As of Snes9x 1.42, the S-DD1 can be used +without the graphics packs. -To use the graphics packs for the S-DD1, as of 1.42 and later, you MUST tell -Snes9x where the pack is located. If you do not, it will use on-the-fly -decompression. On the other hand, to use on-the-fly decompression, make sure the -game's pack entry is blank. +To use the graphics packs for the S-DD1, as of 1.42, you MUST tell Snes9x where the +pack is located. If you do not, it will use on-the-fly decompression. On the other hand, +to use on-the-fly decompression, make sure the game's pack entry is blank. -The SPC7110 still uses packs at all times, and if no pack is defined, it will -search the locations just like ZSNES. +The SPC7110 still uses packs at all times, and if no pack is defined, it will search the +locations just like ZSNES. SA-1 ==== @@ -637,7 +653,7 @@ SNES itself, but clocked at 10MHz compared to a maximum of 3.58MHz for the CPU inside the SNES. -The SA-1 isn't just a CPU; it also contains some extra circuits developed by +The SA-1 isn't just a CPU, it also contains some extra circuits developed by Nintendo which includes some very fast RAM, a memory mapper, DMA and, several real-time timers. @@ -667,7 +683,7 @@ and it isn't even a SNES game or you only downloaded part of the image. Snes9x only emulates games designed for the Super NES, not NES, or Master System, or Game Boy, or . -2) If it's a Super FX game, chances are it's in interleaved2 format, try +2) If its a Super FX game, chances are its in interleaved2 format, try switching to "Interleaved mode 2" on the ROM load dialog before loading the game. 3) Someone has edited the Nintendo ROM information area inside the ROM image @@ -679,24 +695,23 @@ [bad checksum]. 5) The original SNES ROM cartridge had additional hardware inside that is not emulated yet and might never be. -6) You might be using a file that is compressed in a way Snes9x does not - understand. +6) You might be using a file that is compressed in a way Snes9x does not understand. The following ROMs are known to currently not to work with any version of Snes9x: -- Top Gear 3000/Planets Champ TG 3000 - DSP-4 -- SD Gundam GX - DSP-3 -- Hayazashi Nidan Morita Shougi - Seta 11 -- Hayazashi Nidan Morita Shougi 2 - Seta 18 - +- All games that use later versions of the DSP-1 (besides DSP-2) chip (e.g. SD Gundam GX, + Topgear 3000) +- Exhaust Heat2/F1 ROC II (custom co-processor) +- A pair of Shogi games released by Seta, which also use custom coprocessors + Sound Problems ============== No sound coming from any SNES game using Snes9x? Could be any or all of these: -- If all sound menu options are grayed out, or an error dialog about Snes9x not - being able to initialize DirectSound is displayed - then DirectSound could - not initialize itself. Make sure DirectX 6 or above is installed and your +- If all sound menu options are greyed out, or an error dialog about Snes9x not + being able to initialise DirectSound is displayed - then DirectSound could + not initialise itself. Make sure DirectX 6 or above is installed and your sound card is supported by DirectX. Installing the latest drivers for your sound card might help. Another @@ -729,7 +744,7 @@ games. Once you're happy that it is not just the game you're playing, set the - playback rate in the Sound Settings dialog to 32KHz, and uncheck "Stereo" and + playback rate in the Sound Settings dialog to 22KHz, and uncheck "Stereo" and "16bit playback". Next set both sound buffer length and mix values to 10ms, then try slowly increasing both values until clear sound can be heard. The ideal is that the mix interval and sound buffer length values should be as @@ -780,9 +795,6 @@ to rename them; just choose the name of the first part from the ROM load dialog, as above. -If you want the ROM to be 1 piece instead of many, you can use tools such as -SNESTool to remerge the files into one file. - Emulation speed =============== @@ -790,8 +802,8 @@ CPUs, an 8 channel digital sound processor with real-time sound sample decompression and stereo sound, two custom graphics processors, etc. -If you only have a minimum level machine, you will need to stick to using only -8-bit graphics and minimal or no sound. Disabling the joystick support will also +If you only have a 486 machine, you will need to stick to using only 8-bit +graphics and minimal or no sound. Disabling the joystick support will also help. Full-screen mode is generally faster than windowed mode. @@ -848,7 +860,7 @@ to the project. Nintendo is a trademark. -Super NES, SuperScope and Super FX are trademarks of Nintendo. +Super NES, SuperScope and Super FX are a trademarks of Nintendo. Sun, Solaris and Sparc are all trademarks of Sun Microsystems, Inc. Game Genie is a trademark of Lewis Galoob Toys, Inc. MS-DOS and Windows 95 are trademarks of Microsoft Corp. @@ -856,10 +868,10 @@ Sony is a trademark of Sony Corp. UNIX is a registered trademark of X/Open. Glide is a trademark of 3Dfx Interactive, inc. -Linux is a registered trademark of Linus Torvalds. +Linux is a registred trademark of Linus Torvalds. ------------------------------------------------------------------------------ Gary Henderson gary@snes9x.com -Updated most recently by: funkyass +Updated most recently by: Matthew Kendora \ No newline at end of file diff -NaHudr snes9x-1.43-src/readme.unix snes9x-improvement7-src-dehacked/readme.unix --- snes9x-1.43-src/readme.unix 2004-12-31 00:15:55.000000000 +0200 +++ snes9x-improvement7-src-dehacked/readme.unix 2005-03-20 23:46:32.000000000 +0200 @@ -406,9 +406,6 @@ Turn off joystick, SideWinder and GrIP detection (joystick polling on the PC slows the emulator down). - -version - Print the Snes9X version and the exit. - For example, to start a game called "mario", with sound, and transparency effects, type: @@ -504,17 +501,17 @@ 6. Joystick Support - The Linux port makes use of the v1.x joystick kernel drivers - written by Vojtech Pavlik (vojtech@ucw.cz) to allow the use of a - wide variety of different joystick/joypad types to control SNES - games. + The Linux port makes use of the v1.x joystick kernel drivers + written by Vojtech Pavlik (vojtech@ucw.cz) to allow the use of a + wide variety of different joystick/joypad types to control SNES + games. - If you are still using the older versions of the drivers, you can - download the latest driver version from - http://atrey.karlin.mff.cuni.cz/~vojtech/joystick/ + If you are still using the older versions of the drivers, you can + download the latest driver version from + http://atrey.karlin.mff.cuni.cz/~vojtech/joystick/ - Refer to the documentation that comes with the drivers to enable - support for your type of joystick/pad in Snes9x. + Refer to the documentation that comes with the drivers to enable + support for your type of joystick/pad in Snes9x. 7. Game Saving diff -NaHudr snes9x-1.43-src/render.cpp snes9x-improvement7-src-dehacked/render.cpp --- snes9x-1.43-src/render.cpp 2005-04-09 00:59:56.000000000 +0300 +++ snes9x-improvement7-src-dehacked/render.cpp 2005-04-09 00:59:23.000000000 +0300 @@ -244,7 +244,7 @@ rect->left = (Dst.Width - Src.Width) >> 1; rect->right = rect->left + Src.Width; rect->top = (Dst.Height - Src.Height) >> 1; - rect->bottom = rect->top + Src.Height; + rect->bottom = rect->top + Src.Height - (Settings.HeightExtend?0:15); lpDst = Dst.Surface; lpDst += rect->top * Dst.Pitch + rect->left; @@ -268,7 +268,7 @@ rect->left = (Dst.Width - 512) >> 1; rect->right = rect->left + 512; rect->top = (Dst.Height - Src.Height * 2) >> 1; - rect->bottom = rect->top + Src.Height * 2; + rect->bottom = rect->top + Src.Height * 2 - (Settings.HeightExtend?0:30); lpSrc = Src.Surface; lpDst = Dst.Surface; @@ -314,7 +314,7 @@ rect->left = (Dst.Width - Src.Width) >> 1; rect->right = rect->left + Src.Width; rect->top = (Dst.Height - Src.Height) >> 1; - rect->bottom = rect->top + Src.Height; + rect->bottom = rect->top + Src.Height - (Settings.HeightExtend?16:0); lpSrc = Src.Surface; lpDst = Dst.Surface; @@ -341,7 +341,7 @@ rect->left = (Dst.Width - Src.Width * 2) >> 1; rect->right = rect->left + Src.Width * 2; rect->top = (Dst.Height - Src.Height * 2) >> 1; - rect->bottom = rect->top + Src.Height * 2; + rect->bottom = rect->top + Src.Height * 2 - (Settings.HeightExtend?0:30); lpSrc = Src.Surface; lpDst = Dst.Surface; @@ -418,7 +418,7 @@ rect->left = (Dst.Width - Src.Width * 2) >> 1; rect->right = rect->left + Src.Width * 2; rect->top = (Dst.Height - Src.Height * 2) >> 1; - rect->bottom = rect->top + Src.Height * 2; + rect->bottom = rect->top + Src.Height * 2 - (Settings.HeightExtend?0:32); lpSrc = Src.Surface; lpDst = Dst.Surface; @@ -455,7 +455,7 @@ rect->left = (Dst.Width - Src.Width * 2) >> 1; rect->right = rect->left + Src.Width * 2; rect->top = (Dst.Height - Src.Height * 2) >> 1; - rect->bottom = rect->top + Src.Height * 2; + rect->bottom = rect->top + Src.Height * 2 - (Settings.HeightExtend?0:32); lpSrc = Src.Surface; lpDst = Dst.Surface; @@ -491,7 +491,7 @@ rect->left = (Dst.Width - Src.Width * 2) >> 1; rect->right = rect->left + Src.Width * 2; rect->top = (Dst.Height - Src.Height * 2) >> 1; - rect->bottom = rect->top + Src.Height * 2; + rect->bottom = rect->top + Src.Height * 2 - (Settings.HeightExtend?0:32); lpSrc = Src.Surface; lpDst = Dst.Surface; @@ -528,7 +528,7 @@ rect->left = (Dst.Width - 512) >> 1; rect->right = rect->left + 512; rect->top = (Dst.Height - height * 2) >> 1; - rect->bottom = rect->top + height * 2; + rect->bottom = rect->top + height * 2 - (Settings.HeightExtend?0:30); dstPtr += rect->top * Dst.Pitch + rect->left * 2; nextLine = dstPtr + dstPitch; @@ -1208,11 +1208,43 @@ RECT r; GetClientRect (GUI.hWnd, &r); - + + OffsetRect(&r, -r.left, -r.top); + + if(Settings.AspectRatio) + { + int width = r.right - r.left; + int height = r.bottom - r.top; + + int oldWidth = SNES_WIDTH; + int oldHeight = Settings.HeightExtend ? SNES_HEIGHT_EXTENDED : SNES_HEIGHT; + int newWidth, newHeight; + + if(oldWidth * height > oldHeight * width) + { + newWidth = oldWidth*width/oldWidth; + newHeight = oldHeight*width/oldWidth; + } + else + { + newWidth = oldWidth*height/oldHeight; + newHeight = oldHeight*height/oldHeight; + } + int xOffset = (width - newWidth)/2; + int yOffset = (height - newHeight)/2; + + r.right = r.left + newWidth; + r.bottom = r.top + newHeight; + + OffsetRect(&r, xOffset, yOffset); + } + width = r.right - r.left; height = r.bottom - r.top; - glViewport (0, 0, width, height); + glViewport (r.left, r.top, width, height); + +/// glViewport (r.left, r.top, r.right, r.bottom); glMatrixMode (GL_PROJECTION); glLoadIdentity (); @@ -1233,7 +1265,8 @@ else texture_size = OpenGL.texture_size; - uint32 pheight = Src.Height % texture_size; + uint32 srcheight = Src.Height - (Settings.HeightExtend?0:15); + uint32 pheight = (srcheight) % texture_size; if (pheight == 0) pheight = texture_size; @@ -1244,8 +1277,13 @@ zrot += 0.4f; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } + else + { + if(Settings.AspectRatio /*|| !GUI.Stretch*/) + glClear(GL_COLOR_BUFFER_BIT); + } - for (int starty = Src.Height - pheight; starty >= 0; + for (int starty = (srcheight) - pheight; starty >= 0; startl += pheight, pheight = texture_size, starty -= texture_size) { for (int startx = 0; startx < (int) swidth; startx += texture_size) @@ -1255,9 +1293,9 @@ pwidth = texture_size; float fx1 = (float) startx / Src.Width; - float fy1 = (float) starty / Src.Height; + float fy1 = (float) starty / (srcheight); float fx2 = fx1 + (float) pwidth / Src.Width; - float fy2 = fy1 + (float) (pheight+1) / Src.Height; + float fy2 = fy1 + (float) (pheight+1) / (srcheight); if (!OpenGL.packed_pixels_extension_present) { diff -NaHudr snes9x-1.43-src/resource.h snes9x-improvement7-src-dehacked/resource.h --- snes9x-1.43-src/resource.h 2005-04-09 00:59:56.000000000 +0300 +++ snes9x-improvement7-src-dehacked/resource.h 2005-04-09 00:59:23.000000000 +0300 @@ -1,7 +1,8 @@ //{{NO_DEPENDENCIES}} -// Microsoft Developer Studio generated include file. -// Used by 0snes9X.rc +// Microsoft Visual C++ generated include file. +// Used by snes9x.rc // +#define IDR_RT_MANIFEST2 1 #define IDR_MENU_US 101 #define IDC_CURSOR_SCOPE 101 #define IDD_SPC7110_CACHE 101 @@ -34,6 +35,7 @@ #define IDB_PAD 133 #define IDD_OPENMOVIE 134 #define IDD_CREATEMOVIE 135 +#define IDD_KEYCUSTOM 136 #define IDC_DRIVER 1001 #define IDC_BUFLEN 1002 #define IDC_RATE 1003 @@ -45,6 +47,7 @@ #define IDC_SYNC_TO_SOUND_CPU 1009 #define IDC_ENVX 1010 #define IDC_ECHO 1011 +#define IDC_CLEARSRAM 1011 #define IDC_CACHING 1012 #define IDC_MASTER_VOL 1013 #define IDC_SPC700ON 1014 @@ -52,8 +55,11 @@ #define IDC_MUTE 1016 #define IDC_SKIP_TYPE 1017 #define IDC_SCROLLBAR1 1018 +#define IDC_FMUT 1018 #define IDC_VRAM_DISPLAY 1019 +#define IDC_WIP1 1019 #define IDC_ADDRESS 1020 +#define IDC_FAMT 1020 #define IDC_SPC7110_ALL 1021 #define IDC_SPC7110_SOME 1022 #define IDC_SPC7110_FILE 1023 @@ -97,6 +103,7 @@ #define IDC_SPIN_MAX_SKIP 1062 #define IDC_SPIN_TURBO_SKIP 1063 #define IDC_ROM_DIR 1064 +#define IDC_INACTIVE_PAUSE 1064 #define IDC_INTERLEAVE 1065 #define IDC_VIDEO_MODE 1066 #define IDC_HEADER 1067 @@ -178,7 +185,9 @@ #define IDC_JPTOGGLE 1126 #define IDC_CHEAT_DESCRIPTION 1127 #define IDC_KEYBOARD 1127 +#define IDC_ALLOWLEFTRIGHT 1127 #define IDC_CHEAT_ADDRESS 1128 +#define IDC_TOGL 1128 #define IDC_CHEAT_BYTE 1129 #define IDC_ADD_CHEAT 1130 #define IDC_CHEAT_LIST 1131 @@ -222,13 +231,16 @@ #define IDC_LABEL_B 1165 #define IDC_LABEL_A 1166 #define IDC_LABEL_Y 1167 +#define IDC_LABEL_RIGHT2 1167 #define IDC_LABEL_X 1168 #define IDC_LABEL_START 1169 #define IDC_LABEL_SELECT 1170 #define IDC_LABEL_L 1171 #define IDC_LABEL_R 1172 #define IDC_LABEL_UPLEFT 1173 +#define IDC_LABEL_R2 1173 #define IDC_LABEL_UPRIGHT 1174 +#define IDC_LABEL_R3 1174 #define IDC_LABEL_DOWNRIGHT 1175 #define IDC_LABEL_DOWNLEFT 1176 #define IDC_LABEL_FREEZE 1177 @@ -236,34 +248,100 @@ #define IDC_LABEL_SMAX 1179 #define IDC_LABEL_STURBO 1180 #define IDC_LABEL_ASRAM_TEXT 1181 +#define IDC_LABEL_UP2 1181 #define IDC_LABEL_SMAX_TEXT 1182 +#define IDC_LABEL_UP3 1182 #define IDC_LABEL_STURBO_TEXT 1183 +#define IDC_LABEL_UP4 1183 #define IDC_PORTNUMBLOCK 1184 +#define IDC_LABEL_UP5 1184 #define IDC_CLIENTSETTINGSBLOCK 1185 +#define IDC_LABEL_UP6 1185 #define IDC_SERVERSETTINGSBLOCK 1186 +#define IDC_LABEL_UP7 1186 #define IDC_LABEL_PORTNUM 1187 +#define IDC_LABEL_UP8 1187 #define IDC_LABEL_PAUSEINTERVAL 1188 +#define IDC_LABEL_UP9 1188 #define IDC_LABEL_PAUSEINTERVAL_TEXT 1189 +#define IDC_LABEL_UP10 1189 #define IDC_LABEL_MAXSKIP 1190 +#define IDC_LABEL_UP11 1190 #define IDC_LABEL_CHEAT_CODE 1191 +#define IDC_LABEL_UP12 1191 #define IDC_LABEL_CHEAT_DESCRIPTION 1192 +#define IDC_LABEL_UP13 1192 #define IDC_LABEL_CHEAT_ADDRESS 1193 +#define IDC_LABEL_UP14 1193 #define IDC_LABEL_CHEAT_BYTE 1194 +#define IDC_LABEL_UP15 1194 #define IDC_LABEL_SERVERADDY 1195 +#define IDC_LABEL_UP16 1195 +#define IDC_LABEL_UP17 1196 +#define IDC_LABEL_UP18 1197 +#define IDC_HEIGHT_EXTEND 1198 +#define IDC_LABEL_UP19 1198 +#define IDC_SPEEDDOWN 1199 +#define IDC_ASPECT 1199 +#define IDC_PAUSE 1200 #define IDC_RECORD_NOW 1201 +#define IDC_FRAMEADVANCE 1201 #define IDC_RECORD_RESET 1202 +#define IDC_SKIPUP 1202 #define IDC_JOY1 1203 +#define IDC_SKIPDOWN 1203 #define IDC_JOY2 1204 +#define IDC_SPEEDUP 1204 #define IDC_JOY3 1205 +#define IDC_SCOPETURBO 1205 #define IDC_JOY4 1206 +#define IDC_SCOPEPAUSE 1206 #define IDC_JOY5 1207 +#define IDC_FRAMECOUNT 1207 #define IDC_MOVIE_PATH 1208 +#define IDC_SAVE1 1208 #define IDC_BROWSE_MOVIE 1209 +#define IDC_SAVE2 1209 #define IDC_MOVIE_DATE 1210 +#define IDC_SAVE3 1210 #define IDC_MOVIE_LENGTH 1211 +#define IDC_SAVE4 1211 #define IDC_MOVIE_FRAMES 1212 +#define IDC_SAVE5 1212 #define IDC_MOVIE_RERECORD 1213 +#define IDC_SAVE6 1213 +#define IDC_SAVE7 1214 +#define IDC_SAVE8 1215 +#define IDC_LOADEDFROMMOVIE 1215 +#define IDC_SAVE9 1216 +#define IDC_MOVIEROMINFO 1216 +#define IDC_SAVE10 1217 +#define IDC_CURRENTROMINFO 1217 #define IDC_READONLY 1218 +#define IDC_SAVE11 1219 +#define IDC_DISPLAY_INPUT 1220 +#define IDC_SAVE12 1220 +#define IDC_SAVE13 1221 +#define IDC_SAVE14 1222 +#define IDC_SAVE15 1223 +#define IDC_SAVE16 1224 +#define IDC_SAVE17 1225 +#define IDC_SAVE18 1226 +#define IDC_SAVE19 1227 +#define IDC_SAVE20 1228 +#define IDC_LABEL_UP20 1229 +#define IDC_LABEL_UP21 1230 +#define IDC_FASTFORWARD 1231 +#define IDC_SHOWPRESSED 1232 +#define IDC_SCREENSHOT 1233 +#define IDC_LABEL_UP22 1234 +#define IDC_SLOTMINUS 1235 +#define IDC_LABEL_UP23 1236 +#define IDC_SLOTPLUS 1237 +#define IDC_LABEL_UP24 1238 +#define IDC_SLOTSAVE 1239 +#define IDC_LABEL_UP25 1240 +#define IDC_SLOTLOAD 1241 #define ID_FILE_EXIT 40001 #define ID_LANGUAGE_ENGLISH 40002 #define ID_LANGUAGE_NEDERLANDS 40003 @@ -380,14 +458,15 @@ #define ID_FILE_MOVIE_ENABLERECORDING 40116 #define ID_FILE_WRITE_AVI 40116 #define ID_FILE_STOP_AVI 40117 +#define ID_OPTIONS_KEYCUSTOM 40118 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 135 -#define _APS_NEXT_COMMAND_VALUE 40118 -#define _APS_NEXT_CONTROL_VALUE 1198 +#define _APS_NEXT_RESOURCE_VALUE 141 +#define _APS_NEXT_COMMAND_VALUE 40119 +#define _APS_NEXT_CONTROL_VALUE 1216 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff -NaHudr snes9x-1.43-src/rt_manif.bin snes9x-improvement7-src-dehacked/rt_manif.bin --- snes9x-1.43-src/rt_manif.bin 1970-01-01 02:00:00.000000000 +0200 +++ snes9x-improvement7-src-dehacked/rt_manif.bin 2005-03-20 23:46:36.000000000 +0200 @@ -0,0 +1,22 @@ + + + + Snes9x + + + + + + \ No newline at end of file diff -NaHudr snes9x-1.43-src/snes9x/.cvsignore snes9x-improvement7-src-dehacked/snes9x/.cvsignore --- snes9x-1.43-src/snes9x/.cvsignore 1970-01-01 02:00:00.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/.cvsignore 2005-03-20 23:46:31.000000000 +0200 @@ -0,0 +1,19 @@ +no_glide +no_opengl +c_fx +offsets +zsnes_fx +*.O +snes9x +dependencies +Makefile +config.cache +config.log +config.status +config.info +autom4te.cache +configure +build +vc60.pdb +*.Obj +conftezt.out.2 diff -NaHudr snes9x-1.43-src/snes9x/Makefile.in snes9x-improvement7-src-dehacked/snes9x/Makefile.in --- snes9x-1.43-src/snes9x/Makefile.in 2004-12-31 00:15:44.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/Makefile.in 2005-04-09 00:59:26.000000000 +0300 @@ -117,7 +117,7 @@ cpu.o sa1.o debug.o sdd1.o tile.o srtc.o gfx.o memmap.o clip.o \ dsp1.o ppu.o dma.o snes9x.o data.o globals.o \ $(SPC7110OBJ) $(OBC1OBJ) $(SETAOBJ) $(KREEDOBJ) $(SDD1OBJ) \ - $(CHEATOBJ) $(PLATFORMOBJ) $(SNAPOBJ) $(SCREENSHOTOBJ) $(MOVIEOBJ) + $(CHEATOBJ) $(PLATFORMOBJ) $(SNAPOBJ) $(SCREENSHOTOBJ) $(MOVIEOBJ) logger.o ifdef NETPLAY OBJECTS += netplay.o server.o diff -NaHudr snes9x-1.43-src/snes9x/TAGS snes9x-improvement7-src-dehacked/snes9x/TAGS --- snes9x-1.43-src/snes9x/TAGS 2004-12-31 00:15:48.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/TAGS 2005-03-20 23:46:31.000000000 +0200 @@ -1,2221 +1,2221 @@ - -dsp1emu.c,7108 -#define __OPT__36,1055 -#define __OPT06__37,1071 -FILE * LogFile 41,1108 -void Log_Message 43,1132 -void Start_Log 57,1361 -void Stop_Log 67,1518 -const unsigned short DSP1ROM[78,1621 -#define INCR 212,10344 -#define Angle(Angle213,10362 -#define Cos(Cos214,10411 -#define Sin(Sin215,10450 -#define PI 219,10516 -double CosTable2[220,10561 -double SinTable2[221,10585 -double Atan(224,10611 -short C4WFXVal;237,10976 -short C4WFYVal;238,10992 -short C4WFZVal;239,11008 -short C4WFX2Val;240,11024 -short C4WFY2Val;241,11041 -short C4WFDist;242,11058 -short C4WFScale;243,11074 -double tanval;244,11091 -double c4x,245,11106 -double c4x,c4y,245,11106 -double c4x,c4y,c4z;245,11106 -double c4x2,246,11126 -double c4x2,c4y2,246,11126 -double c4x2,c4y2,c4z2;246,11126 -void C4TransfWireFrame(248,11150 -void C4TransfWireFrame2(274,11787 -void C4CalcWireFrame(300,12386 -short C41FXVal;320,12841 -short C41FYVal;321,12857 -short C41FAngleRes;322,12873 -short C41FDist;323,12893 -short C41FDistVal;324,12909 -void C4Op1F(326,12929 -void C4Op15(341,13258 -void C4Op0D(348,13400 -void InitDSP(362,13899 -short Op00Multiplicand;377,14130 -short Op00Multiplier;378,14154 -short Op00Result;379,14176 -void DSPOp00(381,14195 -short Op20Multiplicand;390,14392 -short Op20Multiplier;391,14416 -short Op20Result;392,14438 -void DSPOp20(394,14457 -signed short Op10Coefficient;404,14671 -signed short Op10Exponent;405,14701 -signed short Op10CoefficientR;406,14728 -signed short Op10ExponentR;407,14759 -void DSP1_Inverse(409,14788 -void DSPOp10(458,15785 -short Op04Angle;466,16027 -short Op04Radius;467,16044 -short Op04Sin;468,16062 -short Op04Cos;469,16077 -const short DSP1_MulTable[471,16093 -const short DSP1_SinTable[505,18498 -short DSP1_Sin(539,20903 -short DSP1_Cos(550,21175 -void DSP1_Normalize(561,21444 -void DSP1_NormalizeDouble(585,21768 -short DSP1_Truncate(636,22493 -void DSPOp04(646,22683 -short Op0CA;652,22805 -short Op0CX1;653,22818 -short Op0CY1;654,22832 -short Op0CX2;655,22846 -short Op0CY2;656,22860 -void DSPOp0C(658,22875 -short CentreX;664,23053 -short CentreY;665,23068 -short VOffset;666,23083 -short VPlane_C;668,23099 -short VPlane_E;669,23115 -short SinAas;672,23161 -short CosAas;673,23175 -short SinAzs;674,23189 -short CosAzs;675,23203 -short SinAZS;678,23242 -short CosAZS;679,23257 -short SecAZS_C1;680,23271 -short SecAZS_E1;681,23288 -short SecAZS_C2;682,23305 -short SecAZS_E2;683,23322 -const short MaxAZS_Exp[685,23340 -void DSP1_Parameter(690,23505 -void DSP1_Raster(773,25447 -short Op02FX;798,25903 -short Op02FY;799,25917 -short Op02FZ;800,25931 -short Op02LFE;801,25945 -short Op02LES;802,25960 -short Op02AAS;803,25975 -short Op02AZS;804,25990 -short Op02VOF;805,26005 -short Op02VVA;806,26020 -short Op02CX;807,26035 -short Op02CY;808,26049 -void DSPOp02(810,26064 -short Op0AVS;815,26199 -short Op0AA;816,26213 -short Op0AB;817,26226 -short Op0AC;818,26239 -short Op0AD;819,26252 -void DSPOp0A(821,26266 -short Op06X;827,26351 -short Op06Y;828,26364 -short Op06Z;829,26377 -short Op06H;830,26390 -short Op06V;831,26403 -unsigned short Op06S;832,26416 -double ObjPX;834,26439 -double ObjPY;835,26453 -double ObjPZ;836,26467 -double ObjPX1;837,26481 -double ObjPY1;838,26496 -double ObjPZ1;839,26511 -double ObjPX2;840,26526 -double ObjPY2;841,26541 -double ObjPZ2;842,26556 -double DivideOp06;843,26571 -int Temp;844,26590 -int tanval2;845,26600 -void DSPOp06(848,26631 -void DSPOp06(906,28027 -short matrixC[965,29447 -short matrixB[966,29468 -short matrixA[967,29489 -short Op01m;969,29511 -short Op01Zr;970,29524 -short Op01Xr;971,29538 -short Op01Yr;972,29552 -short Op11m;973,29566 -short Op11Zr;974,29579 -short Op11Xr;975,29593 -short Op11Yr;976,29607 -short Op21m;977,29621 -short Op21Zr;978,29634 -short Op21Xr;979,29648 -short Op21Yr;980,29662 -void DSPOp01(982,29677 -void DSPOp11(1006,30621 -void DSPOp21(1030,31565 -short Op0DX;1054,32509 -short Op0DY;1055,32522 -short Op0DZ;1056,32535 -short Op0DF;1057,32548 -short Op0DL;1058,32561 -short Op0DU;1059,32574 -short Op1DX;1060,32587 -short Op1DY;1061,32600 -short Op1DZ;1062,32613 -short Op1DF;1063,32626 -short Op1DL;1064,32639 -short Op1DU;1065,32652 -short Op2DX;1066,32665 -short Op2DY;1067,32678 -short Op2DZ;1068,32691 -short Op2DF;1069,32704 -short Op2DL;1070,32717 -short Op2DU;1071,32730 -void DSPOp0D(1073,32744 -void DSPOp1D(1084,33203 -void DSPOp2D(1095,33659 -short Op03F;1106,34115 -short Op03L;1107,34128 -short Op03U;1108,34141 -short Op03X;1109,34154 -short Op03Y;1110,34167 -short Op03Z;1111,34180 -short Op13F;1112,34193 -short Op13L;1113,34206 -short Op13U;1114,34219 -short Op13X;1115,34232 -short Op13Y;1116,34245 -short Op13Z;1117,34258 -short Op23F;1118,34271 -short Op23L;1119,34284 -short Op23U;1120,34297 -short Op23X;1121,34310 -short Op23Y;1122,34323 -short Op23Z;1123,34336 -void DSPOp03(1125,34350 -void DSPOp13(1136,34806 -void DSPOp23(1147,35262 -short Op14Zr;1158,35718 -short Op14Xr;1159,35732 -short Op14Yr;1160,35746 -short Op14U;1161,35760 -short Op14F;1162,35773 -short Op14L;1163,35786 -short Op14Zrr;1164,35799 -short Op14Xrr;1165,35814 -short Op14Yrr;1166,35829 -void DSPOp14(1168,35845 -void DSP1_Target(1200,36572 -short Op0EH;1229,37075 -short Op0EV;1230,37088 -short Op0EX;1231,37101 -short Op0EY;1232,37114 -void DSPOp0E(1234,37128 -short Op0BX;1239,37192 -short Op0BY;1240,37205 -short Op0BZ;1241,37218 -short Op0BS;1242,37231 -short Op1BX;1243,37244 -short Op1BY;1244,37257 -short Op1BZ;1245,37270 -short Op1BS;1246,37283 -short Op2BX;1247,37296 -short Op2BY;1248,37309 -short Op2BZ;1249,37322 -short Op2BS;1250,37335 -void DSPOp0B(1252,37349 -void DSPOp1B(1261,37510 -void DSPOp2B(1271,37874 -short Op08X,1280,38035 -short Op08X,Op08Y,1280,38035 -short Op08X,Op08Y,Op08Z,1280,38035 -short Op08X,Op08Y,Op08Z,Op08Ll,1280,38035 -short Op08X,Op08Y,Op08Z,Op08Ll,Op08Lh;1280,38035 -void DSPOp08(1282,38075 -short Op18X,1294,38376 -short Op18X,Op18Y,1294,38376 -short Op18X,Op18Y,Op18Z,1294,38376 -short Op18X,Op18Y,Op18Z,Op18R,1294,38376 -short Op18X,Op18Y,Op18Z,Op18R,Op18D;1294,38376 -void DSPOp18(1296,38414 -short Op38X,1305,38630 -short Op38X,Op38Y,1305,38630 -short Op38X,Op38Y,Op38Z,1305,38630 -short Op38X,Op38Y,Op38Z,Op38R,1305,38630 -short Op38X,Op38Y,Op38Z,Op38R,Op38D;1305,38630 -void DSPOp38(1307,38668 -short Op28X;1317,38896 -short Op28Y;1318,38909 -short Op28Z;1319,38922 -short Op28R;1320,38935 -void DSPOp28(1322,38949 -short Op1CX,1348,39493 -short Op1CX,Op1CY,1348,39493 -short Op1CX,Op1CY,Op1CZ;1348,39493 -short Op1CXBR,1349,39518 -short Op1CXBR,Op1CYBR,1349,39518 -short Op1CXBR,Op1CYBR,Op1CZBR,1349,39518 -short Op1CXBR,Op1CYBR,Op1CZBR,Op1CXAR,1349,39518 -short Op1CXBR,Op1CYBR,Op1CZBR,Op1CXAR,Op1CYAR,1349,39518 -short Op1CXBR,Op1CYBR,Op1CZBR,Op1CXAR,Op1CYAR,Op1CZAR;1349,39518 -short Op1CX1;1350,39573 -short Op1CY1;1351,39587 -short Op1CZ1;1352,39601 -short Op1CX2;1353,39615 -short Op1CY2;1354,39629 -short Op1CZ2;1355,39643 -void DSPOp1C(1357,39658 -unsigned short Op0FRamsize;1379,40455 -unsigned short Op0FPass;1380,40483 -void DSPOp0F(1382,40509 -short Op2FUnknown;1391,40636 -short Op2FSize;1392,40655 -void DSPOp2F(1394,40672 - -dsp2emu.c,439 -uint16 DSP2Op09Word1=91,3608 -uint16 DSP2Op09Word2=92,3632 -bool DSP2Op05HasLen=93,3656 -int DSP2Op05Len=94,3683 -bool DSP2Op06HasLen=95,3702 -int DSP2Op06Len=96,3729 -uint8 DSP2Op05Transparent=97,3748 -void DSP2_Op05 99,3778 -void DSP2_Op01 145,4917 -void DSP2_Op06 205,6224 -bool DSP2Op0DHasLen=219,6440 -int DSP2Op0DOutLen=220,6467 -int DSP2Op0DInLen=221,6489 -void DSP2_Op0D(227,6601 -void DSP2_Op0D(256,7429 -void DSP2_Op0D(304,8967 - -3d.h,89 -#define _3D_H_91,3622 -} OpenGLData;OpenGLData115,4152 -} GlideData;GlideData140,4612 - -65c816.h,1740 -#define _65c816_h_91,3626 -#define AL 93,3646 -#define AH 94,3663 -#define XL 95,3680 -#define XH 96,3697 -#define YL 97,3714 -#define YH 98,3731 -#define SL 99,3748 -#define SH 100,3765 -#define DL 101,3782 -#define DH 102,3799 -#define PL 103,3816 -#define PH 104,3833 -#define Carry 106,3851 -#define Zero 107,3873 -#define IRQ 108,3895 -#define Decimal 109,3917 -#define IndexFlag 110,3939 -#define MemoryFlag 111,3961 -#define Overflow 112,3983 -#define Negative 113,4005 -#define Emulation 114,4027 -#define ClearCarry(ClearCarry116,4050 -#define SetCarry(SetCarry117,4089 -#define SetZero(SetZero118,4126 -#define ClearZero(ClearZero119,4161 -#define SetIRQ(SetIRQ120,4198 -#define ClearIRQ(ClearIRQ121,4237 -#define SetDecimal(SetDecimal122,4279 -#define ClearDecimal(ClearDecimal123,4326 -#define SetIndex(SetIndex124,4376 -#define ClearIndex(ClearIndex125,4423 -#define SetMemory(SetMemory126,4473 -#define ClearMemory(ClearMemory127,4522 -#define SetOverflow(SetOverflow128,4574 -#define ClearOverflow(ClearOverflow129,4617 -#define SetNegative(SetNegative130,4662 -#define ClearNegative(ClearNegative131,4708 -#define CheckZero(CheckZero133,4754 -#define CheckCarry(CheckCarry134,4792 -#define CheckIRQ(CheckIRQ135,4827 -#define CheckDecimal(CheckDecimal136,4867 -#define CheckIndex(CheckIndex137,4915 -#define CheckMemory(CheckMemory138,4963 -#define CheckOverflow(CheckOverflow139,5013 -#define CheckNegative(CheckNegative140,5054 -#define CheckEmulation(CheckEmulation141,5102 -#define ClearFlags(ClearFlags143,5156 -#define SetFlags(SetFlags144,5202 -#define CheckFlag(CheckFlag145,5248 -} pair;pair155,5410 -struct SRegisters{SRegisters157,5419 -EXTERN_C struct SRegisters Registers;169,5571 - -apu.h,1275 -#define _apu_h_91,3623 -struct SIAPUSIAPU95,3661 -struct SAPUSAPU119,4133 -EXTERN_C struct SAPU APU;134,4421 -EXTERN_C struct SIAPU IAPU;135,4447 -STATIC inline void S9xAPUUnpackStatus(139,4568 -STATIC inline void S9xAPUPackStatus(146,4791 -#define APU_VOL_LEFT 174,5663 -#define APU_VOL_RIGHT 175,5689 -#define APU_P_LOW 176,5716 -#define APU_P_HIGH 177,5739 -#define APU_SRCN 178,5763 -#define APU_ADSR1 179,5785 -#define APU_ADSR2 180,5808 -#define APU_GAIN 181,5831 -#define APU_ENVX 182,5853 -#define APU_OUTX 183,5875 -#define APU_MVOL_LEFT 185,5898 -#define APU_MVOL_RIGHT 186,5925 -#define APU_EVOL_LEFT 187,5953 -#define APU_EVOL_RIGHT 188,5980 -#define APU_KON 189,6008 -#define APU_KOFF 190,6029 -#define APU_FLG 191,6051 -#define APU_ENDX 192,6072 -#define APU_EFB 194,6095 -#define APU_PMON 195,6116 -#define APU_NON 196,6138 -#define APU_EON 197,6159 -#define APU_DIR 198,6180 -#define APU_ESA 199,6201 -#define APU_EDL 200,6222 -#define APU_C0 202,6244 -#define APU_C1 203,6264 -#define APU_C2 204,6284 -#define APU_C3 205,6304 -#define APU_C4 206,6324 -#define APU_C5 207,6344 -#define APU_C6 208,6364 -#define APU_C7 209,6384 -#define APU_SOFT_RESET 211,6405 -#define APU_MUTE 212,6433 -#define APU_ECHO_DISABLED 213,6455 -#define FREQUENCY_MASK 215,6487 - -apumem.h,177 -#define _apumemory_h_91,3629 -INLINE uint8 S9xAPUGetByteZ 98,3723 -INLINE void S9xAPUSetByteZ 130,4392 -INLINE uint8 S9xAPUGetByte 159,4984 -INLINE void S9xAPUSetByte 192,5656 - -c4.h,23 -#define _C4_H_90,3621 - -cheats.h,704 -#define _CHEATS_H_90,3625 -struct SCheatSCheat92,3645 -#define MAX_CHEATS 102,3791 -struct SCheatDataSCheatData104,3814 - S9X_LESS_THAN,121,4213 - S9X_LESS_THAN, S9X_GREATER_THAN,121,4213 - S9X_LESS_THAN, S9X_GREATER_THAN, S9X_LESS_THAN_OR_EQUAL,121,4213 - S9X_GREATER_THAN_OR_EQUAL,122,4274 - S9X_GREATER_THAN_OR_EQUAL, S9X_EQUAL,122,4274 - S9X_GREATER_THAN_OR_EQUAL, S9X_EQUAL, S9X_NOT_EQUAL122,4274 -} S9xCheatComparisonType;S9xCheatComparisonType123,4330 - S9X_8_BITS,127,4372 - S9X_8_BITS, S9X_16_BITS,127,4372 - S9X_8_BITS, S9X_16_BITS, S9X_24_BITS,127,4372 - S9X_8_BITS, S9X_16_BITS, S9X_24_BITS, S9X_32_BITS127,4372 -} S9xCheatDataSize;S9xCheatDataSize128,4426 - -copyright.h,0 - -cpuaddr.h,1199 -#define _CPUADDR_H_91,3627 -EXTERN_C long OpAddress;93,3648 - NONE 96,3689 - READ 97,3703 - WRITE 98,3717 - MODIFY 99,3732 - JUMP 100,3748 -} AccessMode;AccessMode101,3761 -STATIC inline void Immediate8 103,3776 -STATIC inline void Immediate16 109,3894 -STATIC inline void Relative 115,4016 -STATIC inline void RelativeLong 124,4212 -STATIC inline void AbsoluteIndexedIndirect 139,4544 -STATIC inline void AbsoluteIndirectLong 155,4998 -STATIC inline void AbsoluteIndirect 175,5488 -STATIC inline void Absolute 193,5898 -STATIC inline void AbsoluteLong 207,6221 -STATIC inline void Direct(221,6566 -STATIC inline void DirectIndirectIndexed 231,6812 -STATIC inline void DirectIndirectIndexedLong 248,7292 -STATIC inline void DirectIndexedIndirect(264,7775 -STATIC inline void DirectIndexedX 284,8232 -STATIC inline void DirectIndexedY 302,8612 -STATIC inline void AbsoluteIndexedX 319,8991 -STATIC inline void AbsoluteIndexedY 336,9461 -STATIC inline void AbsoluteLongIndexedX 353,9921 -STATIC inline void DirectIndirect 367,10319 -STATIC inline void DirectIndirectLong 381,10685 -STATIC inline void StackRelative 396,11126 -STATIC inline void StackRelativeIndirectIndexed 406,11355 - -cpuexec.h,359 -#define _CPUEXEC_H_91,3627 -#define DO_HBLANK_CHECK(DO_HBLANK_CHECK96,3705 -struct SOpcodes SOpcodes100,3800 -struct SICPUSICPU108,3914 -STATIC inline void S9xUnpackStatus(141,4640 -STATIC inline void S9xPackStatus(149,4870 -STATIC inline void CLEAR_IRQ_SOURCE 156,5085 -STATIC inline void S9xFixCycles 163,5220 -STATIC inline void S9xReschedule 194,5630 - -cpumacro.h,2229 -#define _CPUMACRO_H_91,3628 -STATIC inline void SetZN16 93,3650 -STATIC inline void SetZN8 99,3766 -STATIC inline void ADC8 105,3860 -STATIC inline void ADC16 162,4730 -STATIC inline void AND16 238,5920 -STATIC inline void AND8 244,6027 -STATIC inline void A_ASL16 250,6130 -STATIC inline void A_ASL8 260,6321 -STATIC inline void ASL16 270,6508 -STATIC inline void ASL8 284,6828 -STATIC inline void BIT16 296,7063 -STATIC inline void BIT8 304,7270 -STATIC inline void CMP16 312,7447 -STATIC inline void CMP8 320,7611 -STATIC inline void CMX16 328,7773 -STATIC inline void CMX8 336,7937 -STATIC inline void CMY16 344,8099 -STATIC inline void CMY8 352,8263 -STATIC inline void A_DEC16 360,8425 -STATIC inline void A_DEC8 373,8622 -STATIC inline void DEC16 386,8815 -STATIC inline void DEC8 402,9137 -STATIC inline void EOR16 416,9376 -STATIC inline void EOR8 422,9483 -STATIC inline void A_INC16 428,9586 -STATIC inline void A_INC8 441,9783 -STATIC inline void INC16 454,9976 -STATIC inline void INC8 470,10298 -STATIC inline void LDA16 484,10537 -STATIC inline void LDA8 490,10643 -STATIC inline void LDX16 496,10745 -STATIC inline void LDX8 502,10851 -STATIC inline void LDY16 508,10953 -STATIC inline void LDY8 514,11059 -STATIC inline void A_LSR16 520,11161 -STATIC inline void A_LSR8 530,11342 -STATIC inline void LSR16 540,11519 -STATIC inline void LSR8 554,11829 -STATIC inline void ORA16 566,12054 -STATIC inline void ORA8 572,12161 -STATIC inline void A_ROL16 578,12264 -STATIC inline void A_ROL8 589,12510 -STATIC inline void ROL16 602,12772 -STATIC inline void ROL8 617,13140 -STATIC inline void A_ROR16 630,13420 -STATIC inline void A_ROR8 643,13705 -STATIC inline void ROR16 655,13973 -STATIC inline void ROR8 670,14363 -STATIC inline void SBC16 683,14659 -STATIC inline void SBC8 753,15816 -STATIC inline void STA16 804,16686 -STATIC inline void STA8 809,16762 -STATIC inline void STX16 814,16836 -STATIC inline void STX8 819,16912 -STATIC inline void STY16 824,16986 -STATIC inline void STY8 829,17062 -STATIC inline void STZ16 834,17136 -STATIC inline void STZ8 839,17200 -STATIC inline void TSB16 844,17263 -STATIC inline void TSB8 857,17580 -STATIC inline void TRB16 868,17805 -STATIC inline void TRB8 881,18123 - -cpuops.h,72 -#define _CPUOPS_H_91,3626 -#define CHECK_FOR_IRQ(CHECK_FOR_IRQ95,3692 - -debug.h,67 -#define _DEBUG_H_91,3625 -struct SBreakPoint{SBreakPoint100,3770 - -display.h,28 -#define _DISPLAY_H_91,3627 - -dma.h,24 -#define _DMA_H_91,3623 - -dsp1.h,54 -#define _DSP1_H_91,3625 -struct SDSP1 SDSP1109,4085 - -dsp4.h,1454 -int block;2,10 -int8 DSP4_Logic;6,85 -const int16 PLANE_START 9,151 -int16 view_plane;11,209 -int16 far_plane;12,251 -int16 segments;13,303 -int16 raster;14,354 -int16 project_x;16,400 -int16 project_y;17,444 -int16 project_centerx;19,490 -int16 project_centery;20,541 -int16 project_x1;22,594 -int16 project_x1low;23,639 -int16 project_y1;24,680 -int16 project_y1low;25,725 -int16 project_x2;27,768 -int16 project_y2;28,820 -int16 project_pitchx;30,874 -int16 project_pitchxlow;31,915 -int16 project_pitchy;32,958 -int16 project_pitchylow;33,999 -int16 project_focalx;35,1044 -int16 project_focaly;36,1110 -int16 project_ptr;38,1178 -int16 center_x;41,1247 -int16 center_y;42,1293 -int16 viewport_left;43,1339 -int16 viewport_right;44,1385 -int16 viewport_top;45,1433 -int16 viewport_bottom;46,1478 -int16 sprite_x;49,1550 -int16 sprite_y;50,1601 -int16 sprite_offset;51,1652 -int8 sprite_type;52,1699 -bool8 sprite_size;53,1742 -int16 path_clipRight[56,1812 -int16 path_clipLeft[57,1867 -int16 path_pos[58,1922 -int16 path_ptr[59,1970 -int16 path_raster[60,2021 -int16 path_top[61,2065 -int16 path_y[63,2107 -int16 path_x[64,2152 -int16 path_plane[65,2193 -int16 multi_index1;68,2262 -int16 multi_index2;69,2304 -bool8 op09_mode;70,2346 -int16 multi_focaly[73,2407 -int16 multi_farplane[74,2452 -int16 multi_raster[75,2506 -int8 op06_OAM[78,2568 -int8 op06_index;79,2615 -int8 op06_offset;80,2662 -short MaxTilesPerRow 82,2713 -short RowCount[83,2740 - -font.h,94 -static char *font[89,3606 -static int font_width 146,10762 -static int font_height 147,10789 - -fxemu.h,630 -#define _FXEMU_H_ 90,3624 -#define snes9x_types_defined94,3714 -typedef unsigned char uint8;uint896,3744 -typedef unsigned short uint16;uint1697,3773 -typedef unsigned int uint32;uint3298,3804 -typedef unsigned char bool8;bool899,3833 -typedef signed char int8;int8100,3862 -typedef short int16;int16101,3888 -typedef int int32;int32102,3909 -#define TRUE 106,3949 -#define FALSE 110,3986 -struct FxInit_sFxInit_s114,4094 -#define FX_FLAG_ADDRESS_CHECKING 164,5601 -#define FX_FLAG_ROM_BUFFER 165,5639 -#define FX_BREAKPOINT 168,5739 -#define FX_ERROR_ILLEGAL_ADDRESS 169,5766 -#define OPCODE_BYTES(OPCODE_BYTES172,5849 - -fxinst.h,2821 -#define _FXINST_H_ 90,3625 -#define FX_RAM_BANKS 211,7076 -struct FxRegs_sFxRegs_s219,7260 -#define FxRegs_s_null 286,9947 -#define GSU_R0 295,10337 -#define GSU_R1 296,10358 -#define GSU_R2 297,10379 -#define GSU_R3 298,10400 -#define GSU_R4 299,10421 -#define GSU_R5 300,10442 -#define GSU_R6 301,10463 -#define GSU_R7 302,10484 -#define GSU_R8 303,10505 -#define GSU_R9 304,10526 -#define GSU_R10 305,10547 -#define GSU_R11 306,10569 -#define GSU_R12 307,10591 -#define GSU_R13 308,10613 -#define GSU_R14 309,10635 -#define GSU_R15 310,10657 -#define GSU_SFR 311,10679 -#define GSU_BRAMR 312,10701 -#define GSU_PBR 313,10725 -#define GSU_ROMBR 314,10747 -#define GSU_CFGR 315,10771 -#define GSU_SCBR 316,10794 -#define GSU_CLSR 317,10817 -#define GSU_SCMR 318,10840 -#define GSU_VCR 319,10863 -#define GSU_RAMBR 320,10885 -#define GSU_CBR 321,10909 -#define GSU_CACHERAM 322,10931 -#define FLG_Z 325,10975 -#define FLG_CY 326,10996 -#define FLG_S 327,11018 -#define FLG_OV 328,11039 -#define FLG_G 329,11061 -#define FLG_R 330,11082 -#define FLG_ALT1 331,11103 -#define FLG_ALT2 332,11127 -#define FLG_IL 333,11151 -#define FLG_IH 334,11174 -#define FLG_B 335,11197 -#define FLG_IRQ 336,11219 -#define TF(TF339,11260 -#define CF(CF340,11302 -#define SF(SF341,11346 -#define TS(TS344,11441 -#define ALT0 347,11566 -#define ALT1 348,11602 -#define ALT2 349,11637 -#define ALT3 350,11672 -#define SEX16(SEX16353,11749 -#define SEX8(SEX8354,11788 -#define USEX16(USEX16357,11870 -#define USEX8(USEX8358,11912 -#define SUSEX16(SUSEX16360,11953 -#define TSZ(TSZ363,12029 -#define CLRFLAGS 366,12111 -#define RAM(RAM369,12234 -#define ROM(ROM372,12307 -#define PIPE 375,12397 -#define PRGBANK(PRGBANK378,12467 -#define FETCHPIPE 382,12549 -#define FETCHPIPE 384,12642 -#define ABS(ABS388,12703 -#define SREG 391,12765 -#define DREG 394,12827 -#define READR14399,12901 -#define TESTR14402,12951 -#define READR14 407,12990 -#define TESTR14 410,13060 -#define R0 415,13142 -#define R1 416,13166 -#define R2 417,13190 -#define R3 418,13214 -#define R4 419,13238 -#define R5 420,13262 -#define R6 421,13286 -#define R7 422,13310 -#define R8 423,13334 -#define R9 424,13358 -#define R10 425,13382 -#define R11 426,13408 -#define R12 427,13434 -#define R13 428,13460 -#define R14 429,13486 -#define R15 430,13512 -#define SFR 431,13538 -#define PBR 432,13565 -#define ROMBR 433,13593 -#define RAMBR 434,13623 -#define CBR 435,13653 -#define SCBR 436,13683 -#define SCMR 437,13729 -#define COLR 438,13775 -#define POR 439,13802 -#define BRAMR 440,13833 -#define VCR 441,13881 -#define CFGR 442,13925 -#define CLSR 443,13971 -#define FX_STEP 446,14091 -#define FX_FUNCTION_RUN 449,14220 -#define FX_FUNCTION_RUN_TO_BREAKPOINT 450,14248 -#define FX_FUNCTION_STEP_OVER 451,14288 -#define BRANCH_DELAY_RELATIVE472,15061 - -getset.h,281 -#define _GETSET_H_91,3626 -INLINE uint8 S9xGetByte 106,3816 -INLINE uint16 S9xGetWord 197,6063 -INLINE void S9xSetByte 320,9837 -INLINE void S9xSetWord 436,12378 -INLINE uint8 *GetBasePointer 594,16671 -INLINE uint8 *S9xGetMemPointer 660,18406 -INLINE void S9xSetPCBase 714,20029 - -gfx.h,1072 -#define _GFX_H_91,3623 -struct SGFX{SGFX96,3679 -struct SLineData SLineData155,5280 -#define H_FLIP 162,5364 -#define V_FLIP 163,5386 -#define BLANK_TILE 164,5408 -struct SBGSBG166,5430 -struct SLineMatrixDataSLineMatrixData184,5726 -#define SWAP_DWORD(SWAP_DWORD208,6279 -#define READ_2BYTES(READ_2BYTES212,6448 -#define WRITE_2BYTES(WRITE_2BYTES213,6489 -#define READ_2BYTES(READ_2BYTES216,6561 -#define WRITE_2BYTES(WRITE_2BYTES217,6631 -#define READ_2BYTES(READ_2BYTES220,6745 -#define WRITE_2BYTES(WRITE_2BYTES221,6815 -#define SUB_SCREEN_DEPTH 226,6940 -#define MAIN_SCREEN_DEPTH 227,6967 -#define COLOR_ADD(COLOR_ADD230,7030 -#define COLOR_ADD(COLOR_ADD235,7196 -#define COLOR_ADD1_2(COLOR_ADD1_2242,7412 -#define COLOR_SUB(COLOR_SUB248,7635 -#define COLOR_SUB(COLOR_SUB252,7792 -inline uint16 COLOR_SUB(259,8038 -#define COLOR_SUB1_2(COLOR_SUB1_2279,8422 -typedef void (*NormalTileRenderer)NormalTileRenderer283,8542 -typedef void (*ClippedTileRenderer)ClippedTileRenderer285,8652 -typedef void (*LargePixelRenderer)LargePixelRenderer288,8805 - -memmap.h,2552 -#define _memmap_h_91,3626 -#define READ_WORD(READ_WORD96,3695 -#define READ_DWORD(READ_DWORD97,3734 -#define WRITE_WORD(WRITE_WORD98,3774 -#define WRITE_DWORD(WRITE_DWORD99,3823 -#define READ_3WORD(READ_3WORD101,3874 -#define WRITE_3WORD(WRITE_3WORD102,3927 -#define READ_WORD(READ_WORD107,4062 -#define READ_DWORD(READ_DWORD109,4140 -#define WRITE_WORD(WRITE_WORD113,4302 -#define WRITE_DWORD(WRITE_DWORD115,4408 -#define WRITE_3WORD(WRITE_3WORD119,4676 -#define READ_3WORD(READ_3WORD122,4873 -#define MEMMAP_BLOCK_SIZE 127,5030 -#define MEMMAP_NUM_BLOCKS 128,5065 -#define MEMMAP_BLOCKS_PER_BANK 129,5123 -#define MEMMAP_SHIFT 130,5184 -#define MEMMAP_MASK 131,5208 -#define MEMMAP_MAX_SDD1_LOGGED_ENTRIES 132,5252 -#define NOPE 135,5329 -#define YEAH 136,5344 -#define BIGFIRST 137,5359 -#define SMALLFIRST 138,5378 -enum file_formats file_formats141,5423 -enum file_formats { FILE_ZIP,141,5423 -enum file_formats { FILE_ZIP, FILE_RAR,141,5423 -enum file_formats { FILE_ZIP, FILE_RAR, FILE_JMA,141,5423 -enum file_formats { FILE_ZIP, FILE_RAR, FILE_JMA, FILE_DEFAULT 141,5423 -class CMemory CMemory143,5490 - MAP_PPU,CMemory::MAP_PPU198,6999 - MAP_PPU, MAP_CPU,CMemory::MAP_CPU198,6999 - MAP_PPU, MAP_CPU, MAP_DSP,CMemory::MAP_DSP198,6999 - MAP_PPU, MAP_CPU, MAP_DSP, MAP_LOROM_SRAM,CMemory::MAP_LOROM_SRAM198,6999 - MAP_PPU, MAP_CPU, MAP_DSP, MAP_LOROM_SRAM, MAP_HIROM_SRAM,CMemory::MAP_HIROM_SRAM198,6999 - MAP_NONE,CMemory::MAP_NONE199,7059 - MAP_NONE, MAP_DEBUG,CMemory::MAP_DEBUG199,7059 - MAP_NONE, MAP_DEBUG, MAP_C4,CMemory::MAP_C4199,7059 - MAP_NONE, MAP_DEBUG, MAP_C4, MAP_BWRAM,CMemory::MAP_BWRAM199,7059 - MAP_NONE, MAP_DEBUG, MAP_C4, MAP_BWRAM, MAP_BWRAM_BITMAP,CMemory::MAP_BWRAM_BITMAP199,7059 - MAP_BWRAM_BITMAP2,CMemory::MAP_BWRAM_BITMAP2200,7118 - MAP_BWRAM_BITMAP2, MAP_SA1RAM,CMemory::MAP_SA1RAM200,7118 - MAP_BWRAM_BITMAP2, MAP_SA1RAM, MAP_SPC7110_ROM,CMemory::MAP_SPC7110_ROM200,7118 - MAP_BWRAM_BITMAP2, MAP_SA1RAM, MAP_SPC7110_ROM, MAP_SPC7110_DRAM,CMemory::MAP_SPC7110_DRAM200,7118 - MAP_RONLY_SRAM,CMemory::MAP_RONLY_SRAM201,7185 - MAP_RONLY_SRAM, MAP_OBC_RAM,CMemory::MAP_OBC_RAM201,7185 - MAP_RONLY_SRAM, MAP_OBC_RAM, MAP_SETA_DSP,CMemory::MAP_SETA_DSP201,7185 - MAP_RONLY_SRAM, MAP_OBC_RAM, MAP_SETA_DSP, MAP_SETA_RISC,CMemory::MAP_SETA_RISC201,7185 - MAP_RONLY_SRAM, MAP_OBC_RAM, MAP_SETA_DSP, MAP_SETA_RISC, MAP_LASTCMemory::MAP_LAST201,7185 - enum { MAX_ROM_SIZE CMemory::MAX_ROM_SIZE203,7260 - enum { MAX_ROM_SIZE = 0x800000 CMemory::x800000203,7260 -#define INLINE 291,9341 - -messages.h,1138 -#define _messages_h_91,3628 - S9X_TRACE,95,3707 - S9X_DEBUG,96,3722 - S9X_WARNING,97,3737 - S9X_INFO,98,3754 - S9X_ERROR,99,3768 - S9X_FATAL_ERROR100,3783 - S9X_ROM_INFO,105,3847 - S9X_HEADERS_INFO,106,3865 - S9X_ROM_CONFUSING_FORMAT_INFO,107,3887 - S9X_ROM_INTERLEAVED_INFO,108,3922 - S9X_SOUND_DEVICE_OPEN_FAILED,109,3952 - S9X_APU_STOPPED,110,3986 - S9X_USAGE,111,4007 - S9X_GAME_GENIE_CODE_ERROR,112,4022 - S9X_ACTION_REPLY_CODE_ERROR,113,4053 - S9X_GOLD_FINGER_CODE_ERROR,114,4086 - S9X_DEBUG_OUTPUT,115,4118 - S9X_DMA_TRACE,116,4140 - S9X_HDMA_TRACE,117,4159 - S9X_WRONG_FORMAT,118,4179 - S9X_WRONG_VERSION,119,4201 - S9X_ROM_NOT_FOUND,120,4224 - S9X_FREEZE_FILE_NOT_FOUND,121,4247 - S9X_PPU_TRACE,122,4278 - S9X_TRACE_DSP1,123,4297 - S9X_FREEZE_ROM_NAME,124,4317 - S9X_HEADER_WARNING,125,4342 - S9X_NETPLAY_NOT_SERVER,126,4366 - S9X_FREEZE_FILE_INFO,127,4394 - S9X_TURBO_MODE,128,4420 - S9X_SOUND_NOT_BUILT,129,4440 - S9X_MOVIE_INFO,130,4465 - S9X_WRONG_MOVIE_SNAPSHOT,131,4482 - S9X_NOT_A_MOVIE_SNAPSHOT,132,4509 - S9X_AVI_INFO133,4536 - -missing.h,127 -#define _MISSING_H_91,3627 -struct HDMAHDMA93,3648 -struct MissingMissing106,3908 -EXTERN_C struct Missing missing;162,5179 - -movie.h,341 -#define _MOVIE_H_92,3682 -# define SUCCESS 99,3775 -# define WRONG_FORMAT 100,3795 -# define WRONG_VERSION 101,3823 -# define FILE_NOT_FOUND 102,3852 -#define MOVIE_OPT_FROM_SNAPSHOT 105,3890 -#define MOVIE_OPT_FROM_RESET 106,3924 -#define MOVIE_OPT_PAL 107,3960 -#define MOVIE_MAX_METADATA 108,3999 -struct MovieInfoMovieInfo111,4047 - -netplay.h,1648 -#define _NETPLAY_H_91,3627 -#define NP_VERSION 110,3927 -#define NP_JOYPAD_HIST_SIZE 111,3949 -#define NP_DEFAULT_PORT 112,3981 -#define NP_MAX_CLIENTS 114,4011 -#define NP_SERV_MAGIC 116,4037 -#define NP_CLNT_MAGIC 117,4063 -#define NP_CLNT_HELLO 119,4090 -#define NP_CLNT_JOYPAD 120,4114 -#define NP_CLNT_RESET 121,4139 -#define NP_CLNT_PAUSE 122,4163 -#define NP_CLNT_LOAD_ROM 123,4187 -#define NP_CLNT_ROM_IMAGE 124,4214 -#define NP_CLNT_FREEZE_FILE 125,4242 -#define NP_CLNT_SRAM_DATA 126,4272 -#define NP_CLNT_READY 127,4300 -#define NP_CLNT_LOADED_ROM 128,4324 -#define NP_CLNT_RECEIVED_ROM_IMAGE 129,4353 -#define NP_CLNT_WAITING_FOR_ROM_IMAGE 130,4391 -#define NP_SERV_HELLO 132,4433 -#define NP_SERV_JOYPAD 133,4457 -#define NP_SERV_RESET 134,4482 -#define NP_SERV_PAUSE 135,4506 -#define NP_SERV_LOAD_ROM 136,4530 -#define NP_SERV_ROM_IMAGE 137,4557 -#define NP_SERV_FREEZE_FILE 138,4585 -#define NP_SERV_SRAM_DATA 139,4615 -#define NP_SERV_READY 140,4643 -struct SNPClientSNPClient142,4668 - NP_SERVER_SEND_ROM_IMAGE,157,4956 - NP_SERVER_SYNC_ALL,158,4986 - NP_SERVER_SYNC_CLIENT,159,5010 - NP_SERVER_SEND_FREEZE_FILE_ALL,160,5037 - NP_SERVER_SEND_ROM_LOAD_REQUEST_ALL,161,5073 - NP_SERVER_RESET_ALL,162,5114 - NP_SERVER_SEND_SRAM_ALL,163,5139 - NP_SERVER_SEND_SRAM164,5168 -#define NP_MAX_TASKS 167,5196 -struct NPServerTaskNPServerTask169,5221 -struct SNPServerSNPServer175,5281 -#define NP_MAX_ACTION_LEN 193,5708 -struct SNetPlaySNetPlay195,5739 -extern "C" struct SNetPlay NetPlay;228,6721 -#define WRITE_LONG(WRITE_LONG236,6852 -#define READ_LONG(READ_LONG243,7026 -#define S9xGetMilliTime 280,8281 - -obc1.h,25 -#define _OBC1_H_91,3624 - -pixform.h,7535 -#define _PIXFORM_H_91,3627 -enum { RGB565,95,3673 -enum { RGB565, RGB555,95,3673 -enum { RGB565, RGB555, BGR565,95,3673 -enum { RGB565, RGB555, BGR565, BGR555,95,3673 -enum { RGB565, RGB555, BGR565, BGR555, GBR565,95,3673 -enum { RGB565, RGB555, BGR565, BGR555, GBR565, GBR555,95,3673 -enum { RGB565, RGB555, BGR565, BGR555, GBR565, GBR555, RGB5551 95,3673 -#define BUILD_PIXEL(BUILD_PIXEL97,3740 -#define BUILD_PIXEL2(BUILD_PIXEL298,3797 -#define DECOMPOSE_PIXEL(DECOMPOSE_PIXEL99,3856 -#define BUILD_PIXEL_RGB565(BUILD_PIXEL_RGB565127,4671 -#define BUILD_PIXEL2_RGB565(BUILD_PIXEL2_RGB565128,4756 -#define DECOMPOSE_PIXEL_RGB565(DECOMPOSE_PIXEL_RGB565129,4842 -#define SPARE_RGB_BIT_MASK_RGB565 130,4953 -#define MAX_RED_RGB565 132,4997 -#define MAX_GREEN_RGB565 133,5026 -#define MAX_BLUE_RGB565 134,5056 -#define RED_LOW_BIT_MASK_RGB565 135,5086 -#define GREEN_LOW_BIT_MASK_RGB565 136,5127 -#define BLUE_LOW_BIT_MASK_RGB565 137,5168 -#define RED_HI_BIT_MASK_RGB565 138,5209 -#define GREEN_HI_BIT_MASK_RGB565 139,5250 -#define BLUE_HI_BIT_MASK_RGB565 140,5291 -#define FIRST_COLOR_MASK_RGB565 141,5332 -#define SECOND_COLOR_MASK_RGB565 142,5373 -#define THIRD_COLOR_MASK_RGB565 143,5414 -#define ALPHA_BITS_MASK_RGB565 144,5455 -#define BUILD_PIXEL_RGB555(BUILD_PIXEL_RGB555147,5518 -#define BUILD_PIXEL2_RGB555(BUILD_PIXEL2_RGB555148,5603 -#define DECOMPOSE_PIXEL_RGB555(DECOMPOSE_PIXEL_RGB555149,5689 -#define SPARE_RGB_BIT_MASK_RGB555 150,5800 -#define MAX_RED_RGB555 152,5845 -#define MAX_GREEN_RGB555 153,5874 -#define MAX_BLUE_RGB555 154,5904 -#define RED_LOW_BIT_MASK_RGB555 155,5934 -#define GREEN_LOW_BIT_MASK_RGB555 156,5975 -#define BLUE_LOW_BIT_MASK_RGB555 157,6016 -#define RED_HI_BIT_MASK_RGB555 158,6057 -#define GREEN_HI_BIT_MASK_RGB555 159,6098 -#define BLUE_HI_BIT_MASK_RGB555 160,6139 -#define FIRST_COLOR_MASK_RGB555 161,6180 -#define SECOND_COLOR_MASK_RGB555 162,6221 -#define THIRD_COLOR_MASK_RGB555 163,6262 -#define ALPHA_BITS_MASK_RGB555 164,6303 -#define BUILD_PIXEL_BGR565(BUILD_PIXEL_BGR565167,6365 -#define BUILD_PIXEL2_BGR565(BUILD_PIXEL2_BGR565168,6450 -#define DECOMPOSE_PIXEL_BGR565(DECOMPOSE_PIXEL_BGR565169,6536 -#define SPARE_RGB_BIT_MASK_BGR565 170,6647 -#define MAX_RED_BGR565 172,6691 -#define MAX_GREEN_BGR565 173,6720 -#define MAX_BLUE_BGR565 174,6750 -#define RED_LOW_BIT_MASK_BGR565 175,6780 -#define GREEN_LOW_BIT_MASK_BGR565 176,6821 -#define BLUE_LOW_BIT_MASK_BGR565 177,6862 -#define RED_HI_BIT_MASK_BGR565 178,6903 -#define GREEN_HI_BIT_MASK_BGR565 179,6944 -#define BLUE_HI_BIT_MASK_BGR565 180,6985 -#define FIRST_COLOR_MASK_BGR565 181,7026 -#define SECOND_COLOR_MASK_BGR565 182,7067 -#define THIRD_COLOR_MASK_BGR565 183,7108 -#define ALPHA_BITS_MASK_BGR565 184,7149 -#define BUILD_PIXEL_BGR555(BUILD_PIXEL_BGR555187,7211 -#define BUILD_PIXEL2_BGR555(BUILD_PIXEL2_BGR555188,7296 -#define DECOMPOSE_PIXEL_BGR555(DECOMPOSE_PIXEL_BGR555189,7382 -#define SPARE_RGB_BIT_MASK_BGR555 190,7493 -#define MAX_RED_BGR555 192,7538 -#define MAX_GREEN_BGR555 193,7567 -#define MAX_BLUE_BGR555 194,7597 -#define RED_LOW_BIT_MASK_BGR555 195,7627 -#define GREEN_LOW_BIT_MASK_BGR555 196,7668 -#define BLUE_LOW_BIT_MASK_BGR555 197,7709 -#define RED_HI_BIT_MASK_BGR555 198,7750 -#define GREEN_HI_BIT_MASK_BGR555 199,7791 -#define BLUE_HI_BIT_MASK_BGR555 200,7832 -#define FIRST_COLOR_MASK_BGR555 201,7873 -#define SECOND_COLOR_MASK_BGR555 202,7914 -#define THIRD_COLOR_MASK_BGR555 203,7955 -#define ALPHA_BITS_MASK_BGR555 204,7996 -#define BUILD_PIXEL_GBR565(BUILD_PIXEL_GBR565207,8058 -#define BUILD_PIXEL2_GBR565(BUILD_PIXEL2_GBR565208,8143 -#define DECOMPOSE_PIXEL_GBR565(DECOMPOSE_PIXEL_GBR565209,8229 -#define SPARE_RGB_BIT_MASK_GBR565 210,8340 -#define MAX_RED_GBR565 212,8384 -#define MAX_BLUE_GBR565 213,8421 -#define MAX_GREEN_GBR565 214,8458 -#define RED_LOW_BIT_MASK_GBR565 215,8495 -#define BLUE_LOW_BIT_MASK_GBR565 216,8536 -#define GREEN_LOW_BIT_MASK_GBR565 217,8577 -#define RED_HI_BIT_MASK_GBR565 218,8618 -#define BLUE_HI_BIT_MASK_GBR565 219,8659 -#define GREEN_HI_BIT_MASK_GBR565 220,8700 -#define FIRST_COLOR_MASK_GBR565 221,8741 -#define SECOND_COLOR_MASK_GBR565 222,8782 -#define THIRD_COLOR_MASK_GBR565 223,8823 -#define ALPHA_BITS_MASK_GBR565 224,8864 -#define BUILD_PIXEL_GBR555(BUILD_PIXEL_GBR555227,8926 -#define BUILD_PIXEL2_GBR555(BUILD_PIXEL2_GBR555228,9011 -#define DECOMPOSE_PIXEL_GBR555(DECOMPOSE_PIXEL_GBR555229,9097 -#define SPARE_RGB_BIT_MASK_GBR555 230,9208 -#define MAX_RED_GBR555 232,9253 -#define MAX_BLUE_GBR555 233,9290 -#define MAX_GREEN_GBR555 234,9327 -#define RED_LOW_BIT_MASK_GBR555 235,9364 -#define BLUE_LOW_BIT_MASK_GBR555 236,9405 -#define GREEN_LOW_BIT_MASK_GBR555 237,9446 -#define RED_HI_BIT_MASK_GBR555 238,9487 -#define BLUE_HI_BIT_MASK_GBR555 239,9528 -#define GREEN_HI_BIT_MASK_GBR555 240,9569 -#define FIRST_COLOR_MASK_GBR555 241,9610 -#define SECOND_COLOR_MASK_GBR555 242,9651 -#define THIRD_COLOR_MASK_GBR555 243,9692 -#define ALPHA_BITS_MASK_GBR555 244,9733 -#define BUILD_PIXEL_RGB5551(BUILD_PIXEL_RGB5551247,9796 -#define BUILD_PIXEL2_RGB5551(BUILD_PIXEL2_RGB5551248,9893 -#define DECOMPOSE_PIXEL_RGB5551(DECOMPOSE_PIXEL_RGB5551249,9991 -#define SPARE_RGB_BIT_MASK_RGB5551 250,10110 -#define MAX_RED_RGB5551 252,10150 -#define MAX_GREEN_RGB5551 253,10181 -#define MAX_BLUE_RGB5551 254,10213 -#define RED_LOW_BIT_MASK_RGB5551 255,10244 -#define GREEN_LOW_BIT_MASK_RGB5551 256,10286 -#define BLUE_LOW_BIT_MASK_RGB5551 257,10328 -#define RED_HI_BIT_MASK_RGB5551 258,10370 -#define GREEN_HI_BIT_MASK_RGB5551 259,10412 -#define BLUE_HI_BIT_MASK_RGB5551 260,10454 -#define FIRST_COLOR_MASK_RGB5551 261,10496 -#define SECOND_COLOR_MASK_RGB5551 262,10538 -#define THIRD_COLOR_MASK_RGB5551 263,10580 -#define ALPHA_BITS_MASK_RGB5551 264,10622 -#define CONCAT(CONCAT267,10690 -#define BUILD_PIXEL_D(BUILD_PIXEL_D271,10866 -#define BUILD_PIXEL2_D(BUILD_PIXEL2_D272,10928 -#define DECOMPOSE_PIXEL_D(DECOMPOSE_PIXEL_D273,10992 -#define BUILD_PIXEL(BUILD_PIXEL275,11071 -#define BUILD_PIXEL2(BUILD_PIXEL2276,11132 -#define DECOMPOSE_PIXEL(DECOMPOSE_PIXEL277,11195 -#define MAX_RED_D(MAX_RED_D279,11273 -#define MAX_BLUE_D(MAX_BLUE_D280,11314 -#define MAX_GREEN_D(MAX_GREEN_D281,11357 -#define RED_LOW_BIT_MASK_D(RED_LOW_BIT_MASK_D282,11402 -#define BLUE_LOW_BIT_MASK_D(BLUE_LOW_BIT_MASK_D283,11460 -#define GREEN_LOW_BIT_MASK_D(GREEN_LOW_BIT_MASK_D284,11520 -#define RED_HI_BIT_MASK_D(RED_HI_BIT_MASK_D285,11582 -#define BLUE_HI_BIT_MASK_D(BLUE_HI_BIT_MASK_D286,11638 -#define GREEN_HI_BIT_MASK_D(GREEN_HI_BIT_MASK_D287,11696 -#define FIRST_COLOR_MASK_D(FIRST_COLOR_MASK_D288,11756 -#define SECOND_COLOR_MASK_D(SECOND_COLOR_MASK_D289,11816 -#define THIRD_COLOR_MASK_D(THIRD_COLOR_MASK_D290,11877 -#define ALPHA_BITS_MASK_D(ALPHA_BITS_MASK_D291,11937 -#define MAX_RED 293,11997 -#define MAX_BLUE 294,12039 -#define MAX_GREEN 295,12082 -#define RED_LOW_BIT_MASK 296,12127 -#define BLUE_LOW_BIT_MASK 297,12185 -#define GREEN_LOW_BIT_MASK 298,12251 -#define RED_HI_BIT_MASK 299,12318 -#define BLUE_HI_BIT_MASK 300,12382 -#define GREEN_HI_BIT_MASK 301,12447 -#define FIRST_COLOR_MASK 302,12513 -#define SECOND_COLOR_MASK 303,12578 -#define THIRD_COLOR_MASK 304,12644 -#define ALPHA_BITS_MASK 305,12709 -#define GREEN_HI_BIT 307,12774 -#define RGB_LOW_BITS_MASK 308,12821 -#define RGB_HI_BITS_MASK 310,12915 -#define RGB_HI_BITS_MASKx2 312,13006 -#define RGB_REMOVE_LOW_BITS_MASK 314,13107 -#define FIRST_THIRD_COLOR_MASK 315,13161 -#define TWO_LOW_BITS_MASK 316,13230 -#define HIGH_BITS_SHIFTED_TWO_MASK 317,13303 - -port.h,2226 -#define _PORT_H_91,3624 -#define ACCEPT_SIZE_T 105,3824 -#define ACCEPT_SIZE_T 107,3856 -#define GFX_MULTI_FORMAT114,3964 -#define ZLIB119,4053 -#define EXECUTE_SUPERFX_PER_LINE120,4066 -#define SOUND121,4099 -#define VAR_CYCLES122,4113 -#define CPU_SHUTDOWN123,4132 -#define SPC700_SHUTDOWN124,4153 -#define PIXEL_FORMAT 125,4177 -#define CHECK_SOUND(CHECK_SOUND126,4205 -#define M_PI 127,4227 -#define USE_X86_ASM139,4530 -#define snes9x_types_defined143,4587 -typedef unsigned char bool8;bool8145,4617 -typedef unsigned char uint8;uint8149,4745 -typedef unsigned short uint16;uint16150,4774 -typedef signed char int8;int8151,4805 -typedef short int16;int16152,4831 -typedef int int32;int32153,4852 -typedef unsigned int uint32;uint32154,4871 -typedef long long int64;int64158,4979 -typedef unsigned char uint8;uint8165,5081 -typedef unsigned short uint16;uint16166,5110 -typedef signed char int8;int8167,5141 -typedef short int16;int16168,5167 -typedef long int32;int32172,5246 -# define PLAT_SOUND_BUFFER 174,5267 -# define RIGHTSHIFT_IS_SAR175,5308 -typedef unsigned int uint32;uint32178,5346 -typedef __int64 int64;int64182,5404 -#define TRUE 191,5522 -#define FALSE 195,5559 -#define EXTERN_C199,5596 -#define START_EXTERN_C200,5613 -#define END_EXTERN_C201,5636 -#define EXTERN_C 204,5711 -#define START_EXTERN_C 205,5739 -#define END_EXTERN_C 206,5775 -#define EXTERN_C 208,5804 -#define START_EXTERN_C209,5828 -#define END_EXTERN_C210,5851 -#define PATH_MAX 217,5923 -#define _MAX_DIR 220,5953 -#define _MAX_DRIVE 221,5979 -#define _MAX_FNAME 222,6000 -#define _MAX_EXT 223,6028 -#define _MAX_PATH 224,6054 -#define ZeroMemory(ZeroMemory226,6082 -#define strcasecmp 233,6337 -#define strncasecmp 234,6364 -EXTERN_C int soundsignal;240,6450 -#define CHECK_SOUND 243,6559 -#define CHECK_SOUND(CHECK_SOUND245,6667 -#define SLASH_STR 249,6712 -#define SLASH_CHAR 250,6735 -#define SLASH_STR 252,6765 -#define SLASH_CHAR 253,6787 -#define SIG_PF 265,7055 -#define LSB_FIRST270,7205 -#define FAST_LSB_WORD_ACCESS271,7223 -#define MSB_FIRST273,7258 -#define TITLE 277,7297 -#define TITLE 281,7352 -#define TITLE 285,7404 -#define STATIC289,7448 -#define strncasecmp 290,7463 -#define STATIC 292,7498 - -ppu.h,1330 -#define _PPU_H_91,3623 -#define FIRST_VISIBLE_LINE 93,3640 -#define TILE_2BIT 98,3723 -#define TILE_4BIT 99,3743 -#define TILE_8BIT 100,3763 -#define MAX_2BIT_TILES 102,3784 -#define MAX_4BIT_TILES 103,3812 -#define MAX_8BIT_TILES 104,3840 -#define PPU_H_BEAM_IRQ_SOURCE 106,3869 -#define PPU_V_BEAM_IRQ_SOURCE 107,3908 -#define GSU_IRQ_SOURCE 108,3947 -#define SA1_IRQ_SOURCE 109,3980 -#define SA1_DMA_IRQ_SOURCE 110,4013 -struct ClipData ClipData112,4050 -struct InternalPPU InternalPPU118,4146 -struct SOBJSOBJ161,5187 -struct SPPU SPPU173,5350 -#define CLIP_OR 273,7516 -#define CLIP_AND 274,7534 -#define CLIP_XOR 275,7553 -#define CLIP_XNOR 276,7572 -struct SDMA SDMA278,7593 -} SnesModel;SnesModel333,8762 -#define MAX_5C77_VERSION 339,8852 -#define MAX_5C78_VERSION 340,8882 -#define MAX_5A22_VERSION 341,8912 -STATIC inline uint8 REGISTER_4212(343,8943 -STATIC inline void FLUSH_REDRAW 357,9335 -STATIC inline void REGISTER_2104 363,9443 -STATIC inline void REGISTER_2118 450,12342 -STATIC inline void REGISTER_2118_tile 483,13260 -STATIC inline void REGISTER_2118_linear 499,13832 -STATIC inline void REGISTER_2119 511,14242 -STATIC inline void REGISTER_2119_tile 544,15175 -STATIC inline void REGISTER_2119_linear 559,15745 -STATIC inline void REGISTER_2122(571,16160 -STATIC inline void REGISTER_2180(618,17448 - -sa1.h,902 -#define _sa1_h_91,3623 -struct SSA1Registers SSA1Registers95,3661 -struct SSA1 SSA1107,3826 -#define SA1CheckZero(SA1CheckZero146,4745 -#define SA1CheckCarry(SA1CheckCarry147,4785 -#define SA1CheckIRQ(SA1CheckIRQ148,4822 -#define SA1CheckDecimal(SA1CheckDecimal149,4868 -#define SA1CheckIndex(SA1CheckIndex150,4922 -#define SA1CheckMemory(SA1CheckMemory151,4976 -#define SA1CheckOverflow(SA1CheckOverflow152,5032 -#define SA1CheckNegative(SA1CheckNegative153,5075 -#define SA1CheckEmulation(SA1CheckEmulation154,5125 -#define SA1ClearFlags(SA1ClearFlags156,5185 -#define SA1SetFlags(SA1SetFlags157,5237 -#define SA1CheckFlag(SA1CheckFlag158,5289 -#define SNES_IRQ_SOURCE 183,5966 -#define TIMER_IRQ_SOURCE 184,6003 -#define DMA_IRQ_SOURCE 185,6040 -STATIC inline void S9xSA1UnpackStatus(187,6077 -STATIC inline void S9xSA1PackStatus(195,6318 -STATIC inline void S9xSA1FixCycles 202,6541 - -sar.h,185 -#define _SAR_H_91,3623 -#define SAR(SAR104,3792 -static inline int8 SAR(107,3828 -static inline int16 SAR(114,3976 -static inline int32 SAR(121,4128 -static inline int64 SAR(128,4280 - -screenshot.h,29 -#define SCREENSHOT_H91,3628 - -sdd1.h,25 -#define _SDD1_H_91,3624 - -sdd1emu.h,26 -#define SDD1EMU_H90,3624 - -seta.h,378 -#define _seta_h92,3639 -#define ST_010 96,3675 -#define ST_011 97,3695 -#define ST_018 98,3715 -typedef struct SETA_ST010_STRUCTSETA_ST010_STRUCT117,4154 -} ST010_Regs;ST010_Regs124,4294 -typedef struct SETA_ST011_STRUCTSETA_ST011_STRUCT126,4309 -} ST011_Regs;ST011_Regs137,4519 -typedef struct SETA_ST018_STRUCTSETA_ST018_STRUCT139,4534 -} ST018_Regs;ST018_Regs152,4779 - -snaporig.h,597 -#define _SNAPORIG_H_90,3627 -#define ORIG_SNAPSHOT_MAGIC 92,3649 -#define ORIG_SNAPSHOT_VERSION 93,3688 -struct SOrigCPUState{SOrigCPUState97,3781 -struct SOrigAPUSOrigAPU127,4467 -} OrigYAndA;OrigYAndA150,4881 -struct SOrigAPURegisters{SOrigAPURegisters152,4895 -#define ORIG_MAX_BUFFER_SIZE 160,5001 -#define NUM_CHANNELS 161,5041 -} OrigChannel;OrigChannel195,5853 -} SOrigSoundData;SOrigSoundData213,6309 -struct SOrigOBJSOrigOBJ215,6328 -struct SOrigPPU SOrigPPU229,6530 -struct SOrigDMA SOrigDMA332,8740 -} OrigPair;OrigPair364,9323 -struct SOrigRegisters{SOrigRegisters366,9336 - -snapshot.h,293 -#define _SNAPSHOT_H_90,3627 -#define SNAPSHOT_MAGIC 95,3689 -#define SNAPSHOT_VERSION 96,3723 -#define SUCCESS 98,3751 -#define WRONG_FORMAT 99,3769 -#define WRONG_VERSION 100,3795 -#define FILE_NOT_FOUND 101,3822 -#define WRONG_MOVIE_SNAPSHOT 102,3850 -#define NOT_A_MOVIE_SNAPSHOT 103,3884 - -snes9x.h,3003 -#define _SNES9X_H_90,3625 -#define VERSION 92,3645 -#define GFX_MULTI_FORMAT109,3928 -#define ROM_NAME_LEN 112,3961 -#define STREAM 118,4041 -#define READ_STREAM(READ_STREAM119,4063 -#define WRITE_STREAM(WRITE_STREAM120,4105 -#define OPEN_STREAM(OPEN_STREAM121,4149 -#define REOPEN_STREAM(REOPEN_STREAM122,4187 -#define FIND_STREAM(FIND_STREAM123,4228 -#define REVERT_STREAM(REVERT_STREAM124,4261 -#define CLOSE_STREAM(CLOSE_STREAM125,4305 -#define STREAM 127,4347 -#define READ_STREAM(READ_STREAM128,4369 -#define WRITE_STREAM(WRITE_STREAM129,4412 -#define OPEN_STREAM(OPEN_STREAM130,4457 -#define REOPEN_STREAM(REOPEN_STREAM131,4494 -#define FIND_STREAM(FIND_STREAM132,4534 -#define REVERT_STREAM(REVERT_STREAM133,4566 -#define CLOSE_STREAM(CLOSE_STREAM134,4609 -#define SNES_WIDTH 139,4688 -#define SNES_HEIGHT 140,4712 -#define SNES_HEIGHT_EXTENDED 141,4737 -#define IMAGE_WIDTH 142,4770 -#define IMAGE_HEIGHT 143,4845 -#define SNES_MAX_NTSC_VCOUNTER 145,4942 -#define SNES_MAX_PAL_VCOUNTER 146,4978 -#define SNES_HCOUNTER_MAX 147,5014 -#define SPC700_TO_65C816_RATIO 148,5044 -#define AUTO_FRAMERATE 149,5077 -#define SNES_SCANLINE_TIME 163,5582 -#define SNES_CLOCK_SPEED 164,5621 -#define SNES_CLOCK_LEN 166,5657 -#define SNES_CYCLES_PER_SCANLINE 168,5706 -#define SNES_APUTIMER2_CYCLEx10000 170,5801 -#define ONE_CYCLE 172,5931 -#define SLOW_ONE_CYCLE 173,5951 -#define TWO_CYCLES 174,5976 -#define SNES_TR_MASK 177,6000 -#define SNES_TL_MASK 178,6034 -#define SNES_X_MASK 179,6068 -#define SNES_A_MASK 180,6101 -#define SNES_RIGHT_MASK 181,6134 -#define SNES_LEFT_MASK 182,6171 -#define SNES_DOWN_MASK 183,6207 -#define SNES_UP_MASK 184,6244 -#define SNES_START_MASK 185,6279 -#define SNES_SELECT_MASK 186,6317 -#define SNES_Y_MASK 187,6355 -#define SNES_B_MASK 188,6389 - SNES_MULTIPLAYER5,191,6431 - SNES_JOYPAD,192,6454 - SNES_MOUSE_SWAPPED,193,6471 - SNES_MOUSE,194,6495 - SNES_SUPERSCOPE,195,6511 - SNES_JUSTIFIER,196,6532 - SNES_JUSTIFIER_2,197,6549 - SNES_MAX_CONTROLLER_OPTIONS198,6568 -#define DEBUG_MODE_FLAG 201,6604 -#define TRACE_FLAG 202,6641 -#define SINGLE_STEP_FLAG 203,6671 -#define BREAK_FLAG 204,6708 -#define SCAN_KEYS_FLAG 205,6738 -#define SAVE_SNAPSHOT_FLAG 206,6774 -#define DELAYED_NMI_FLAG 207,6811 -#define NMI_FLAG 208,6848 -#define PROCESS_SOUND_FLAG 209,6876 -#define FRAME_ADVANCE_FLAG 210,6913 -#define DELAYED_NMI_FLAG2 211,6950 -#define IRQ_PENDING_FLAG 212,6988 -struct SCPUState{SCPUState214,7027 -#define HBLANK_START_EVENT 245,7719 -#define HBLANK_END_EVENT 246,7748 -#define HTIMER_BEFORE_EVENT 247,7775 -#define HTIMER_AFTER_EVENT 248,7805 -#define NO_EVENT 249,7834 -struct SSettings{SSettings251,7854 -struct SSNESGameFixesSSNESGameFixes395,11244 - PAUSE_NETPLAY_CONNECT 417,11722 - PAUSE_TOGGLE_FULL_SCREEN 418,11760 - PAUSE_EXIT 419,11801 - PAUSE_MENU 420,11828 - PAUSE_INACTIVE_WINDOW 421,11855 - PAUSE_WINDOW_ICONISED 422,11893 - PAUSE_RESTORE_GUI 423,11931 - PAUSE_FREEZE_FILE 424,11965 - -soundux.h,1791 -#define _SOUND_H_90,3624 -enum { SOUND_SAMPLE 92,3643 -enum { SOUND_SAMPLE = 0, SOUND_NOISE,92,3643 -enum { SOUND_SAMPLE = 0, SOUND_NOISE, SOUND_EXTRA_NOISE,92,3643 -enum { SOUND_SAMPLE = 0, SOUND_NOISE, SOUND_EXTRA_NOISE, SOUND_MUTE 92,3643 -enum { SOUND_SILENT,93,3714 -enum { SOUND_SILENT, SOUND_ATTACK,93,3714 -enum { SOUND_SILENT, SOUND_ATTACK, SOUND_DECAY,93,3714 -enum { SOUND_SILENT, SOUND_ATTACK, SOUND_DECAY, SOUND_SUSTAIN,93,3714 - SOUND_RELEASE,94,3777 - SOUND_RELEASE, SOUND_GAIN,94,3777 - SOUND_RELEASE, SOUND_GAIN, SOUND_INCREASE_LINEAR,94,3777 - SOUND_INCREASE_BENT_LINE,95,3834 - SOUND_INCREASE_BENT_LINE, SOUND_DECREASE_LINEAR,95,3834 - SOUND_DECREASE_EXPONENTIAL}96,3890 -enum { MODE_NONE 98,3927 -enum { MODE_NONE = SOUND_SILENT,98,3927 -enum { MODE_NONE = SOUND_SILENT, MODE_ADSR,98,3927 -enum { MODE_NONE = SOUND_SILENT, MODE_ADSR, MODE_RELEASE 98,3927 -enum { MODE_NONE = SOUND_SILENT, MODE_ADSR, MODE_RELEASE = SOUND_RELEASE,98,3927 - MODE_GAIN,99,4001 - MODE_GAIN, MODE_INCREASE_LINEAR,99,4001 - MODE_GAIN, MODE_INCREASE_LINEAR, MODE_INCREASE_BENT_LINE,99,4001 - MODE_DECREASE_LINEAR,100,4066 - MODE_DECREASE_LINEAR, MODE_DECREASE_EXPONENTIAL}100,4066 -#define MAX_ENVELOPE_HEIGHT 102,4124 -#define ENVELOPE_SHIFT 103,4156 -#define MAX_VOLUME 104,4181 -#define VOLUME_SHIFT 105,4204 -#define VOL_DIV 106,4227 -#define SOUND_DECODE_LENGTH 107,4247 -#define NUM_CHANNELS 109,4279 -#define SOUND_BUFFER_SIZE 110,4305 -#define MAX_BUFFER_SIZE 111,4343 -#define SOUND_BUFFER_SIZE_MASK 112,4385 -#define SOUND_BUFS 114,4441 -} SoundStatus;SoundStatus140,4916 -EXTERN_C volatile SoundStatus so;142,4932 -} Channel;Channel183,5966 -} SSoundData;SSoundData205,6508 -EXTERN_C SSoundData SoundData;207,6523 - -spc700.h,1770 -#define _SPC700_H_90,3625 -#define NO_CHANNEL_STRUCT93,3660 -#define Carry 99,3777 -#define Zero 100,3799 -#define Interrupt 101,3821 -#define HalfCarry 102,3843 -#define BreakFlag 103,3865 -#define DirectPageFlag 104,3887 -#define Overflow 105,3913 -#define Negative 106,3935 -#define APUClearCarry(APUClearCarry108,3958 -#define APUSetCarry(APUSetCarry109,4000 -#define APUSetInterrupt(APUSetInterrupt110,4040 -#define APUClearInterrupt(APUClearInterrupt111,4096 -#define APUSetHalfCarry(APUSetHalfCarry112,4155 -#define APUClearHalfCarry(APUClearHalfCarry113,4211 -#define APUSetBreak(APUSetBreak114,4270 -#define APUClearBreak(APUClearBreak115,4322 -#define APUSetDirectPage(APUSetDirectPage116,4377 -#define APUClearDirectPage(APUClearDirectPage117,4439 -#define APUSetOverflow(APUSetOverflow118,4504 -#define APUClearOverflow(APUClearOverflow119,4550 -#define APUCheckZero(APUCheckZero121,4599 -#define APUCheckCarry(APUCheckCarry122,4640 -#define APUCheckInterrupt(APUCheckInterrupt123,4678 -#define APUCheckHalfCarry(APUCheckHalfCarry124,4735 -#define APUCheckBreak(APUCheckBreak125,4792 -#define APUCheckDirectPage(APUCheckDirectPage126,4845 -#define APUCheckOverflow(APUCheckOverflow127,4908 -#define APUCheckNegative(APUCheckNegative128,4952 -#define APUClearFlags(APUClearFlags130,5000 -#define APUSetFlags(APUSetFlags131,5050 -#define APUCheckFlag(APUCheckFlag132,5100 -} YAndA;YAndA142,5271 -struct SAPURegisters{SAPURegisters144,5281 -EXTERN_C struct SAPURegisters APURegisters;152,5379 -#define ONE_APU_CYCLE 156,5481 -#define ONE_APU_CYCLE_HUMAN 160,5608 -#define APU_EXECUTE(APU_EXECUTE167,5715 -#define APU_EXECUTE1(APU_EXECUTE1180,5909 -#define APU_EXECUTE1(APU_EXECUTE1188,6080 -#define APU_EXECUTE(APU_EXECUTE195,6201 - -spc7110.h,223 -#define _spc7110_h90,3625 -#define DECOMP_BUFFER_SIZE 93,3663 -typedef struct SPC7110RTCSPC7110RTC123,4428 -} S7RTC;S7RTC130,4541 -typedef struct SPC7110EmuVarsSPC7110EmuVars132,4551 -} SPC7110Regs;SPC7110Regs187,5818 - -srtc.h,314 -#define _srtc_h_90,3623 -#define MAX_RTC_INDEX 94,3660 -#define MODE_READ 96,3693 -#define MODE_LOAD_RTC 97,3723 -#define MODE_COMMAND 98,3753 -#define MODE_COMMAND_DONE 99,3783 -#define COMMAND_LOAD_RTC 101,3814 -#define COMMAND_CLEAR_RTC 102,3844 -} SRTC_DATA;SRTC_DATA142,4710 -#define SRTC_SRAM_PAD 154,4976 - -tile.h,1326 -#define _TILE_H_90,3623 -#define TILE_AssignPixel(TILE_AssignPixel92,3641 -#define TILE_SetPixel(TILE_SetPixel94,3712 -#define TILE_SetPixel16(TILE_SetPixel1695,3801 -#define TILE_AddPixel16(TILE_AddPixel1697,3883 -#define TILE_AddFPixel16(TILE_AddFPixel1698,4000 -#define TILE_AddPixel16Half(TILE_AddPixel16Half99,4113 -#define TILE_AddFPixel16Half(TILE_AddFPixel16Half100,4241 -#define TILE_SubPixel16(TILE_SubPixel16102,4366 -#define TILE_SubFPixel16(TILE_SubFPixel16103,4483 -#define TILE_SubPixel16Half(TILE_SubPixel16Half104,4596 -#define TILE_SubFPixel16Half(TILE_SubFPixel16Half105,4724 -#define TILE_Select3(TILE_Select3107,4849 -#define TILE_Select2(TILE_Select2115,5096 -#define TILE_SelectAddPixel16(TILE_SelectAddPixel16122,5281 -#define TILE_SelectAddPixel16Half(TILE_SelectAddPixel16Half123,5372 -#define TILE_SelectSubPixel16(TILE_SelectSubPixel16124,5467 -#define TILE_SelectSubPixel16Half(TILE_SelectSubPixel16Half125,5558 -#define TILE_SelectFAddPixel16Half(TILE_SelectFAddPixel16Half127,5654 -#define TILE_SelectFSubPixel16Half(TILE_SelectFSubPixel16Half128,5738 -#define TILE_PREAMBLE 132,5846 -#define RENDER_TILE(RENDER_TILE160,6686 -#define TILE_CLIP_PREAMBLE 208,7810 -#define RENDER_CLIPPED_TILE(RENDER_CLIPPED_TILE235,8278 -#define RENDER_TILE_LARGE(RENDER_TILE_LARGE287,9666 - -unix/config.c,1218 -#define MIN(MIN120,4464 -typedef struct CONFIG_ENTRYCONFIG_ENTRY123,4513 -} CONFIG_ENTRY;CONFIG_ENTRY128,4728 -typedef struct CONFIGCONFIG131,4746 -} CONFIG;CONFIG136,4975 -#define MAX_CONFIGS 139,4987 -static CONFIG *config[141,5014 -static CONFIG *config_override 142,5079 -char *get_filename(146,5179 -long file_size 158,5397 -static void destroy_config(179,5714 -static void config_cleanup(239,6677 -static void init_config(265,7224 -static int get_line(326,8570 -static void set_config(387,9808 -static void load_config_file(441,10881 -void set_config_file(466,11428 -void set_config_data(477,11633 -void override_config_file(487,11835 -void override_config_data(498,12056 -void push_config_state(508,12244 -void pop_config_state(526,12525 -static void prettify_section_name(544,12820 -static CONFIG_ENTRY *find_config_string(566,13163 -char *get_config_string(608,13972 -int get_config_int(630,14373 -int get_config_hex(645,14642 -float get_config_float(665,15005 -char **get_config_argv(680,15278 - #define MAX_ARGV 682,15341 -static CONFIG_ENTRY *insert_variable(723,16028 -void set_config_string(758,16653 -void set_config_int(839,18330 -void set_config_hex(851,18563 -void set_config_float(867,18871 - -unix/aido.h,25 -#define _AIDO_H_90,3623 - -unix/snes9x_gui.h,64 -#define SNES9X_GUI_H90,3627 -class Snes9xGUI:Snes9xGUI97,3710 - -unix/x11.h,52 -#define _x11_h_90,3622 -} GUIData;GUIData159,5023 - -unzip/explode.c,831 -# define WSIZE 75,4017 -struct huft huft80,4174 -UWORD cplen2[124,6002 -UWORD cplen3[128,6293 -UWORD extra[132,6585 -UWORD cpdist4[136,6819 -UWORD cpdist8[142,7244 -#define NEXTBYTE 164,8115 -#define NEEDBITS(NEEDBITS165,8165 -#define DUMPBITS(DUMPBITS166,8231 -UWORD mask_bits[169,8281 -union work area;174,8453 -ULONG crc32val;175,8528 -ush bytebuf;176,8544 -ULONG bitbuf;177,8557 -int bits_left;178,8571 -boolean zipeof;179,8586 -int get_tree(181,8603 -int explode_lit8(213,9668 -int explode_lit4(335,13397 -int explode_nolit8(457,17125 -int explode_nolit4(570,20510 -int explode 683,23894 -int ReadByte(811,27677 -#define BMAX 852,28918 -#define N_MAX 853,28996 -unsigned hufts;855,29062 -int huft_build(858,29113 -int huft_free(1051,36013 -void flush(1071,36459 -void flush_stack(1084,36935 -int FillBitBuffer(1101,37511 - -unzip/unreduce.c,300 -#define DLE 20,607 -typedef byte f_array[f_array22,627 - f_array *followers;35,1000 - f_array *followers 37,1057 -byte Slen[40,1119 -int factor;41,1135 -int L_table[43,1148 -int D_shift[46,1194 -int D_mask[48,1239 -int B_table[51,1284 -void unReduce(76,2174 -static void LoadFollowers(206,5624 - -unzip/unshrink.c,309 -#define INIT_BITS 19,508 -#define FIRST_ENT 20,534 -#define CLEAR 21,562 -#define GetCode(GetCode22,590 -int codesize,26,669 -int codesize, maxcode,26,669 -int codesize, maxcode, maxcodemax,26,669 -int codesize, maxcode, maxcodemax, free_ent;26,669 -void unShrink(35,803 -static void partial_clear(151,3535 - -unzip/unzip.c,1011 -const char unz_copyright[26,390 -unzlocal_getByte 42,787 -unzlocal_getShort 65,1209 -unzlocal_getLong 86,1552 -strcmpcasenosensitive_internal 117,2103 -#define CASESENSITIVITYDEFAULTVALUE 140,2567 -#define CASESENSITIVITYDEFAULTVALUE 142,2611 -#define STRCMPCASENOSENTIVEFUNCTION 146,2693 -unzStringFileNameCompare 158,3124 -#define BUFREADCOMMENT 169,3438 -unzlocal_SearchCentralDir 176,3583 -unzOpen 238,5233 -unzClose 341,8055 -unzGetGlobalInfo 363,8482 -unzlocal_DosDateToTmuDate 378,8783 - local int unzlocal_GetCurrentFileInfoInternal 406,9645 -unzGetCurrentFileInfo 566,14262 -unzGoToFirstFile 587,14860 -unzGoToNextFile 610,15500 -unzLocateFile 642,16466 -unzlocal_CheckCurrentFileCoherencyHeader 695,17781 -unzOpenCurrentFile 786,20472 -file_in_zip_read_info_s *pfile_in_zip_read_info 898,24010 -unz_s *pUnzip 899,24066 -unzReadCurrentFile 901,24108 -unztell 1056,28648 -unzeof 1076,29086 -unzGetLocalExtrafield 1108,29971 -unzCloseCurrentFile 1156,31173 -unzGetGlobalComment 1196,32231 - -unzip/unz.h,8414 -# define UNIX25,827 -# define __TURBOC__33,1066 -# define MSDOS34,1087 -# define MSDOS37,1192 -# define PROTO46,1520 -# define MODERN48,1547 -# define PROTO52,1655 -# define MODERN54,1682 -# define PROTO58,1779 -# define MODERN60,1806 -# define BSD70,2074 -# define TERMIO76,2264 -# define ZMEM82,2393 -# define NO_PARAM_H99,2914 -# define DECLARE_ERRNO 116,3313 - typedef size_t extent;extent140,4236 - typedef unsigned int extent;extent145,4349 -# define void 146,4381 -# define BSIZE 174,5244 -# define BSIZE 176,5294 -# define NO_MKDIR 182,5461 -# define BSIZE 195,5764 -# define strchr 199,5876 -# define strrchr 200,5902 -# define DOS_OS2208,6155 -# define MSC 217,6805 -# define DOS_OS2224,7103 -# define S_IFMT 225,7121 -# define timezone 226,7145 -# define DOS_OS2230,7201 -# define __32BIT__231,7219 -# define far236,7309 -# define DOS_OS2240,7346 -# define __32BIT__241,7364 -# define far242,7384 -# define DOS_OS2 246,7500 -# define isupper(isupper264,8274 -# define tolower(tolower265,8328 -# define DOS_OS2279,8690 -# define getch(getch280,8710 -# define _MAX_PATH 292,9127 -# define UNIX 293,9193 -# define RETURN 294,9273 -# define RETURN 297,9388 -# define RETURN(RETURN299,9456 -# define O_RDONLY 309,9817 -# define O_WRONLY 310,9841 -# define O_RDWR 311,9865 -# define SHORT_NAMES320,10162 -# define tzset 321,10190 -# define DOS_VMS330,10453 -# define MACOS338,10694 -# define __STDC__ 340,10785 -# define __STDC__ 344,11036 -# define MACOS350,11201 -# define CtoPstr 356,11332 -# define PtoCstr 357,11357 -# define open(open364,11449 -# define close 365,11502 -# define read 366,11527 -# define write 367,11550 -# define lseek 368,11575 -# define creat(creat369,11600 -# define stat(stat370,11676 -# define isascii(isascii373,11747 -typedef struct _ZipExtraHdr _ZipExtraHdr378,11833 -} ZIP_EXTRA_HEADER;ZIP_EXTRA_HEADER381,11957 -typedef struct _MacInfoMin _MacInfoMin383,11978 -} MACINFOMIN;MACINFOMIN393,12430 -typedef struct _MacInfo _MacInfo395,12495 -} MACINFO;MACINFO406,12991 -# define extract_or_test_files 418,13373 -# define extract_or_test_member 419,13425 -# define mkdir(mkdir424,13565 -# define EBCDIC 425,13631 -# define WSIZE 437,13766 -#define DIR_BLKSIZ 440,13917 -# define INBUFSIZ 443,14076 -# define FILNAMSIZ 456,14420 -# define FILNAMSIZ 458,14481 -# define PATH_MAX 463,14633 -# define PATH_MAX 466,14754 -# define PATH_MAX 468,14803 -#define OUTBUFSIZ 473,14907 -#define ZSUFX 475,14943 -#define CENTRAL_HDR_SIG 476,14976 -#define LOCAL_HDR_SIG 477,15053 -#define END_CENTRAL_SIG 478,15129 -#define EXTD_LOCAL_SIG 479,15207 -#define SKIP 481,15274 -#define DISPLAY 482,15348 -#define FILENAME 483,15376 -#define EXTRA_FIELD 484,15404 -#define DOES_NOT_EXIST 486,15433 -#define EXISTS_AND_OLDER 487,15506 -#define EXISTS_AND_NEWER 488,15534 -#define DOS_OS2_FAT_ 490,15563 -#define AMIGA_ 491,15636 -#define VMS_ 492,15664 -#define UNIX_ 493,15736 -#define VM_CMS_ 494,15811 -#define ATARI_ 495,15887 -#define OS2_HPFS_ 496,15936 -#define MAC_ 497,15964 -#define Z_SYSTEM_ 498,15992 -#define CPM_ 499,16020 -#define NUM_HOSTS 501,16121 -#define STORED 503,16184 -#define SHRUNK 504,16241 -#define REDUCED1 505,16269 -#define REDUCED2 506,16297 -#define REDUCED3 507,16325 -#define REDUCED4 508,16353 -#define IMPLODED 509,16381 -#define TOKENIZED 510,16409 -#define DEFLATED 511,16437 -#define NUM_METHODS 512,16465 -#define DF_MDY 515,16607 -#define DF_DMY 516,16676 -#define DF_YMD 517,16754 -#define UNZIP_VERSION 519,16831 -#define VMS_VERSION 520,16896 -#define LREC_SIZE 527,17344 -#define CREC_SIZE 528,17417 -#define ECREC_SIZE 529,17490 -#define MAX_BITS 531,17564 -#define HSIZE 532,17630 -#define LF 534,17703 -#define CR 535,17781 -#define CTRLZ 536,17859 -# define ascii_to_native(ascii_to_native539,17951 -# define NATIVE 540,17994 -# define FFLUSH 544,18039 -# define FFLUSH 546,18095 -# define ENV_UNZIP 550,18161 -# define ENV_ZIPINFO 551,18238 -# define ENV_UNZIP 553,18294 -# define ENV_ZIPINFO 554,18326 -# define PWLEN 558,18392 -# define DECRYPT(DECRYPT559,18419 -# define QCOND 563,18542 -# define QCOND 565,18669 -# define TRUE 569,18769 -# define FALSE 572,18836 -# define SEEK_SET 576,18944 -# define SEEK_CUR 577,19022 -# define SEEK_END 578,19044 -# define S_IRWXU 582,19090 -# define S_IRUSR 583,19160 -# define S_IWUSR 584,19225 -# define S_IXUSR 585,19291 -# define S_IRWXG 586,19359 -# define S_IRGRP 587,19429 -# define S_IWGRP 588,19494 -# define S_IXGRP 589,19560 -# define S_IRWXO 590,19628 -# define S_IROTH 591,19698 -# define S_IWOTH 592,19763 -# define S_IXOTH 593,19829 -# define S_IFBLK 598,20069 -# define S_IFIFO 601,20183 -# define S_IFLNK 604,20283 -# define S_IFSOCK 607,20393 -# define S_ISUID 610,20471 -# define S_ISGID 613,20567 -# define S_ISVTX 616,20664 -# define S_ENFMT 619,20765 - typedef unsigned char byte;byte632,21008 -typedef char boolean;boolean635,21106 -typedef long longint;longint636,21141 -typedef unsigned short UWORD;UWORD637,21176 -typedef unsigned long ULONG;ULONG638,21209 -typedef unsigned char uch;uch639,21242 -typedef unsigned short ush;ush640,21273 -typedef unsigned long ulg;ulg641,21304 -typedef struct min_info min_info643,21336 -} min_info;min_info654,21872 -typedef struct VMStimbuf VMStimbuf656,21885 -} VMStimbuf;VMStimbuf659,22009 - typedef byte local_byte_hdr[local_byte_hdr666,22309 -# define L_VERSION_NEEDED_TO_EXTRACT_0 667,22356 -# define L_VERSION_NEEDED_TO_EXTRACT_1 668,22406 -# define L_GENERAL_PURPOSE_BIT_FLAG 669,22456 -# define L_COMPRESSION_METHOD 670,22506 -# define L_LAST_MOD_FILE_TIME 671,22556 -# define L_LAST_MOD_FILE_DATE 672,22606 -# define L_CRC32 673,22656 -# define L_COMPRESSED_SIZE 674,22707 -# define L_UNCOMPRESSED_SIZE 675,22758 -# define L_FILENAME_LENGTH 676,22809 -# define L_EXTRA_FIELD_LENGTH 677,22860 - typedef byte cdir_byte_hdr[cdir_byte_hdr679,22912 -# define C_VERSION_MADE_BY_0 680,22958 -# define C_VERSION_MADE_BY_1 681,23008 -# define C_VERSION_NEEDED_TO_EXTRACT_0 682,23058 -# define C_VERSION_NEEDED_TO_EXTRACT_1 683,23108 -# define C_GENERAL_PURPOSE_BIT_FLAG 684,23158 -# define C_COMPRESSION_METHOD 685,23208 -# define C_LAST_MOD_FILE_TIME 686,23258 -# define C_LAST_MOD_FILE_DATE 687,23308 -# define C_CRC32 688,23359 -# define C_COMPRESSED_SIZE 689,23410 -# define C_UNCOMPRESSED_SIZE 690,23461 -# define C_FILENAME_LENGTH 691,23512 -# define C_EXTRA_FIELD_LENGTH 692,23563 -# define C_FILE_COMMENT_LENGTH 693,23614 -# define C_DISK_NUMBER_START 694,23665 -# define C_INTERNAL_FILE_ATTRIBUTES 695,23716 -# define C_EXTERNAL_FILE_ATTRIBUTES 696,23767 -# define C_RELATIVE_OFFSET_LOCAL_HEADER 697,23818 - typedef byte ec_byte_rec[ec_byte_rec699,23870 -# define NUMBER_THIS_DISK 701,23990 -# define NUM_DISK_WITH_START_CENTRAL_DIR 702,24040 -# define NUM_ENTRIES_CENTRL_DIR_THS_DISK 703,24090 -# define TOTAL_ENTRIES_CENTRAL_DIR 704,24140 -# define SIZE_CENTRAL_DIRECTORY 705,24191 -# define OFFSET_START_CENTRAL_DIRECTORY 706,24242 -# define ZIPFILE_COMMENT_LENGTH 707,24293 - typedef struct local_file_header local_file_header710,24346 - } local_file_hdr;local_file_hdr721,24737 - typedef struct central_directory_file_header central_directory_file_header723,24759 - } cdir_file_hdr;cdir_file_hdr740,25371 - typedef struct end_central_dir_record end_central_dir_record742,25392 - } ecdir_rec;ecdir_rec750,25746 -# define __ 761,25863 -# define MAX(MAX784,26512 -# define MIN(MIN788,26577 -#define LSEEK(LSEEK792,26631 -#define SKIP_(SKIP_834,28430 -#define READBIT(READBIT853,28971 -#define PEEKBIT(PEEKBIT869,29345 -#define NUKE_CRs(NUKE_CRs873,29479 -#define TOLOWER(TOLOWER896,30178 -# define ascii_to_native(ascii_to_native927,31296 -# define A_TO_N(A_TO_N928,31331 -# define NATIVE 931,31377 -# define A_TO_N(A_TO_N933,31424 - union work work964,32485 - union work work973,32665 -# define prefix_of 984,33002 -# define suffix_of 985,33044 -# define stack 986,33086 -# define slide 987,33120 - -unzip/unzip.h,1007 -#define _unz_H42,1738 -typedef struct TagunzFile__ TagunzFile__55,1995 -typedef struct TagunzFile__ { int unused; } unzFile__;unzFile__55,1995 -typedef unzFile__ *unzFile;unzFile56,2051 -typedef voidp unzFile;unzFile58,2085 -#define UNZ_OK 62,2117 -#define UNZ_END_OF_LIST_OF_FILE 63,2169 -#define UNZ_ERRNO 64,2208 -#define UNZ_EOF 65,2250 -#define UNZ_PARAMERROR 66,2286 -#define UNZ_BADZIPFILE 67,2333 -#define UNZ_INTERNALERROR 68,2380 -#define UNZ_CRCERROR 69,2427 -#define UNZ_STORED 71,2475 -#define UNZ_SHRUNK 72,2536 -#define UNZ_REDUCED1 73,2568 -#define UNZ_REDUCED2 74,2600 -#define UNZ_REDUCED3 75,2632 -#define UNZ_REDUCED4 76,2664 -#define UNZ_IMPLODED 77,2696 -#define UNZ_TOKENIZED 78,2728 -#define UNZ_DEFLATED 79,2760 -typedef struct tm_unz_s tm_unz_s82,2829 -} tm_unz;tm_unz90,3215 -typedef struct unz_global_info_sunz_global_info_s94,3344 -} unz_global_info;unz_global_info99,3558 -typedef struct unz_file_info_sunz_file_info_s103,3647 -} unz_file_info;unz_file_info122,4797 - -unzip/unzipP.h,609 -#define _UNZIPP_H_2,19 -#define local 7,73 -#define CASESENSITIVITYDEFAULT_NO15,296 -#define UNZ_BUFSIZE 20,359 -#define UNZ_MAXFILENAMEINZIP 24,424 -#define ALLOC(ALLOC28,481 -#define TRYFREE(TRYFREE31,539 -#define SIZECENTRALDIRITEM 34,584 -#define SIZEZIPLOCALHEADER 35,618 -#define SEEK_CUR 41,751 -#define SEEK_END 45,798 -#define SEEK_SET 49,845 -typedef struct unz_file_info_internal_sunz_file_info_internal_s53,951 -} unz_file_info_internal;unz_file_info_internal57,1083 -} file_in_zip_read_info_s;file_in_zip_read_info_s91,2450 -} unz_s;unz_s122,3668 - -jma/7zlzma.cpp,32 -bool decompress_lzma_7z(23,812 - -jma/crc32.cpp,81 -namespace CRC32libCRC32lib22,746 - unsigned int CRC32(CRC32lib::CRC3272,4053 - -jma/iiostrm.cpp,87 -HRESULT ISequentialInStream::Read(23,875 -HRESULT ISequentialOutStream::Write(33,1101 - -jma/inbyte.cpp,173 -namespace NStream{NStream22,852 -CInByte::CInByte(NStream::CInByte::CInByte24,872 -CInByte::~CInByte(31,1003 -void CInByte::Init(36,1053 -bool CInByte::ReadBlock(45,1239 - -jma/jma.cpp,589 -namespace JMAJMA100,3792 - time_t uint_to_time(JMA::uint_to_time109,4144 - void jma_open::retrieve_file_block(JMA::jma_open::retrieve_file_block125,4629 - jma_open::jma_open(JMA::jma_open::jma_open209,7357 - jma_open::~jma_open(JMA::jma_open::~jma_open242,8197 - vector jma_open::get_files_info(JMA::jma_open::get_files_info251,8350 - void jma_open::chunk_seek(JMA::jma_open::chunk_seek270,8923 - vector jma_open::get_all_files(JMA::jma_open::get_all_files295,9583 - void jma_open::extract_file(JMA::jma_open::extract_file414,13399 - -jma/lzma.cpp,224 -namespace NCompress NCompress22,850 -namespace NLZMA NCompress::NLZMA23,872 -static class CConstInitNCompress::NLZMA::CConstInit27,930 - CConstInit(NCompress::NLZMA::CConstInit::CConstInit30,964 -} g_ConstInit;40,1165 - -jma/lzmadec.cpp,556 -#define RETURN_E_OUTOFMEMORY_IF_FALSE(RETURN_E_OUTOFMEMORY_IF_FALSE24,932 -namespace NCompress NCompress26,1010 -namespace NLZMA NCompress::NLZMA27,1032 -HRESULT CDecoder::SetDictionarySize(NCompress::NLZMA::CDecoder::SetDictionarySize29,1051 -HRESULT CDecoder::SetLiteralProperties(44,1448 -HRESULT CDecoder::SetPosBitsProperties(55,1752 -CDecoder::CDecoder(66,2087 -HRESULT CDecoder::Create(72,2157 -HRESULT CDecoder::Init(83,2365 -HRESULT CDecoder::CodeReal(122,3225 -HRESULT CDecoder::Code(255,7814 -HRESULT CDecoder::ReadCoderProperties(266,8117 - -jma/s9x-jma.cpp,31 -size_t load_jma_file(100,3896 - -jma/winout.cpp,281 -namespace NStream NStream22,852 -namespace NWindow NStream::NWindow23,872 -void COut::Create(NStream::NWindow::COut::Create25,893 -COut::~COut(40,1381 -void COut::SetWindowSize(45,1421 -void COut::Init(51,1567 -HRESULT COut::Flush(65,1798 -void COut::MoveBlockBackward(80,2138 - -jma/7z.h,54 -#define __7Z_H21,845 -bool decompress_lzma_7z(23,861 - -jma/aribitcd.h,217 -#define __COMPRESSION_BITCODER_H2,33 -class CBitModelCBitModel18,349 - void UpdateModel(UpdateModel22,399 - void Init(Init34,802 -class CBitDecoder:CBitDecoder38,888 - UINT32 Decode(CBitDecoder::Decode41,948 - -jma/ariconst.h,187 -#define __ARICONST_H21,852 -typedef NCompression::NArithmetic::CRangeDecoder CMyRangeDecoder;CMyRangeDecoder26,898 -template class CMyBitDecoder:CMyBitDecoder27,964 - -jma/ariprice.h,38 -#define __COMPRESSION_ARIPRICE_H2,33 - -jma/btreecd.h,804 -#define __BITTREECODER_H21,856 -template CMyBitDecoder2;CMyBitDecoder231,1022 -class CDecoderCDecoder33,1088 - HRESULT Flush(Flush65,2284 - -jma/portable.h,1046 -#define __PORTABLE_H22,852 -typedef signed char INT8;INT826,895 -typedef unsigned char UINT8;UINT827,921 -typedef short INT16;INT1628,950 -typedef unsigned short UINT16;UINT1629,971 -typedef long INT32;INT3230,1002 -typedef unsigned long UINT32;UINT3231,1022 -typedef INT32 INT64;INT6432,1052 -typedef UINT32 UINT64;UINT6433,1073 -typedef UINT8 BYTE;BYTE36,1098 -typedef UINT16 WORD;WORD37,1118 -typedef UINT32 DWORD;DWORD38,1139 -typedef unsigned UINT_PTR;UINT_PTR40,1162 -typedef int BOOL;BOOL42,1190 -#define FALSE 43,1208 -#define TRUE 44,1224 -#define HRESULT 46,1240 -#define S_OK 47,1260 -#define E_INVALIDARG 48,1275 -#define E_OUTOFMEMORY 49,1299 -#define E_FAIL 50,1324 -#define E_INTERNAL_ERROR 51,1342 -#define E_INVALIDDATA 52,1370 -template inline T MyMin(54,1396 -template inline T MyMax(58,1468 -#define RETURN_IF_NOT_S_OK(RETURN_IF_NOT_S_OK62,1540 -#define UINT_SIZE 65,1644 -#define USHORT_SIZE 66,1666 -inline unsigned int charp_to_uint(69,1742 -inline unsigned short charp_to_ushort(79,2062 - -jma/rcdefs.h,190 -#define __RCDEFS_H21,850 -#define RC_INIT_VAR 26,915 -#define RC_FLUSH_VAR 30,1062 -#define RC_NORMALIZE 34,1192 -#define RC_GETBIT2(RC_GETBIT240,1482 -#define RC_GETBIT(RC_GETBIT59,2732 - -jma/rngcoder.h,364 -#define __COMPRESSION_RANGECODER_H21,866 -class CRangeDecoderCRangeDecoder31,1050 - void Normalize(Normalize38,1161 - void Init(Init47,1308 - UINT32 GetThreshold(GetThreshold56,1512 - void Decode(Decode61,1602 - UINT32 DecodeDirectBits(DecodeDirectBits88,2267 - UINT32 DecodeBit(DecodeBit120,2976 - UINT64 GetProcessedSize(GetProcessedSize139,3339 - -jma/s9x-jma.h,0 - -jma/winout.h,345 -#define __STREAM_WINDOWOUT_H21,860 -class COutCOut33,1222 - COut(COut50,1518 - UINT32 GetCurPos(GetCurPos59,1807 - const BYTE *GetPointerToCurrentPos(GetPointerToCurrentPos60,1852 - void CopyBackBlock(CopyBackBlock62,1927 - void PutOneByte(PutOneByte73,2182 - BYTE GetOneByte(GetOneByte80,2310 - BYTE *GetBuffer(GetBuffer85,2397 + +dsp1emu.c,7108 +#define __OPT__36,1055 +#define __OPT06__37,1071 +FILE * LogFile 41,1108 +void Log_Message 43,1132 +void Start_Log 57,1361 +void Stop_Log 67,1518 +const unsigned short DSP1ROM[78,1621 +#define INCR 212,10344 +#define Angle(Angle213,10362 +#define Cos(Cos214,10411 +#define Sin(Sin215,10450 +#define PI 219,10516 +double CosTable2[220,10561 +double SinTable2[221,10585 +double Atan(224,10611 +short C4WFXVal;237,10976 +short C4WFYVal;238,10992 +short C4WFZVal;239,11008 +short C4WFX2Val;240,11024 +short C4WFY2Val;241,11041 +short C4WFDist;242,11058 +short C4WFScale;243,11074 +double tanval;244,11091 +double c4x,245,11106 +double c4x,c4y,245,11106 +double c4x,c4y,c4z;245,11106 +double c4x2,246,11126 +double c4x2,c4y2,246,11126 +double c4x2,c4y2,c4z2;246,11126 +void C4TransfWireFrame(248,11150 +void C4TransfWireFrame2(274,11787 +void C4CalcWireFrame(300,12386 +short C41FXVal;320,12841 +short C41FYVal;321,12857 +short C41FAngleRes;322,12873 +short C41FDist;323,12893 +short C41FDistVal;324,12909 +void C4Op1F(326,12929 +void C4Op15(341,13258 +void C4Op0D(348,13400 +void InitDSP(362,13899 +short Op00Multiplicand;377,14130 +short Op00Multiplier;378,14154 +short Op00Result;379,14176 +void DSPOp00(381,14195 +short Op20Multiplicand;390,14392 +short Op20Multiplier;391,14416 +short Op20Result;392,14438 +void DSPOp20(394,14457 +signed short Op10Coefficient;404,14671 +signed short Op10Exponent;405,14701 +signed short Op10CoefficientR;406,14728 +signed short Op10ExponentR;407,14759 +void DSP1_Inverse(409,14788 +void DSPOp10(458,15785 +short Op04Angle;466,16027 +short Op04Radius;467,16044 +short Op04Sin;468,16062 +short Op04Cos;469,16077 +const short DSP1_MulTable[471,16093 +const short DSP1_SinTable[505,18498 +short DSP1_Sin(539,20903 +short DSP1_Cos(550,21175 +void DSP1_Normalize(561,21444 +void DSP1_NormalizeDouble(585,21768 +short DSP1_Truncate(636,22493 +void DSPOp04(646,22683 +short Op0CA;652,22805 +short Op0CX1;653,22818 +short Op0CY1;654,22832 +short Op0CX2;655,22846 +short Op0CY2;656,22860 +void DSPOp0C(658,22875 +short CentreX;664,23053 +short CentreY;665,23068 +short VOffset;666,23083 +short VPlane_C;668,23099 +short VPlane_E;669,23115 +short SinAas;672,23161 +short CosAas;673,23175 +short SinAzs;674,23189 +short CosAzs;675,23203 +short SinAZS;678,23242 +short CosAZS;679,23257 +short SecAZS_C1;680,23271 +short SecAZS_E1;681,23288 +short SecAZS_C2;682,23305 +short SecAZS_E2;683,23322 +const short MaxAZS_Exp[685,23340 +void DSP1_Parameter(690,23505 +void DSP1_Raster(773,25447 +short Op02FX;798,25903 +short Op02FY;799,25917 +short Op02FZ;800,25931 +short Op02LFE;801,25945 +short Op02LES;802,25960 +short Op02AAS;803,25975 +short Op02AZS;804,25990 +short Op02VOF;805,26005 +short Op02VVA;806,26020 +short Op02CX;807,26035 +short Op02CY;808,26049 +void DSPOp02(810,26064 +short Op0AVS;815,26199 +short Op0AA;816,26213 +short Op0AB;817,26226 +short Op0AC;818,26239 +short Op0AD;819,26252 +void DSPOp0A(821,26266 +short Op06X;827,26351 +short Op06Y;828,26364 +short Op06Z;829,26377 +short Op06H;830,26390 +short Op06V;831,26403 +unsigned short Op06S;832,26416 +double ObjPX;834,26439 +double ObjPY;835,26453 +double ObjPZ;836,26467 +double ObjPX1;837,26481 +double ObjPY1;838,26496 +double ObjPZ1;839,26511 +double ObjPX2;840,26526 +double ObjPY2;841,26541 +double ObjPZ2;842,26556 +double DivideOp06;843,26571 +int Temp;844,26590 +int tanval2;845,26600 +void DSPOp06(848,26631 +void DSPOp06(906,28027 +short matrixC[965,29447 +short matrixB[966,29468 +short matrixA[967,29489 +short Op01m;969,29511 +short Op01Zr;970,29524 +short Op01Xr;971,29538 +short Op01Yr;972,29552 +short Op11m;973,29566 +short Op11Zr;974,29579 +short Op11Xr;975,29593 +short Op11Yr;976,29607 +short Op21m;977,29621 +short Op21Zr;978,29634 +short Op21Xr;979,29648 +short Op21Yr;980,29662 +void DSPOp01(982,29677 +void DSPOp11(1006,30621 +void DSPOp21(1030,31565 +short Op0DX;1054,32509 +short Op0DY;1055,32522 +short Op0DZ;1056,32535 +short Op0DF;1057,32548 +short Op0DL;1058,32561 +short Op0DU;1059,32574 +short Op1DX;1060,32587 +short Op1DY;1061,32600 +short Op1DZ;1062,32613 +short Op1DF;1063,32626 +short Op1DL;1064,32639 +short Op1DU;1065,32652 +short Op2DX;1066,32665 +short Op2DY;1067,32678 +short Op2DZ;1068,32691 +short Op2DF;1069,32704 +short Op2DL;1070,32717 +short Op2DU;1071,32730 +void DSPOp0D(1073,32744 +void DSPOp1D(1084,33203 +void DSPOp2D(1095,33659 +short Op03F;1106,34115 +short Op03L;1107,34128 +short Op03U;1108,34141 +short Op03X;1109,34154 +short Op03Y;1110,34167 +short Op03Z;1111,34180 +short Op13F;1112,34193 +short Op13L;1113,34206 +short Op13U;1114,34219 +short Op13X;1115,34232 +short Op13Y;1116,34245 +short Op13Z;1117,34258 +short Op23F;1118,34271 +short Op23L;1119,34284 +short Op23U;1120,34297 +short Op23X;1121,34310 +short Op23Y;1122,34323 +short Op23Z;1123,34336 +void DSPOp03(1125,34350 +void DSPOp13(1136,34806 +void DSPOp23(1147,35262 +short Op14Zr;1158,35718 +short Op14Xr;1159,35732 +short Op14Yr;1160,35746 +short Op14U;1161,35760 +short Op14F;1162,35773 +short Op14L;1163,35786 +short Op14Zrr;1164,35799 +short Op14Xrr;1165,35814 +short Op14Yrr;1166,35829 +void DSPOp14(1168,35845 +void DSP1_Target(1200,36572 +short Op0EH;1229,37075 +short Op0EV;1230,37088 +short Op0EX;1231,37101 +short Op0EY;1232,37114 +void DSPOp0E(1234,37128 +short Op0BX;1239,37192 +short Op0BY;1240,37205 +short Op0BZ;1241,37218 +short Op0BS;1242,37231 +short Op1BX;1243,37244 +short Op1BY;1244,37257 +short Op1BZ;1245,37270 +short Op1BS;1246,37283 +short Op2BX;1247,37296 +short Op2BY;1248,37309 +short Op2BZ;1249,37322 +short Op2BS;1250,37335 +void DSPOp0B(1252,37349 +void DSPOp1B(1261,37510 +void DSPOp2B(1271,37874 +short Op08X,1280,38035 +short Op08X,Op08Y,1280,38035 +short Op08X,Op08Y,Op08Z,1280,38035 +short Op08X,Op08Y,Op08Z,Op08Ll,1280,38035 +short Op08X,Op08Y,Op08Z,Op08Ll,Op08Lh;1280,38035 +void DSPOp08(1282,38075 +short Op18X,1294,38376 +short Op18X,Op18Y,1294,38376 +short Op18X,Op18Y,Op18Z,1294,38376 +short Op18X,Op18Y,Op18Z,Op18R,1294,38376 +short Op18X,Op18Y,Op18Z,Op18R,Op18D;1294,38376 +void DSPOp18(1296,38414 +short Op38X,1305,38630 +short Op38X,Op38Y,1305,38630 +short Op38X,Op38Y,Op38Z,1305,38630 +short Op38X,Op38Y,Op38Z,Op38R,1305,38630 +short Op38X,Op38Y,Op38Z,Op38R,Op38D;1305,38630 +void DSPOp38(1307,38668 +short Op28X;1317,38896 +short Op28Y;1318,38909 +short Op28Z;1319,38922 +short Op28R;1320,38935 +void DSPOp28(1322,38949 +short Op1CX,1348,39493 +short Op1CX,Op1CY,1348,39493 +short Op1CX,Op1CY,Op1CZ;1348,39493 +short Op1CXBR,1349,39518 +short Op1CXBR,Op1CYBR,1349,39518 +short Op1CXBR,Op1CYBR,Op1CZBR,1349,39518 +short Op1CXBR,Op1CYBR,Op1CZBR,Op1CXAR,1349,39518 +short Op1CXBR,Op1CYBR,Op1CZBR,Op1CXAR,Op1CYAR,1349,39518 +short Op1CXBR,Op1CYBR,Op1CZBR,Op1CXAR,Op1CYAR,Op1CZAR;1349,39518 +short Op1CX1;1350,39573 +short Op1CY1;1351,39587 +short Op1CZ1;1352,39601 +short Op1CX2;1353,39615 +short Op1CY2;1354,39629 +short Op1CZ2;1355,39643 +void DSPOp1C(1357,39658 +unsigned short Op0FRamsize;1379,40455 +unsigned short Op0FPass;1380,40483 +void DSPOp0F(1382,40509 +short Op2FUnknown;1391,40636 +short Op2FSize;1392,40655 +void DSPOp2F(1394,40672 + +dsp2emu.c,439 +uint16 DSP2Op09Word1=91,3608 +uint16 DSP2Op09Word2=92,3632 +bool DSP2Op05HasLen=93,3656 +int DSP2Op05Len=94,3683 +bool DSP2Op06HasLen=95,3702 +int DSP2Op06Len=96,3729 +uint8 DSP2Op05Transparent=97,3748 +void DSP2_Op05 99,3778 +void DSP2_Op01 145,4917 +void DSP2_Op06 205,6224 +bool DSP2Op0DHasLen=219,6440 +int DSP2Op0DOutLen=220,6467 +int DSP2Op0DInLen=221,6489 +void DSP2_Op0D(227,6601 +void DSP2_Op0D(256,7429 +void DSP2_Op0D(304,8967 + +3d.h,89 +#define _3D_H_91,3622 +} OpenGLData;OpenGLData115,4152 +} GlideData;GlideData140,4612 + +65c816.h,1740 +#define _65c816_h_91,3626 +#define AL 93,3646 +#define AH 94,3663 +#define XL 95,3680 +#define XH 96,3697 +#define YL 97,3714 +#define YH 98,3731 +#define SL 99,3748 +#define SH 100,3765 +#define DL 101,3782 +#define DH 102,3799 +#define PL 103,3816 +#define PH 104,3833 +#define Carry 106,3851 +#define Zero 107,3873 +#define IRQ 108,3895 +#define Decimal 109,3917 +#define IndexFlag 110,3939 +#define MemoryFlag 111,3961 +#define Overflow 112,3983 +#define Negative 113,4005 +#define Emulation 114,4027 +#define ClearCarry(ClearCarry116,4050 +#define SetCarry(SetCarry117,4089 +#define SetZero(SetZero118,4126 +#define ClearZero(ClearZero119,4161 +#define SetIRQ(SetIRQ120,4198 +#define ClearIRQ(ClearIRQ121,4237 +#define SetDecimal(SetDecimal122,4279 +#define ClearDecimal(ClearDecimal123,4326 +#define SetIndex(SetIndex124,4376 +#define ClearIndex(ClearIndex125,4423 +#define SetMemory(SetMemory126,4473 +#define ClearMemory(ClearMemory127,4522 +#define SetOverflow(SetOverflow128,4574 +#define ClearOverflow(ClearOverflow129,4617 +#define SetNegative(SetNegative130,4662 +#define ClearNegative(ClearNegative131,4708 +#define CheckZero(CheckZero133,4754 +#define CheckCarry(CheckCarry134,4792 +#define CheckIRQ(CheckIRQ135,4827 +#define CheckDecimal(CheckDecimal136,4867 +#define CheckIndex(CheckIndex137,4915 +#define CheckMemory(CheckMemory138,4963 +#define CheckOverflow(CheckOverflow139,5013 +#define CheckNegative(CheckNegative140,5054 +#define CheckEmulation(CheckEmulation141,5102 +#define ClearFlags(ClearFlags143,5156 +#define SetFlags(SetFlags144,5202 +#define CheckFlag(CheckFlag145,5248 +} pair;pair155,5410 +struct SRegisters{SRegisters157,5419 +EXTERN_C struct SRegisters Registers;169,5571 + +apu.h,1275 +#define _apu_h_91,3623 +struct SIAPUSIAPU95,3661 +struct SAPUSAPU119,4133 +EXTERN_C struct SAPU APU;134,4421 +EXTERN_C struct SIAPU IAPU;135,4447 +STATIC inline void S9xAPUUnpackStatus(139,4568 +STATIC inline void S9xAPUPackStatus(146,4791 +#define APU_VOL_LEFT 174,5663 +#define APU_VOL_RIGHT 175,5689 +#define APU_P_LOW 176,5716 +#define APU_P_HIGH 177,5739 +#define APU_SRCN 178,5763 +#define APU_ADSR1 179,5785 +#define APU_ADSR2 180,5808 +#define APU_GAIN 181,5831 +#define APU_ENVX 182,5853 +#define APU_OUTX 183,5875 +#define APU_MVOL_LEFT 185,5898 +#define APU_MVOL_RIGHT 186,5925 +#define APU_EVOL_LEFT 187,5953 +#define APU_EVOL_RIGHT 188,5980 +#define APU_KON 189,6008 +#define APU_KOFF 190,6029 +#define APU_FLG 191,6051 +#define APU_ENDX 192,6072 +#define APU_EFB 194,6095 +#define APU_PMON 195,6116 +#define APU_NON 196,6138 +#define APU_EON 197,6159 +#define APU_DIR 198,6180 +#define APU_ESA 199,6201 +#define APU_EDL 200,6222 +#define APU_C0 202,6244 +#define APU_C1 203,6264 +#define APU_C2 204,6284 +#define APU_C3 205,6304 +#define APU_C4 206,6324 +#define APU_C5 207,6344 +#define APU_C6 208,6364 +#define APU_C7 209,6384 +#define APU_SOFT_RESET 211,6405 +#define APU_MUTE 212,6433 +#define APU_ECHO_DISABLED 213,6455 +#define FREQUENCY_MASK 215,6487 + +apumem.h,177 +#define _apumemory_h_91,3629 +INLINE uint8 S9xAPUGetByteZ 98,3723 +INLINE void S9xAPUSetByteZ 130,4392 +INLINE uint8 S9xAPUGetByte 159,4984 +INLINE void S9xAPUSetByte 192,5656 + +c4.h,23 +#define _C4_H_90,3621 + +cheats.h,704 +#define _CHEATS_H_90,3625 +struct SCheatSCheat92,3645 +#define MAX_CHEATS 102,3791 +struct SCheatDataSCheatData104,3814 + S9X_LESS_THAN,121,4213 + S9X_LESS_THAN, S9X_GREATER_THAN,121,4213 + S9X_LESS_THAN, S9X_GREATER_THAN, S9X_LESS_THAN_OR_EQUAL,121,4213 + S9X_GREATER_THAN_OR_EQUAL,122,4274 + S9X_GREATER_THAN_OR_EQUAL, S9X_EQUAL,122,4274 + S9X_GREATER_THAN_OR_EQUAL, S9X_EQUAL, S9X_NOT_EQUAL122,4274 +} S9xCheatComparisonType;S9xCheatComparisonType123,4330 + S9X_8_BITS,127,4372 + S9X_8_BITS, S9X_16_BITS,127,4372 + S9X_8_BITS, S9X_16_BITS, S9X_24_BITS,127,4372 + S9X_8_BITS, S9X_16_BITS, S9X_24_BITS, S9X_32_BITS127,4372 +} S9xCheatDataSize;S9xCheatDataSize128,4426 + +copyright.h,0 + +cpuaddr.h,1199 +#define _CPUADDR_H_91,3627 +EXTERN_C long OpAddress;93,3648 + NONE 96,3689 + READ 97,3703 + WRITE 98,3717 + MODIFY 99,3732 + JUMP 100,3748 +} AccessMode;AccessMode101,3761 +STATIC inline void Immediate8 103,3776 +STATIC inline void Immediate16 109,3894 +STATIC inline void Relative 115,4016 +STATIC inline void RelativeLong 124,4212 +STATIC inline void AbsoluteIndexedIndirect 139,4544 +STATIC inline void AbsoluteIndirectLong 155,4998 +STATIC inline void AbsoluteIndirect 175,5488 +STATIC inline void Absolute 193,5898 +STATIC inline void AbsoluteLong 207,6221 +STATIC inline void Direct(221,6566 +STATIC inline void DirectIndirectIndexed 231,6812 +STATIC inline void DirectIndirectIndexedLong 248,7292 +STATIC inline void DirectIndexedIndirect(264,7775 +STATIC inline void DirectIndexedX 284,8232 +STATIC inline void DirectIndexedY 302,8612 +STATIC inline void AbsoluteIndexedX 319,8991 +STATIC inline void AbsoluteIndexedY 336,9461 +STATIC inline void AbsoluteLongIndexedX 353,9921 +STATIC inline void DirectIndirect 367,10319 +STATIC inline void DirectIndirectLong 381,10685 +STATIC inline void StackRelative 396,11126 +STATIC inline void StackRelativeIndirectIndexed 406,11355 + +cpuexec.h,359 +#define _CPUEXEC_H_91,3627 +#define DO_HBLANK_CHECK(DO_HBLANK_CHECK96,3705 +struct SOpcodes SOpcodes100,3800 +struct SICPUSICPU108,3914 +STATIC inline void S9xUnpackStatus(141,4640 +STATIC inline void S9xPackStatus(149,4870 +STATIC inline void CLEAR_IRQ_SOURCE 156,5085 +STATIC inline void S9xFixCycles 163,5220 +STATIC inline void S9xReschedule 194,5630 + +cpumacro.h,2229 +#define _CPUMACRO_H_91,3628 +STATIC inline void SetZN16 93,3650 +STATIC inline void SetZN8 99,3766 +STATIC inline void ADC8 105,3860 +STATIC inline void ADC16 162,4730 +STATIC inline void AND16 238,5920 +STATIC inline void AND8 244,6027 +STATIC inline void A_ASL16 250,6130 +STATIC inline void A_ASL8 260,6321 +STATIC inline void ASL16 270,6508 +STATIC inline void ASL8 284,6828 +STATIC inline void BIT16 296,7063 +STATIC inline void BIT8 304,7270 +STATIC inline void CMP16 312,7447 +STATIC inline void CMP8 320,7611 +STATIC inline void CMX16 328,7773 +STATIC inline void CMX8 336,7937 +STATIC inline void CMY16 344,8099 +STATIC inline void CMY8 352,8263 +STATIC inline void A_DEC16 360,8425 +STATIC inline void A_DEC8 373,8622 +STATIC inline void DEC16 386,8815 +STATIC inline void DEC8 402,9137 +STATIC inline void EOR16 416,9376 +STATIC inline void EOR8 422,9483 +STATIC inline void A_INC16 428,9586 +STATIC inline void A_INC8 441,9783 +STATIC inline void INC16 454,9976 +STATIC inline void INC8 470,10298 +STATIC inline void LDA16 484,10537 +STATIC inline void LDA8 490,10643 +STATIC inline void LDX16 496,10745 +STATIC inline void LDX8 502,10851 +STATIC inline void LDY16 508,10953 +STATIC inline void LDY8 514,11059 +STATIC inline void A_LSR16 520,11161 +STATIC inline void A_LSR8 530,11342 +STATIC inline void LSR16 540,11519 +STATIC inline void LSR8 554,11829 +STATIC inline void ORA16 566,12054 +STATIC inline void ORA8 572,12161 +STATIC inline void A_ROL16 578,12264 +STATIC inline void A_ROL8 589,12510 +STATIC inline void ROL16 602,12772 +STATIC inline void ROL8 617,13140 +STATIC inline void A_ROR16 630,13420 +STATIC inline void A_ROR8 643,13705 +STATIC inline void ROR16 655,13973 +STATIC inline void ROR8 670,14363 +STATIC inline void SBC16 683,14659 +STATIC inline void SBC8 753,15816 +STATIC inline void STA16 804,16686 +STATIC inline void STA8 809,16762 +STATIC inline void STX16 814,16836 +STATIC inline void STX8 819,16912 +STATIC inline void STY16 824,16986 +STATIC inline void STY8 829,17062 +STATIC inline void STZ16 834,17136 +STATIC inline void STZ8 839,17200 +STATIC inline void TSB16 844,17263 +STATIC inline void TSB8 857,17580 +STATIC inline void TRB16 868,17805 +STATIC inline void TRB8 881,18123 + +cpuops.h,72 +#define _CPUOPS_H_91,3626 +#define CHECK_FOR_IRQ(CHECK_FOR_IRQ95,3692 + +debug.h,67 +#define _DEBUG_H_91,3625 +struct SBreakPoint{SBreakPoint100,3770 + +display.h,28 +#define _DISPLAY_H_91,3627 + +dma.h,24 +#define _DMA_H_91,3623 + +dsp1.h,54 +#define _DSP1_H_91,3625 +struct SDSP1 SDSP1109,4085 + +dsp4.h,1454 +int block;2,10 +int8 DSP4_Logic;6,85 +const int16 PLANE_START 9,151 +int16 view_plane;11,209 +int16 far_plane;12,251 +int16 segments;13,303 +int16 raster;14,354 +int16 project_x;16,400 +int16 project_y;17,444 +int16 project_centerx;19,490 +int16 project_centery;20,541 +int16 project_x1;22,594 +int16 project_x1low;23,639 +int16 project_y1;24,680 +int16 project_y1low;25,725 +int16 project_x2;27,768 +int16 project_y2;28,820 +int16 project_pitchx;30,874 +int16 project_pitchxlow;31,915 +int16 project_pitchy;32,958 +int16 project_pitchylow;33,999 +int16 project_focalx;35,1044 +int16 project_focaly;36,1110 +int16 project_ptr;38,1178 +int16 center_x;41,1247 +int16 center_y;42,1293 +int16 viewport_left;43,1339 +int16 viewport_right;44,1385 +int16 viewport_top;45,1433 +int16 viewport_bottom;46,1478 +int16 sprite_x;49,1550 +int16 sprite_y;50,1601 +int16 sprite_offset;51,1652 +int8 sprite_type;52,1699 +bool8 sprite_size;53,1742 +int16 path_clipRight[56,1812 +int16 path_clipLeft[57,1867 +int16 path_pos[58,1922 +int16 path_ptr[59,1970 +int16 path_raster[60,2021 +int16 path_top[61,2065 +int16 path_y[63,2107 +int16 path_x[64,2152 +int16 path_plane[65,2193 +int16 multi_index1;68,2262 +int16 multi_index2;69,2304 +bool8 op09_mode;70,2346 +int16 multi_focaly[73,2407 +int16 multi_farplane[74,2452 +int16 multi_raster[75,2506 +int8 op06_OAM[78,2568 +int8 op06_index;79,2615 +int8 op06_offset;80,2662 +short MaxTilesPerRow 82,2713 +short RowCount[83,2740 + +font.h,94 +static char *font[89,3606 +static int font_width 146,10762 +static int font_height 147,10789 + +fxemu.h,630 +#define _FXEMU_H_ 90,3624 +#define snes9x_types_defined94,3714 +typedef unsigned char uint8;uint896,3744 +typedef unsigned short uint16;uint1697,3773 +typedef unsigned int uint32;uint3298,3804 +typedef unsigned char bool8;bool899,3833 +typedef signed char int8;int8100,3862 +typedef short int16;int16101,3888 +typedef int int32;int32102,3909 +#define TRUE 106,3949 +#define FALSE 110,3986 +struct FxInit_sFxInit_s114,4094 +#define FX_FLAG_ADDRESS_CHECKING 164,5601 +#define FX_FLAG_ROM_BUFFER 165,5639 +#define FX_BREAKPOINT 168,5739 +#define FX_ERROR_ILLEGAL_ADDRESS 169,5766 +#define OPCODE_BYTES(OPCODE_BYTES172,5849 + +fxinst.h,2821 +#define _FXINST_H_ 90,3625 +#define FX_RAM_BANKS 211,7076 +struct FxRegs_sFxRegs_s219,7260 +#define FxRegs_s_null 286,9947 +#define GSU_R0 295,10337 +#define GSU_R1 296,10358 +#define GSU_R2 297,10379 +#define GSU_R3 298,10400 +#define GSU_R4 299,10421 +#define GSU_R5 300,10442 +#define GSU_R6 301,10463 +#define GSU_R7 302,10484 +#define GSU_R8 303,10505 +#define GSU_R9 304,10526 +#define GSU_R10 305,10547 +#define GSU_R11 306,10569 +#define GSU_R12 307,10591 +#define GSU_R13 308,10613 +#define GSU_R14 309,10635 +#define GSU_R15 310,10657 +#define GSU_SFR 311,10679 +#define GSU_BRAMR 312,10701 +#define GSU_PBR 313,10725 +#define GSU_ROMBR 314,10747 +#define GSU_CFGR 315,10771 +#define GSU_SCBR 316,10794 +#define GSU_CLSR 317,10817 +#define GSU_SCMR 318,10840 +#define GSU_VCR 319,10863 +#define GSU_RAMBR 320,10885 +#define GSU_CBR 321,10909 +#define GSU_CACHERAM 322,10931 +#define FLG_Z 325,10975 +#define FLG_CY 326,10996 +#define FLG_S 327,11018 +#define FLG_OV 328,11039 +#define FLG_G 329,11061 +#define FLG_R 330,11082 +#define FLG_ALT1 331,11103 +#define FLG_ALT2 332,11127 +#define FLG_IL 333,11151 +#define FLG_IH 334,11174 +#define FLG_B 335,11197 +#define FLG_IRQ 336,11219 +#define TF(TF339,11260 +#define CF(CF340,11302 +#define SF(SF341,11346 +#define TS(TS344,11441 +#define ALT0 347,11566 +#define ALT1 348,11602 +#define ALT2 349,11637 +#define ALT3 350,11672 +#define SEX16(SEX16353,11749 +#define SEX8(SEX8354,11788 +#define USEX16(USEX16357,11870 +#define USEX8(USEX8358,11912 +#define SUSEX16(SUSEX16360,11953 +#define TSZ(TSZ363,12029 +#define CLRFLAGS 366,12111 +#define RAM(RAM369,12234 +#define ROM(ROM372,12307 +#define PIPE 375,12397 +#define PRGBANK(PRGBANK378,12467 +#define FETCHPIPE 382,12549 +#define FETCHPIPE 384,12642 +#define ABS(ABS388,12703 +#define SREG 391,12765 +#define DREG 394,12827 +#define READR14399,12901 +#define TESTR14402,12951 +#define READR14 407,12990 +#define TESTR14 410,13060 +#define R0 415,13142 +#define R1 416,13166 +#define R2 417,13190 +#define R3 418,13214 +#define R4 419,13238 +#define R5 420,13262 +#define R6 421,13286 +#define R7 422,13310 +#define R8 423,13334 +#define R9 424,13358 +#define R10 425,13382 +#define R11 426,13408 +#define R12 427,13434 +#define R13 428,13460 +#define R14 429,13486 +#define R15 430,13512 +#define SFR 431,13538 +#define PBR 432,13565 +#define ROMBR 433,13593 +#define RAMBR 434,13623 +#define CBR 435,13653 +#define SCBR 436,13683 +#define SCMR 437,13729 +#define COLR 438,13775 +#define POR 439,13802 +#define BRAMR 440,13833 +#define VCR 441,13881 +#define CFGR 442,13925 +#define CLSR 443,13971 +#define FX_STEP 446,14091 +#define FX_FUNCTION_RUN 449,14220 +#define FX_FUNCTION_RUN_TO_BREAKPOINT 450,14248 +#define FX_FUNCTION_STEP_OVER 451,14288 +#define BRANCH_DELAY_RELATIVE472,15061 + +getset.h,281 +#define _GETSET_H_91,3626 +INLINE uint8 S9xGetByte 106,3816 +INLINE uint16 S9xGetWord 197,6063 +INLINE void S9xSetByte 320,9837 +INLINE void S9xSetWord 436,12378 +INLINE uint8 *GetBasePointer 594,16671 +INLINE uint8 *S9xGetMemPointer 660,18406 +INLINE void S9xSetPCBase 714,20029 + +gfx.h,1072 +#define _GFX_H_91,3623 +struct SGFX{SGFX96,3679 +struct SLineData SLineData155,5280 +#define H_FLIP 162,5364 +#define V_FLIP 163,5386 +#define BLANK_TILE 164,5408 +struct SBGSBG166,5430 +struct SLineMatrixDataSLineMatrixData184,5726 +#define SWAP_DWORD(SWAP_DWORD208,6279 +#define READ_2BYTES(READ_2BYTES212,6448 +#define WRITE_2BYTES(WRITE_2BYTES213,6489 +#define READ_2BYTES(READ_2BYTES216,6561 +#define WRITE_2BYTES(WRITE_2BYTES217,6631 +#define READ_2BYTES(READ_2BYTES220,6745 +#define WRITE_2BYTES(WRITE_2BYTES221,6815 +#define SUB_SCREEN_DEPTH 226,6940 +#define MAIN_SCREEN_DEPTH 227,6967 +#define COLOR_ADD(COLOR_ADD230,7030 +#define COLOR_ADD(COLOR_ADD235,7196 +#define COLOR_ADD1_2(COLOR_ADD1_2242,7412 +#define COLOR_SUB(COLOR_SUB248,7635 +#define COLOR_SUB(COLOR_SUB252,7792 +inline uint16 COLOR_SUB(259,8038 +#define COLOR_SUB1_2(COLOR_SUB1_2279,8422 +typedef void (*NormalTileRenderer)NormalTileRenderer283,8542 +typedef void (*ClippedTileRenderer)ClippedTileRenderer285,8652 +typedef void (*LargePixelRenderer)LargePixelRenderer288,8805 + +memmap.h,2552 +#define _memmap_h_91,3626 +#define READ_WORD(READ_WORD96,3695 +#define READ_DWORD(READ_DWORD97,3734 +#define WRITE_WORD(WRITE_WORD98,3774 +#define WRITE_DWORD(WRITE_DWORD99,3823 +#define READ_3WORD(READ_3WORD101,3874 +#define WRITE_3WORD(WRITE_3WORD102,3927 +#define READ_WORD(READ_WORD107,4062 +#define READ_DWORD(READ_DWORD109,4140 +#define WRITE_WORD(WRITE_WORD113,4302 +#define WRITE_DWORD(WRITE_DWORD115,4408 +#define WRITE_3WORD(WRITE_3WORD119,4676 +#define READ_3WORD(READ_3WORD122,4873 +#define MEMMAP_BLOCK_SIZE 127,5030 +#define MEMMAP_NUM_BLOCKS 128,5065 +#define MEMMAP_BLOCKS_PER_BANK 129,5123 +#define MEMMAP_SHIFT 130,5184 +#define MEMMAP_MASK 131,5208 +#define MEMMAP_MAX_SDD1_LOGGED_ENTRIES 132,5252 +#define NOPE 135,5329 +#define YEAH 136,5344 +#define BIGFIRST 137,5359 +#define SMALLFIRST 138,5378 +enum file_formats file_formats141,5423 +enum file_formats { FILE_ZIP,141,5423 +enum file_formats { FILE_ZIP, FILE_RAR,141,5423 +enum file_formats { FILE_ZIP, FILE_RAR, FILE_JMA,141,5423 +enum file_formats { FILE_ZIP, FILE_RAR, FILE_JMA, FILE_DEFAULT 141,5423 +class CMemory CMemory143,5490 + MAP_PPU,CMemory::MAP_PPU198,6999 + MAP_PPU, MAP_CPU,CMemory::MAP_CPU198,6999 + MAP_PPU, MAP_CPU, MAP_DSP,CMemory::MAP_DSP198,6999 + MAP_PPU, MAP_CPU, MAP_DSP, MAP_LOROM_SRAM,CMemory::MAP_LOROM_SRAM198,6999 + MAP_PPU, MAP_CPU, MAP_DSP, MAP_LOROM_SRAM, MAP_HIROM_SRAM,CMemory::MAP_HIROM_SRAM198,6999 + MAP_NONE,CMemory::MAP_NONE199,7059 + MAP_NONE, MAP_DEBUG,CMemory::MAP_DEBUG199,7059 + MAP_NONE, MAP_DEBUG, MAP_C4,CMemory::MAP_C4199,7059 + MAP_NONE, MAP_DEBUG, MAP_C4, MAP_BWRAM,CMemory::MAP_BWRAM199,7059 + MAP_NONE, MAP_DEBUG, MAP_C4, MAP_BWRAM, MAP_BWRAM_BITMAP,CMemory::MAP_BWRAM_BITMAP199,7059 + MAP_BWRAM_BITMAP2,CMemory::MAP_BWRAM_BITMAP2200,7118 + MAP_BWRAM_BITMAP2, MAP_SA1RAM,CMemory::MAP_SA1RAM200,7118 + MAP_BWRAM_BITMAP2, MAP_SA1RAM, MAP_SPC7110_ROM,CMemory::MAP_SPC7110_ROM200,7118 + MAP_BWRAM_BITMAP2, MAP_SA1RAM, MAP_SPC7110_ROM, MAP_SPC7110_DRAM,CMemory::MAP_SPC7110_DRAM200,7118 + MAP_RONLY_SRAM,CMemory::MAP_RONLY_SRAM201,7185 + MAP_RONLY_SRAM, MAP_OBC_RAM,CMemory::MAP_OBC_RAM201,7185 + MAP_RONLY_SRAM, MAP_OBC_RAM, MAP_SETA_DSP,CMemory::MAP_SETA_DSP201,7185 + MAP_RONLY_SRAM, MAP_OBC_RAM, MAP_SETA_DSP, MAP_SETA_RISC,CMemory::MAP_SETA_RISC201,7185 + MAP_RONLY_SRAM, MAP_OBC_RAM, MAP_SETA_DSP, MAP_SETA_RISC, MAP_LASTCMemory::MAP_LAST201,7185 + enum { MAX_ROM_SIZE CMemory::MAX_ROM_SIZE203,7260 + enum { MAX_ROM_SIZE = 0x800000 CMemory::x800000203,7260 +#define INLINE 291,9341 + +messages.h,1138 +#define _messages_h_91,3628 + S9X_TRACE,95,3707 + S9X_DEBUG,96,3722 + S9X_WARNING,97,3737 + S9X_INFO,98,3754 + S9X_ERROR,99,3768 + S9X_FATAL_ERROR100,3783 + S9X_ROM_INFO,105,3847 + S9X_HEADERS_INFO,106,3865 + S9X_ROM_CONFUSING_FORMAT_INFO,107,3887 + S9X_ROM_INTERLEAVED_INFO,108,3922 + S9X_SOUND_DEVICE_OPEN_FAILED,109,3952 + S9X_APU_STOPPED,110,3986 + S9X_USAGE,111,4007 + S9X_GAME_GENIE_CODE_ERROR,112,4022 + S9X_ACTION_REPLY_CODE_ERROR,113,4053 + S9X_GOLD_FINGER_CODE_ERROR,114,4086 + S9X_DEBUG_OUTPUT,115,4118 + S9X_DMA_TRACE,116,4140 + S9X_HDMA_TRACE,117,4159 + S9X_WRONG_FORMAT,118,4179 + S9X_WRONG_VERSION,119,4201 + S9X_ROM_NOT_FOUND,120,4224 + S9X_FREEZE_FILE_NOT_FOUND,121,4247 + S9X_PPU_TRACE,122,4278 + S9X_TRACE_DSP1,123,4297 + S9X_FREEZE_ROM_NAME,124,4317 + S9X_HEADER_WARNING,125,4342 + S9X_NETPLAY_NOT_SERVER,126,4366 + S9X_FREEZE_FILE_INFO,127,4394 + S9X_TURBO_MODE,128,4420 + S9X_SOUND_NOT_BUILT,129,4440 + S9X_MOVIE_INFO,130,4465 + S9X_WRONG_MOVIE_SNAPSHOT,131,4482 + S9X_NOT_A_MOVIE_SNAPSHOT,132,4509 + S9X_AVI_INFO133,4536 + +missing.h,127 +#define _MISSING_H_91,3627 +struct HDMAHDMA93,3648 +struct MissingMissing106,3908 +EXTERN_C struct Missing missing;162,5179 + +movie.h,341 +#define _MOVIE_H_92,3682 +# define SUCCESS 99,3775 +# define WRONG_FORMAT 100,3795 +# define WRONG_VERSION 101,3823 +# define FILE_NOT_FOUND 102,3852 +#define MOVIE_OPT_FROM_SNAPSHOT 105,3890 +#define MOVIE_OPT_FROM_RESET 106,3924 +#define MOVIE_OPT_PAL 107,3960 +#define MOVIE_MAX_METADATA 108,3999 +struct MovieInfoMovieInfo111,4047 + +netplay.h,1648 +#define _NETPLAY_H_91,3627 +#define NP_VERSION 110,3927 +#define NP_JOYPAD_HIST_SIZE 111,3949 +#define NP_DEFAULT_PORT 112,3981 +#define NP_MAX_CLIENTS 114,4011 +#define NP_SERV_MAGIC 116,4037 +#define NP_CLNT_MAGIC 117,4063 +#define NP_CLNT_HELLO 119,4090 +#define NP_CLNT_JOYPAD 120,4114 +#define NP_CLNT_RESET 121,4139 +#define NP_CLNT_PAUSE 122,4163 +#define NP_CLNT_LOAD_ROM 123,4187 +#define NP_CLNT_ROM_IMAGE 124,4214 +#define NP_CLNT_FREEZE_FILE 125,4242 +#define NP_CLNT_SRAM_DATA 126,4272 +#define NP_CLNT_READY 127,4300 +#define NP_CLNT_LOADED_ROM 128,4324 +#define NP_CLNT_RECEIVED_ROM_IMAGE 129,4353 +#define NP_CLNT_WAITING_FOR_ROM_IMAGE 130,4391 +#define NP_SERV_HELLO 132,4433 +#define NP_SERV_JOYPAD 133,4457 +#define NP_SERV_RESET 134,4482 +#define NP_SERV_PAUSE 135,4506 +#define NP_SERV_LOAD_ROM 136,4530 +#define NP_SERV_ROM_IMAGE 137,4557 +#define NP_SERV_FREEZE_FILE 138,4585 +#define NP_SERV_SRAM_DATA 139,4615 +#define NP_SERV_READY 140,4643 +struct SNPClientSNPClient142,4668 + NP_SERVER_SEND_ROM_IMAGE,157,4956 + NP_SERVER_SYNC_ALL,158,4986 + NP_SERVER_SYNC_CLIENT,159,5010 + NP_SERVER_SEND_FREEZE_FILE_ALL,160,5037 + NP_SERVER_SEND_ROM_LOAD_REQUEST_ALL,161,5073 + NP_SERVER_RESET_ALL,162,5114 + NP_SERVER_SEND_SRAM_ALL,163,5139 + NP_SERVER_SEND_SRAM164,5168 +#define NP_MAX_TASKS 167,5196 +struct NPServerTaskNPServerTask169,5221 +struct SNPServerSNPServer175,5281 +#define NP_MAX_ACTION_LEN 193,5708 +struct SNetPlaySNetPlay195,5739 +extern "C" struct SNetPlay NetPlay;228,6721 +#define WRITE_LONG(WRITE_LONG236,6852 +#define READ_LONG(READ_LONG243,7026 +#define S9xGetMilliTime 280,8281 + +obc1.h,25 +#define _OBC1_H_91,3624 + +pixform.h,7535 +#define _PIXFORM_H_91,3627 +enum { RGB565,95,3673 +enum { RGB565, RGB555,95,3673 +enum { RGB565, RGB555, BGR565,95,3673 +enum { RGB565, RGB555, BGR565, BGR555,95,3673 +enum { RGB565, RGB555, BGR565, BGR555, GBR565,95,3673 +enum { RGB565, RGB555, BGR565, BGR555, GBR565, GBR555,95,3673 +enum { RGB565, RGB555, BGR565, BGR555, GBR565, GBR555, RGB5551 95,3673 +#define BUILD_PIXEL(BUILD_PIXEL97,3740 +#define BUILD_PIXEL2(BUILD_PIXEL298,3797 +#define DECOMPOSE_PIXEL(DECOMPOSE_PIXEL99,3856 +#define BUILD_PIXEL_RGB565(BUILD_PIXEL_RGB565127,4671 +#define BUILD_PIXEL2_RGB565(BUILD_PIXEL2_RGB565128,4756 +#define DECOMPOSE_PIXEL_RGB565(DECOMPOSE_PIXEL_RGB565129,4842 +#define SPARE_RGB_BIT_MASK_RGB565 130,4953 +#define MAX_RED_RGB565 132,4997 +#define MAX_GREEN_RGB565 133,5026 +#define MAX_BLUE_RGB565 134,5056 +#define RED_LOW_BIT_MASK_RGB565 135,5086 +#define GREEN_LOW_BIT_MASK_RGB565 136,5127 +#define BLUE_LOW_BIT_MASK_RGB565 137,5168 +#define RED_HI_BIT_MASK_RGB565 138,5209 +#define GREEN_HI_BIT_MASK_RGB565 139,5250 +#define BLUE_HI_BIT_MASK_RGB565 140,5291 +#define FIRST_COLOR_MASK_RGB565 141,5332 +#define SECOND_COLOR_MASK_RGB565 142,5373 +#define THIRD_COLOR_MASK_RGB565 143,5414 +#define ALPHA_BITS_MASK_RGB565 144,5455 +#define BUILD_PIXEL_RGB555(BUILD_PIXEL_RGB555147,5518 +#define BUILD_PIXEL2_RGB555(BUILD_PIXEL2_RGB555148,5603 +#define DECOMPOSE_PIXEL_RGB555(DECOMPOSE_PIXEL_RGB555149,5689 +#define SPARE_RGB_BIT_MASK_RGB555 150,5800 +#define MAX_RED_RGB555 152,5845 +#define MAX_GREEN_RGB555 153,5874 +#define MAX_BLUE_RGB555 154,5904 +#define RED_LOW_BIT_MASK_RGB555 155,5934 +#define GREEN_LOW_BIT_MASK_RGB555 156,5975 +#define BLUE_LOW_BIT_MASK_RGB555 157,6016 +#define RED_HI_BIT_MASK_RGB555 158,6057 +#define GREEN_HI_BIT_MASK_RGB555 159,6098 +#define BLUE_HI_BIT_MASK_RGB555 160,6139 +#define FIRST_COLOR_MASK_RGB555 161,6180 +#define SECOND_COLOR_MASK_RGB555 162,6221 +#define THIRD_COLOR_MASK_RGB555 163,6262 +#define ALPHA_BITS_MASK_RGB555 164,6303 +#define BUILD_PIXEL_BGR565(BUILD_PIXEL_BGR565167,6365 +#define BUILD_PIXEL2_BGR565(BUILD_PIXEL2_BGR565168,6450 +#define DECOMPOSE_PIXEL_BGR565(DECOMPOSE_PIXEL_BGR565169,6536 +#define SPARE_RGB_BIT_MASK_BGR565 170,6647 +#define MAX_RED_BGR565 172,6691 +#define MAX_GREEN_BGR565 173,6720 +#define MAX_BLUE_BGR565 174,6750 +#define RED_LOW_BIT_MASK_BGR565 175,6780 +#define GREEN_LOW_BIT_MASK_BGR565 176,6821 +#define BLUE_LOW_BIT_MASK_BGR565 177,6862 +#define RED_HI_BIT_MASK_BGR565 178,6903 +#define GREEN_HI_BIT_MASK_BGR565 179,6944 +#define BLUE_HI_BIT_MASK_BGR565 180,6985 +#define FIRST_COLOR_MASK_BGR565 181,7026 +#define SECOND_COLOR_MASK_BGR565 182,7067 +#define THIRD_COLOR_MASK_BGR565 183,7108 +#define ALPHA_BITS_MASK_BGR565 184,7149 +#define BUILD_PIXEL_BGR555(BUILD_PIXEL_BGR555187,7211 +#define BUILD_PIXEL2_BGR555(BUILD_PIXEL2_BGR555188,7296 +#define DECOMPOSE_PIXEL_BGR555(DECOMPOSE_PIXEL_BGR555189,7382 +#define SPARE_RGB_BIT_MASK_BGR555 190,7493 +#define MAX_RED_BGR555 192,7538 +#define MAX_GREEN_BGR555 193,7567 +#define MAX_BLUE_BGR555 194,7597 +#define RED_LOW_BIT_MASK_BGR555 195,7627 +#define GREEN_LOW_BIT_MASK_BGR555 196,7668 +#define BLUE_LOW_BIT_MASK_BGR555 197,7709 +#define RED_HI_BIT_MASK_BGR555 198,7750 +#define GREEN_HI_BIT_MASK_BGR555 199,7791 +#define BLUE_HI_BIT_MASK_BGR555 200,7832 +#define FIRST_COLOR_MASK_BGR555 201,7873 +#define SECOND_COLOR_MASK_BGR555 202,7914 +#define THIRD_COLOR_MASK_BGR555 203,7955 +#define ALPHA_BITS_MASK_BGR555 204,7996 +#define BUILD_PIXEL_GBR565(BUILD_PIXEL_GBR565207,8058 +#define BUILD_PIXEL2_GBR565(BUILD_PIXEL2_GBR565208,8143 +#define DECOMPOSE_PIXEL_GBR565(DECOMPOSE_PIXEL_GBR565209,8229 +#define SPARE_RGB_BIT_MASK_GBR565 210,8340 +#define MAX_RED_GBR565 212,8384 +#define MAX_BLUE_GBR565 213,8421 +#define MAX_GREEN_GBR565 214,8458 +#define RED_LOW_BIT_MASK_GBR565 215,8495 +#define BLUE_LOW_BIT_MASK_GBR565 216,8536 +#define GREEN_LOW_BIT_MASK_GBR565 217,8577 +#define RED_HI_BIT_MASK_GBR565 218,8618 +#define BLUE_HI_BIT_MASK_GBR565 219,8659 +#define GREEN_HI_BIT_MASK_GBR565 220,8700 +#define FIRST_COLOR_MASK_GBR565 221,8741 +#define SECOND_COLOR_MASK_GBR565 222,8782 +#define THIRD_COLOR_MASK_GBR565 223,8823 +#define ALPHA_BITS_MASK_GBR565 224,8864 +#define BUILD_PIXEL_GBR555(BUILD_PIXEL_GBR555227,8926 +#define BUILD_PIXEL2_GBR555(BUILD_PIXEL2_GBR555228,9011 +#define DECOMPOSE_PIXEL_GBR555(DECOMPOSE_PIXEL_GBR555229,9097 +#define SPARE_RGB_BIT_MASK_GBR555 230,9208 +#define MAX_RED_GBR555 232,9253 +#define MAX_BLUE_GBR555 233,9290 +#define MAX_GREEN_GBR555 234,9327 +#define RED_LOW_BIT_MASK_GBR555 235,9364 +#define BLUE_LOW_BIT_MASK_GBR555 236,9405 +#define GREEN_LOW_BIT_MASK_GBR555 237,9446 +#define RED_HI_BIT_MASK_GBR555 238,9487 +#define BLUE_HI_BIT_MASK_GBR555 239,9528 +#define GREEN_HI_BIT_MASK_GBR555 240,9569 +#define FIRST_COLOR_MASK_GBR555 241,9610 +#define SECOND_COLOR_MASK_GBR555 242,9651 +#define THIRD_COLOR_MASK_GBR555 243,9692 +#define ALPHA_BITS_MASK_GBR555 244,9733 +#define BUILD_PIXEL_RGB5551(BUILD_PIXEL_RGB5551247,9796 +#define BUILD_PIXEL2_RGB5551(BUILD_PIXEL2_RGB5551248,9893 +#define DECOMPOSE_PIXEL_RGB5551(DECOMPOSE_PIXEL_RGB5551249,9991 +#define SPARE_RGB_BIT_MASK_RGB5551 250,10110 +#define MAX_RED_RGB5551 252,10150 +#define MAX_GREEN_RGB5551 253,10181 +#define MAX_BLUE_RGB5551 254,10213 +#define RED_LOW_BIT_MASK_RGB5551 255,10244 +#define GREEN_LOW_BIT_MASK_RGB5551 256,10286 +#define BLUE_LOW_BIT_MASK_RGB5551 257,10328 +#define RED_HI_BIT_MASK_RGB5551 258,10370 +#define GREEN_HI_BIT_MASK_RGB5551 259,10412 +#define BLUE_HI_BIT_MASK_RGB5551 260,10454 +#define FIRST_COLOR_MASK_RGB5551 261,10496 +#define SECOND_COLOR_MASK_RGB5551 262,10538 +#define THIRD_COLOR_MASK_RGB5551 263,10580 +#define ALPHA_BITS_MASK_RGB5551 264,10622 +#define CONCAT(CONCAT267,10690 +#define BUILD_PIXEL_D(BUILD_PIXEL_D271,10866 +#define BUILD_PIXEL2_D(BUILD_PIXEL2_D272,10928 +#define DECOMPOSE_PIXEL_D(DECOMPOSE_PIXEL_D273,10992 +#define BUILD_PIXEL(BUILD_PIXEL275,11071 +#define BUILD_PIXEL2(BUILD_PIXEL2276,11132 +#define DECOMPOSE_PIXEL(DECOMPOSE_PIXEL277,11195 +#define MAX_RED_D(MAX_RED_D279,11273 +#define MAX_BLUE_D(MAX_BLUE_D280,11314 +#define MAX_GREEN_D(MAX_GREEN_D281,11357 +#define RED_LOW_BIT_MASK_D(RED_LOW_BIT_MASK_D282,11402 +#define BLUE_LOW_BIT_MASK_D(BLUE_LOW_BIT_MASK_D283,11460 +#define GREEN_LOW_BIT_MASK_D(GREEN_LOW_BIT_MASK_D284,11520 +#define RED_HI_BIT_MASK_D(RED_HI_BIT_MASK_D285,11582 +#define BLUE_HI_BIT_MASK_D(BLUE_HI_BIT_MASK_D286,11638 +#define GREEN_HI_BIT_MASK_D(GREEN_HI_BIT_MASK_D287,11696 +#define FIRST_COLOR_MASK_D(FIRST_COLOR_MASK_D288,11756 +#define SECOND_COLOR_MASK_D(SECOND_COLOR_MASK_D289,11816 +#define THIRD_COLOR_MASK_D(THIRD_COLOR_MASK_D290,11877 +#define ALPHA_BITS_MASK_D(ALPHA_BITS_MASK_D291,11937 +#define MAX_RED 293,11997 +#define MAX_BLUE 294,12039 +#define MAX_GREEN 295,12082 +#define RED_LOW_BIT_MASK 296,12127 +#define BLUE_LOW_BIT_MASK 297,12185 +#define GREEN_LOW_BIT_MASK 298,12251 +#define RED_HI_BIT_MASK 299,12318 +#define BLUE_HI_BIT_MASK 300,12382 +#define GREEN_HI_BIT_MASK 301,12447 +#define FIRST_COLOR_MASK 302,12513 +#define SECOND_COLOR_MASK 303,12578 +#define THIRD_COLOR_MASK 304,12644 +#define ALPHA_BITS_MASK 305,12709 +#define GREEN_HI_BIT 307,12774 +#define RGB_LOW_BITS_MASK 308,12821 +#define RGB_HI_BITS_MASK 310,12915 +#define RGB_HI_BITS_MASKx2 312,13006 +#define RGB_REMOVE_LOW_BITS_MASK 314,13107 +#define FIRST_THIRD_COLOR_MASK 315,13161 +#define TWO_LOW_BITS_MASK 316,13230 +#define HIGH_BITS_SHIFTED_TWO_MASK 317,13303 + +port.h,2226 +#define _PORT_H_91,3624 +#define ACCEPT_SIZE_T 105,3824 +#define ACCEPT_SIZE_T 107,3856 +#define GFX_MULTI_FORMAT114,3964 +#define ZLIB119,4053 +#define EXECUTE_SUPERFX_PER_LINE120,4066 +#define SOUND121,4099 +#define VAR_CYCLES122,4113 +#define CPU_SHUTDOWN123,4132 +#define SPC700_SHUTDOWN124,4153 +#define PIXEL_FORMAT 125,4177 +#define CHECK_SOUND(CHECK_SOUND126,4205 +#define M_PI 127,4227 +#define USE_X86_ASM139,4530 +#define snes9x_types_defined143,4587 +typedef unsigned char bool8;bool8145,4617 +typedef unsigned char uint8;uint8149,4745 +typedef unsigned short uint16;uint16150,4774 +typedef signed char int8;int8151,4805 +typedef short int16;int16152,4831 +typedef int int32;int32153,4852 +typedef unsigned int uint32;uint32154,4871 +typedef long long int64;int64158,4979 +typedef unsigned char uint8;uint8165,5081 +typedef unsigned short uint16;uint16166,5110 +typedef signed char int8;int8167,5141 +typedef short int16;int16168,5167 +typedef long int32;int32172,5246 +# define PLAT_SOUND_BUFFER 174,5267 +# define RIGHTSHIFT_IS_SAR175,5308 +typedef unsigned int uint32;uint32178,5346 +typedef __int64 int64;int64182,5404 +#define TRUE 191,5522 +#define FALSE 195,5559 +#define EXTERN_C199,5596 +#define START_EXTERN_C200,5613 +#define END_EXTERN_C201,5636 +#define EXTERN_C 204,5711 +#define START_EXTERN_C 205,5739 +#define END_EXTERN_C 206,5775 +#define EXTERN_C 208,5804 +#define START_EXTERN_C209,5828 +#define END_EXTERN_C210,5851 +#define PATH_MAX 217,5923 +#define _MAX_DIR 220,5953 +#define _MAX_DRIVE 221,5979 +#define _MAX_FNAME 222,6000 +#define _MAX_EXT 223,6028 +#define _MAX_PATH 224,6054 +#define ZeroMemory(ZeroMemory226,6082 +#define strcasecmp 233,6337 +#define strncasecmp 234,6364 +EXTERN_C int soundsignal;240,6450 +#define CHECK_SOUND 243,6559 +#define CHECK_SOUND(CHECK_SOUND245,6667 +#define SLASH_STR 249,6712 +#define SLASH_CHAR 250,6735 +#define SLASH_STR 252,6765 +#define SLASH_CHAR 253,6787 +#define SIG_PF 265,7055 +#define LSB_FIRST270,7205 +#define FAST_LSB_WORD_ACCESS271,7223 +#define MSB_FIRST273,7258 +#define TITLE 277,7297 +#define TITLE 281,7352 +#define TITLE 285,7404 +#define STATIC289,7448 +#define strncasecmp 290,7463 +#define STATIC 292,7498 + +ppu.h,1330 +#define _PPU_H_91,3623 +#define FIRST_VISIBLE_LINE 93,3640 +#define TILE_2BIT 98,3723 +#define TILE_4BIT 99,3743 +#define TILE_8BIT 100,3763 +#define MAX_2BIT_TILES 102,3784 +#define MAX_4BIT_TILES 103,3812 +#define MAX_8BIT_TILES 104,3840 +#define PPU_H_BEAM_IRQ_SOURCE 106,3869 +#define PPU_V_BEAM_IRQ_SOURCE 107,3908 +#define GSU_IRQ_SOURCE 108,3947 +#define SA1_IRQ_SOURCE 109,3980 +#define SA1_DMA_IRQ_SOURCE 110,4013 +struct ClipData ClipData112,4050 +struct InternalPPU InternalPPU118,4146 +struct SOBJSOBJ161,5187 +struct SPPU SPPU173,5350 +#define CLIP_OR 273,7516 +#define CLIP_AND 274,7534 +#define CLIP_XOR 275,7553 +#define CLIP_XNOR 276,7572 +struct SDMA SDMA278,7593 +} SnesModel;SnesModel333,8762 +#define MAX_5C77_VERSION 339,8852 +#define MAX_5C78_VERSION 340,8882 +#define MAX_5A22_VERSION 341,8912 +STATIC inline uint8 REGISTER_4212(343,8943 +STATIC inline void FLUSH_REDRAW 357,9335 +STATIC inline void REGISTER_2104 363,9443 +STATIC inline void REGISTER_2118 450,12342 +STATIC inline void REGISTER_2118_tile 483,13260 +STATIC inline void REGISTER_2118_linear 499,13832 +STATIC inline void REGISTER_2119 511,14242 +STATIC inline void REGISTER_2119_tile 544,15175 +STATIC inline void REGISTER_2119_linear 559,15745 +STATIC inline void REGISTER_2122(571,16160 +STATIC inline void REGISTER_2180(618,17448 + +sa1.h,902 +#define _sa1_h_91,3623 +struct SSA1Registers SSA1Registers95,3661 +struct SSA1 SSA1107,3826 +#define SA1CheckZero(SA1CheckZero146,4745 +#define SA1CheckCarry(SA1CheckCarry147,4785 +#define SA1CheckIRQ(SA1CheckIRQ148,4822 +#define SA1CheckDecimal(SA1CheckDecimal149,4868 +#define SA1CheckIndex(SA1CheckIndex150,4922 +#define SA1CheckMemory(SA1CheckMemory151,4976 +#define SA1CheckOverflow(SA1CheckOverflow152,5032 +#define SA1CheckNegative(SA1CheckNegative153,5075 +#define SA1CheckEmulation(SA1CheckEmulation154,5125 +#define SA1ClearFlags(SA1ClearFlags156,5185 +#define SA1SetFlags(SA1SetFlags157,5237 +#define SA1CheckFlag(SA1CheckFlag158,5289 +#define SNES_IRQ_SOURCE 183,5966 +#define TIMER_IRQ_SOURCE 184,6003 +#define DMA_IRQ_SOURCE 185,6040 +STATIC inline void S9xSA1UnpackStatus(187,6077 +STATIC inline void S9xSA1PackStatus(195,6318 +STATIC inline void S9xSA1FixCycles 202,6541 + +sar.h,185 +#define _SAR_H_91,3623 +#define SAR(SAR104,3792 +static inline int8 SAR(107,3828 +static inline int16 SAR(114,3976 +static inline int32 SAR(121,4128 +static inline int64 SAR(128,4280 + +screenshot.h,29 +#define SCREENSHOT_H91,3628 + +sdd1.h,25 +#define _SDD1_H_91,3624 + +sdd1emu.h,26 +#define SDD1EMU_H90,3624 + +seta.h,378 +#define _seta_h92,3639 +#define ST_010 96,3675 +#define ST_011 97,3695 +#define ST_018 98,3715 +typedef struct SETA_ST010_STRUCTSETA_ST010_STRUCT117,4154 +} ST010_Regs;ST010_Regs124,4294 +typedef struct SETA_ST011_STRUCTSETA_ST011_STRUCT126,4309 +} ST011_Regs;ST011_Regs137,4519 +typedef struct SETA_ST018_STRUCTSETA_ST018_STRUCT139,4534 +} ST018_Regs;ST018_Regs152,4779 + +snaporig.h,597 +#define _SNAPORIG_H_90,3627 +#define ORIG_SNAPSHOT_MAGIC 92,3649 +#define ORIG_SNAPSHOT_VERSION 93,3688 +struct SOrigCPUState{SOrigCPUState97,3781 +struct SOrigAPUSOrigAPU127,4467 +} OrigYAndA;OrigYAndA150,4881 +struct SOrigAPURegisters{SOrigAPURegisters152,4895 +#define ORIG_MAX_BUFFER_SIZE 160,5001 +#define NUM_CHANNELS 161,5041 +} OrigChannel;OrigChannel195,5853 +} SOrigSoundData;SOrigSoundData213,6309 +struct SOrigOBJSOrigOBJ215,6328 +struct SOrigPPU SOrigPPU229,6530 +struct SOrigDMA SOrigDMA332,8740 +} OrigPair;OrigPair364,9323 +struct SOrigRegisters{SOrigRegisters366,9336 + +snapshot.h,293 +#define _SNAPSHOT_H_90,3627 +#define SNAPSHOT_MAGIC 95,3689 +#define SNAPSHOT_VERSION 96,3723 +#define SUCCESS 98,3751 +#define WRONG_FORMAT 99,3769 +#define WRONG_VERSION 100,3795 +#define FILE_NOT_FOUND 101,3822 +#define WRONG_MOVIE_SNAPSHOT 102,3850 +#define NOT_A_MOVIE_SNAPSHOT 103,3884 + +snes9x.h,3003 +#define _SNES9X_H_90,3625 +#define VERSION 92,3645 +#define GFX_MULTI_FORMAT109,3928 +#define ROM_NAME_LEN 112,3961 +#define STREAM 118,4041 +#define READ_STREAM(READ_STREAM119,4063 +#define WRITE_STREAM(WRITE_STREAM120,4105 +#define OPEN_STREAM(OPEN_STREAM121,4149 +#define REOPEN_STREAM(REOPEN_STREAM122,4187 +#define FIND_STREAM(FIND_STREAM123,4228 +#define REVERT_STREAM(REVERT_STREAM124,4261 +#define CLOSE_STREAM(CLOSE_STREAM125,4305 +#define STREAM 127,4347 +#define READ_STREAM(READ_STREAM128,4369 +#define WRITE_STREAM(WRITE_STREAM129,4412 +#define OPEN_STREAM(OPEN_STREAM130,4457 +#define REOPEN_STREAM(REOPEN_STREAM131,4494 +#define FIND_STREAM(FIND_STREAM132,4534 +#define REVERT_STREAM(REVERT_STREAM133,4566 +#define CLOSE_STREAM(CLOSE_STREAM134,4609 +#define SNES_WIDTH 139,4688 +#define SNES_HEIGHT 140,4712 +#define SNES_HEIGHT_EXTENDED 141,4737 +#define IMAGE_WIDTH 142,4770 +#define IMAGE_HEIGHT 143,4845 +#define SNES_MAX_NTSC_VCOUNTER 145,4942 +#define SNES_MAX_PAL_VCOUNTER 146,4978 +#define SNES_HCOUNTER_MAX 147,5014 +#define SPC700_TO_65C816_RATIO 148,5044 +#define AUTO_FRAMERATE 149,5077 +#define SNES_SCANLINE_TIME 163,5582 +#define SNES_CLOCK_SPEED 164,5621 +#define SNES_CLOCK_LEN 166,5657 +#define SNES_CYCLES_PER_SCANLINE 168,5706 +#define SNES_APUTIMER2_CYCLEx10000 170,5801 +#define ONE_CYCLE 172,5931 +#define SLOW_ONE_CYCLE 173,5951 +#define TWO_CYCLES 174,5976 +#define SNES_TR_MASK 177,6000 +#define SNES_TL_MASK 178,6034 +#define SNES_X_MASK 179,6068 +#define SNES_A_MASK 180,6101 +#define SNES_RIGHT_MASK 181,6134 +#define SNES_LEFT_MASK 182,6171 +#define SNES_DOWN_MASK 183,6207 +#define SNES_UP_MASK 184,6244 +#define SNES_START_MASK 185,6279 +#define SNES_SELECT_MASK 186,6317 +#define SNES_Y_MASK 187,6355 +#define SNES_B_MASK 188,6389 + SNES_MULTIPLAYER5,191,6431 + SNES_JOYPAD,192,6454 + SNES_MOUSE_SWAPPED,193,6471 + SNES_MOUSE,194,6495 + SNES_SUPERSCOPE,195,6511 + SNES_JUSTIFIER,196,6532 + SNES_JUSTIFIER_2,197,6549 + SNES_MAX_CONTROLLER_OPTIONS198,6568 +#define DEBUG_MODE_FLAG 201,6604 +#define TRACE_FLAG 202,6641 +#define SINGLE_STEP_FLAG 203,6671 +#define BREAK_FLAG 204,6708 +#define SCAN_KEYS_FLAG 205,6738 +#define SAVE_SNAPSHOT_FLAG 206,6774 +#define DELAYED_NMI_FLAG 207,6811 +#define NMI_FLAG 208,6848 +#define PROCESS_SOUND_FLAG 209,6876 +#define FRAME_ADVANCE_FLAG 210,6913 +#define DELAYED_NMI_FLAG2 211,6950 +#define IRQ_PENDING_FLAG 212,6988 +struct SCPUState{SCPUState214,7027 +#define HBLANK_START_EVENT 245,7719 +#define HBLANK_END_EVENT 246,7748 +#define HTIMER_BEFORE_EVENT 247,7775 +#define HTIMER_AFTER_EVENT 248,7805 +#define NO_EVENT 249,7834 +struct SSettings{SSettings251,7854 +struct SSNESGameFixesSSNESGameFixes395,11244 + PAUSE_NETPLAY_CONNECT 417,11722 + PAUSE_TOGGLE_FULL_SCREEN 418,11760 + PAUSE_EXIT 419,11801 + PAUSE_MENU 420,11828 + PAUSE_INACTIVE_WINDOW 421,11855 + PAUSE_WINDOW_ICONISED 422,11893 + PAUSE_RESTORE_GUI 423,11931 + PAUSE_FREEZE_FILE 424,11965 + +soundux.h,1791 +#define _SOUND_H_90,3624 +enum { SOUND_SAMPLE 92,3643 +enum { SOUND_SAMPLE = 0, SOUND_NOISE,92,3643 +enum { SOUND_SAMPLE = 0, SOUND_NOISE, SOUND_EXTRA_NOISE,92,3643 +enum { SOUND_SAMPLE = 0, SOUND_NOISE, SOUND_EXTRA_NOISE, SOUND_MUTE 92,3643 +enum { SOUND_SILENT,93,3714 +enum { SOUND_SILENT, SOUND_ATTACK,93,3714 +enum { SOUND_SILENT, SOUND_ATTACK, SOUND_DECAY,93,3714 +enum { SOUND_SILENT, SOUND_ATTACK, SOUND_DECAY, SOUND_SUSTAIN,93,3714 + SOUND_RELEASE,94,3777 + SOUND_RELEASE, SOUND_GAIN,94,3777 + SOUND_RELEASE, SOUND_GAIN, SOUND_INCREASE_LINEAR,94,3777 + SOUND_INCREASE_BENT_LINE,95,3834 + SOUND_INCREASE_BENT_LINE, SOUND_DECREASE_LINEAR,95,3834 + SOUND_DECREASE_EXPONENTIAL}96,3890 +enum { MODE_NONE 98,3927 +enum { MODE_NONE = SOUND_SILENT,98,3927 +enum { MODE_NONE = SOUND_SILENT, MODE_ADSR,98,3927 +enum { MODE_NONE = SOUND_SILENT, MODE_ADSR, MODE_RELEASE 98,3927 +enum { MODE_NONE = SOUND_SILENT, MODE_ADSR, MODE_RELEASE = SOUND_RELEASE,98,3927 + MODE_GAIN,99,4001 + MODE_GAIN, MODE_INCREASE_LINEAR,99,4001 + MODE_GAIN, MODE_INCREASE_LINEAR, MODE_INCREASE_BENT_LINE,99,4001 + MODE_DECREASE_LINEAR,100,4066 + MODE_DECREASE_LINEAR, MODE_DECREASE_EXPONENTIAL}100,4066 +#define MAX_ENVELOPE_HEIGHT 102,4124 +#define ENVELOPE_SHIFT 103,4156 +#define MAX_VOLUME 104,4181 +#define VOLUME_SHIFT 105,4204 +#define VOL_DIV 106,4227 +#define SOUND_DECODE_LENGTH 107,4247 +#define NUM_CHANNELS 109,4279 +#define SOUND_BUFFER_SIZE 110,4305 +#define MAX_BUFFER_SIZE 111,4343 +#define SOUND_BUFFER_SIZE_MASK 112,4385 +#define SOUND_BUFS 114,4441 +} SoundStatus;SoundStatus140,4916 +EXTERN_C volatile SoundStatus so;142,4932 +} Channel;Channel183,5966 +} SSoundData;SSoundData205,6508 +EXTERN_C SSoundData SoundData;207,6523 + +spc700.h,1770 +#define _SPC700_H_90,3625 +#define NO_CHANNEL_STRUCT93,3660 +#define Carry 99,3777 +#define Zero 100,3799 +#define Interrupt 101,3821 +#define HalfCarry 102,3843 +#define BreakFlag 103,3865 +#define DirectPageFlag 104,3887 +#define Overflow 105,3913 +#define Negative 106,3935 +#define APUClearCarry(APUClearCarry108,3958 +#define APUSetCarry(APUSetCarry109,4000 +#define APUSetInterrupt(APUSetInterrupt110,4040 +#define APUClearInterrupt(APUClearInterrupt111,4096 +#define APUSetHalfCarry(APUSetHalfCarry112,4155 +#define APUClearHalfCarry(APUClearHalfCarry113,4211 +#define APUSetBreak(APUSetBreak114,4270 +#define APUClearBreak(APUClearBreak115,4322 +#define APUSetDirectPage(APUSetDirectPage116,4377 +#define APUClearDirectPage(APUClearDirectPage117,4439 +#define APUSetOverflow(APUSetOverflow118,4504 +#define APUClearOverflow(APUClearOverflow119,4550 +#define APUCheckZero(APUCheckZero121,4599 +#define APUCheckCarry(APUCheckCarry122,4640 +#define APUCheckInterrupt(APUCheckInterrupt123,4678 +#define APUCheckHalfCarry(APUCheckHalfCarry124,4735 +#define APUCheckBreak(APUCheckBreak125,4792 +#define APUCheckDirectPage(APUCheckDirectPage126,4845 +#define APUCheckOverflow(APUCheckOverflow127,4908 +#define APUCheckNegative(APUCheckNegative128,4952 +#define APUClearFlags(APUClearFlags130,5000 +#define APUSetFlags(APUSetFlags131,5050 +#define APUCheckFlag(APUCheckFlag132,5100 +} YAndA;YAndA142,5271 +struct SAPURegisters{SAPURegisters144,5281 +EXTERN_C struct SAPURegisters APURegisters;152,5379 +#define ONE_APU_CYCLE 156,5481 +#define ONE_APU_CYCLE_HUMAN 160,5608 +#define APU_EXECUTE(APU_EXECUTE167,5715 +#define APU_EXECUTE1(APU_EXECUTE1180,5909 +#define APU_EXECUTE1(APU_EXECUTE1188,6080 +#define APU_EXECUTE(APU_EXECUTE195,6201 + +spc7110.h,223 +#define _spc7110_h90,3625 +#define DECOMP_BUFFER_SIZE 93,3663 +typedef struct SPC7110RTCSPC7110RTC123,4428 +} S7RTC;S7RTC130,4541 +typedef struct SPC7110EmuVarsSPC7110EmuVars132,4551 +} SPC7110Regs;SPC7110Regs187,5818 + +srtc.h,314 +#define _srtc_h_90,3623 +#define MAX_RTC_INDEX 94,3660 +#define MODE_READ 96,3693 +#define MODE_LOAD_RTC 97,3723 +#define MODE_COMMAND 98,3753 +#define MODE_COMMAND_DONE 99,3783 +#define COMMAND_LOAD_RTC 101,3814 +#define COMMAND_CLEAR_RTC 102,3844 +} SRTC_DATA;SRTC_DATA142,4710 +#define SRTC_SRAM_PAD 154,4976 + +tile.h,1326 +#define _TILE_H_90,3623 +#define TILE_AssignPixel(TILE_AssignPixel92,3641 +#define TILE_SetPixel(TILE_SetPixel94,3712 +#define TILE_SetPixel16(TILE_SetPixel1695,3801 +#define TILE_AddPixel16(TILE_AddPixel1697,3883 +#define TILE_AddFPixel16(TILE_AddFPixel1698,4000 +#define TILE_AddPixel16Half(TILE_AddPixel16Half99,4113 +#define TILE_AddFPixel16Half(TILE_AddFPixel16Half100,4241 +#define TILE_SubPixel16(TILE_SubPixel16102,4366 +#define TILE_SubFPixel16(TILE_SubFPixel16103,4483 +#define TILE_SubPixel16Half(TILE_SubPixel16Half104,4596 +#define TILE_SubFPixel16Half(TILE_SubFPixel16Half105,4724 +#define TILE_Select3(TILE_Select3107,4849 +#define TILE_Select2(TILE_Select2115,5096 +#define TILE_SelectAddPixel16(TILE_SelectAddPixel16122,5281 +#define TILE_SelectAddPixel16Half(TILE_SelectAddPixel16Half123,5372 +#define TILE_SelectSubPixel16(TILE_SelectSubPixel16124,5467 +#define TILE_SelectSubPixel16Half(TILE_SelectSubPixel16Half125,5558 +#define TILE_SelectFAddPixel16Half(TILE_SelectFAddPixel16Half127,5654 +#define TILE_SelectFSubPixel16Half(TILE_SelectFSubPixel16Half128,5738 +#define TILE_PREAMBLE 132,5846 +#define RENDER_TILE(RENDER_TILE160,6686 +#define TILE_CLIP_PREAMBLE 208,7810 +#define RENDER_CLIPPED_TILE(RENDER_CLIPPED_TILE235,8278 +#define RENDER_TILE_LARGE(RENDER_TILE_LARGE287,9666 + +unix/config.c,1218 +#define MIN(MIN120,4464 +typedef struct CONFIG_ENTRYCONFIG_ENTRY123,4513 +} CONFIG_ENTRY;CONFIG_ENTRY128,4728 +typedef struct CONFIGCONFIG131,4746 +} CONFIG;CONFIG136,4975 +#define MAX_CONFIGS 139,4987 +static CONFIG *config[141,5014 +static CONFIG *config_override 142,5079 +char *get_filename(146,5179 +long file_size 158,5397 +static void destroy_config(179,5714 +static void config_cleanup(239,6677 +static void init_config(265,7224 +static int get_line(326,8570 +static void set_config(387,9808 +static void load_config_file(441,10881 +void set_config_file(466,11428 +void set_config_data(477,11633 +void override_config_file(487,11835 +void override_config_data(498,12056 +void push_config_state(508,12244 +void pop_config_state(526,12525 +static void prettify_section_name(544,12820 +static CONFIG_ENTRY *find_config_string(566,13163 +char *get_config_string(608,13972 +int get_config_int(630,14373 +int get_config_hex(645,14642 +float get_config_float(665,15005 +char **get_config_argv(680,15278 + #define MAX_ARGV 682,15341 +static CONFIG_ENTRY *insert_variable(723,16028 +void set_config_string(758,16653 +void set_config_int(839,18330 +void set_config_hex(851,18563 +void set_config_float(867,18871 + +unix/aido.h,25 +#define _AIDO_H_90,3623 + +unix/snes9x_gui.h,64 +#define SNES9X_GUI_H90,3627 +class Snes9xGUI:Snes9xGUI97,3710 + +unix/x11.h,52 +#define _x11_h_90,3622 +} GUIData;GUIData159,5023 + +unzip/explode.c,831 +# define WSIZE 75,4017 +struct huft huft80,4174 +UWORD cplen2[124,6002 +UWORD cplen3[128,6293 +UWORD extra[132,6585 +UWORD cpdist4[136,6819 +UWORD cpdist8[142,7244 +#define NEXTBYTE 164,8115 +#define NEEDBITS(NEEDBITS165,8165 +#define DUMPBITS(DUMPBITS166,8231 +UWORD mask_bits[169,8281 +union work area;174,8453 +ULONG crc32val;175,8528 +ush bytebuf;176,8544 +ULONG bitbuf;177,8557 +int bits_left;178,8571 +boolean zipeof;179,8586 +int get_tree(181,8603 +int explode_lit8(213,9668 +int explode_lit4(335,13397 +int explode_nolit8(457,17125 +int explode_nolit4(570,20510 +int explode 683,23894 +int ReadByte(811,27677 +#define BMAX 852,28918 +#define N_MAX 853,28996 +unsigned hufts;855,29062 +int huft_build(858,29113 +int huft_free(1051,36013 +void flush(1071,36459 +void flush_stack(1084,36935 +int FillBitBuffer(1101,37511 + +unzip/unreduce.c,300 +#define DLE 20,607 +typedef byte f_array[f_array22,627 + f_array *followers;35,1000 + f_array *followers 37,1057 +byte Slen[40,1119 +int factor;41,1135 +int L_table[43,1148 +int D_shift[46,1194 +int D_mask[48,1239 +int B_table[51,1284 +void unReduce(76,2174 +static void LoadFollowers(206,5624 + +unzip/unshrink.c,309 +#define INIT_BITS 19,508 +#define FIRST_ENT 20,534 +#define CLEAR 21,562 +#define GetCode(GetCode22,590 +int codesize,26,669 +int codesize, maxcode,26,669 +int codesize, maxcode, maxcodemax,26,669 +int codesize, maxcode, maxcodemax, free_ent;26,669 +void unShrink(35,803 +static void partial_clear(151,3535 + +unzip/unzip.c,1011 +const char unz_copyright[26,390 +unzlocal_getByte 42,787 +unzlocal_getShort 65,1209 +unzlocal_getLong 86,1552 +strcmpcasenosensitive_internal 117,2103 +#define CASESENSITIVITYDEFAULTVALUE 140,2567 +#define CASESENSITIVITYDEFAULTVALUE 142,2611 +#define STRCMPCASENOSENTIVEFUNCTION 146,2693 +unzStringFileNameCompare 158,3124 +#define BUFREADCOMMENT 169,3438 +unzlocal_SearchCentralDir 176,3583 +unzOpen 238,5233 +unzClose 341,8055 +unzGetGlobalInfo 363,8482 +unzlocal_DosDateToTmuDate 378,8783 + local int unzlocal_GetCurrentFileInfoInternal 406,9645 +unzGetCurrentFileInfo 566,14262 +unzGoToFirstFile 587,14860 +unzGoToNextFile 610,15500 +unzLocateFile 642,16466 +unzlocal_CheckCurrentFileCoherencyHeader 695,17781 +unzOpenCurrentFile 786,20472 +file_in_zip_read_info_s *pfile_in_zip_read_info 898,24010 +unz_s *pUnzip 899,24066 +unzReadCurrentFile 901,24108 +unztell 1056,28648 +unzeof 1076,29086 +unzGetLocalExtrafield 1108,29971 +unzCloseCurrentFile 1156,31173 +unzGetGlobalComment 1196,32231 + +unzip/unz.h,8414 +# define UNIX25,827 +# define __TURBOC__33,1066 +# define MSDOS34,1087 +# define MSDOS37,1192 +# define PROTO46,1520 +# define MODERN48,1547 +# define PROTO52,1655 +# define MODERN54,1682 +# define PROTO58,1779 +# define MODERN60,1806 +# define BSD70,2074 +# define TERMIO76,2264 +# define ZMEM82,2393 +# define NO_PARAM_H99,2914 +# define DECLARE_ERRNO 116,3313 + typedef size_t extent;extent140,4236 + typedef unsigned int extent;extent145,4349 +# define void 146,4381 +# define BSIZE 174,5244 +# define BSIZE 176,5294 +# define NO_MKDIR 182,5461 +# define BSIZE 195,5764 +# define strchr 199,5876 +# define strrchr 200,5902 +# define DOS_OS2208,6155 +# define MSC 217,6805 +# define DOS_OS2224,7103 +# define S_IFMT 225,7121 +# define timezone 226,7145 +# define DOS_OS2230,7201 +# define __32BIT__231,7219 +# define far236,7309 +# define DOS_OS2240,7346 +# define __32BIT__241,7364 +# define far242,7384 +# define DOS_OS2 246,7500 +# define isupper(isupper264,8274 +# define tolower(tolower265,8328 +# define DOS_OS2279,8690 +# define getch(getch280,8710 +# define _MAX_PATH 292,9127 +# define UNIX 293,9193 +# define RETURN 294,9273 +# define RETURN 297,9388 +# define RETURN(RETURN299,9456 +# define O_RDONLY 309,9817 +# define O_WRONLY 310,9841 +# define O_RDWR 311,9865 +# define SHORT_NAMES320,10162 +# define tzset 321,10190 +# define DOS_VMS330,10453 +# define MACOS338,10694 +# define __STDC__ 340,10785 +# define __STDC__ 344,11036 +# define MACOS350,11201 +# define CtoPstr 356,11332 +# define PtoCstr 357,11357 +# define open(open364,11449 +# define close 365,11502 +# define read 366,11527 +# define write 367,11550 +# define lseek 368,11575 +# define creat(creat369,11600 +# define stat(stat370,11676 +# define isascii(isascii373,11747 +typedef struct _ZipExtraHdr _ZipExtraHdr378,11833 +} ZIP_EXTRA_HEADER;ZIP_EXTRA_HEADER381,11957 +typedef struct _MacInfoMin _MacInfoMin383,11978 +} MACINFOMIN;MACINFOMIN393,12430 +typedef struct _MacInfo _MacInfo395,12495 +} MACINFO;MACINFO406,12991 +# define extract_or_test_files 418,13373 +# define extract_or_test_member 419,13425 +# define mkdir(mkdir424,13565 +# define EBCDIC 425,13631 +# define WSIZE 437,13766 +#define DIR_BLKSIZ 440,13917 +# define INBUFSIZ 443,14076 +# define FILNAMSIZ 456,14420 +# define FILNAMSIZ 458,14481 +# define PATH_MAX 463,14633 +# define PATH_MAX 466,14754 +# define PATH_MAX 468,14803 +#define OUTBUFSIZ 473,14907 +#define ZSUFX 475,14943 +#define CENTRAL_HDR_SIG 476,14976 +#define LOCAL_HDR_SIG 477,15053 +#define END_CENTRAL_SIG 478,15129 +#define EXTD_LOCAL_SIG 479,15207 +#define SKIP 481,15274 +#define DISPLAY 482,15348 +#define FILENAME 483,15376 +#define EXTRA_FIELD 484,15404 +#define DOES_NOT_EXIST 486,15433 +#define EXISTS_AND_OLDER 487,15506 +#define EXISTS_AND_NEWER 488,15534 +#define DOS_OS2_FAT_ 490,15563 +#define AMIGA_ 491,15636 +#define VMS_ 492,15664 +#define UNIX_ 493,15736 +#define VM_CMS_ 494,15811 +#define ATARI_ 495,15887 +#define OS2_HPFS_ 496,15936 +#define MAC_ 497,15964 +#define Z_SYSTEM_ 498,15992 +#define CPM_ 499,16020 +#define NUM_HOSTS 501,16121 +#define STORED 503,16184 +#define SHRUNK 504,16241 +#define REDUCED1 505,16269 +#define REDUCED2 506,16297 +#define REDUCED3 507,16325 +#define REDUCED4 508,16353 +#define IMPLODED 509,16381 +#define TOKENIZED 510,16409 +#define DEFLATED 511,16437 +#define NUM_METHODS 512,16465 +#define DF_MDY 515,16607 +#define DF_DMY 516,16676 +#define DF_YMD 517,16754 +#define UNZIP_VERSION 519,16831 +#define VMS_VERSION 520,16896 +#define LREC_SIZE 527,17344 +#define CREC_SIZE 528,17417 +#define ECREC_SIZE 529,17490 +#define MAX_BITS 531,17564 +#define HSIZE 532,17630 +#define LF 534,17703 +#define CR 535,17781 +#define CTRLZ 536,17859 +# define ascii_to_native(ascii_to_native539,17951 +# define NATIVE 540,17994 +# define FFLUSH 544,18039 +# define FFLUSH 546,18095 +# define ENV_UNZIP 550,18161 +# define ENV_ZIPINFO 551,18238 +# define ENV_UNZIP 553,18294 +# define ENV_ZIPINFO 554,18326 +# define PWLEN 558,18392 +# define DECRYPT(DECRYPT559,18419 +# define QCOND 563,18542 +# define QCOND 565,18669 +# define TRUE 569,18769 +# define FALSE 572,18836 +# define SEEK_SET 576,18944 +# define SEEK_CUR 577,19022 +# define SEEK_END 578,19044 +# define S_IRWXU 582,19090 +# define S_IRUSR 583,19160 +# define S_IWUSR 584,19225 +# define S_IXUSR 585,19291 +# define S_IRWXG 586,19359 +# define S_IRGRP 587,19429 +# define S_IWGRP 588,19494 +# define S_IXGRP 589,19560 +# define S_IRWXO 590,19628 +# define S_IROTH 591,19698 +# define S_IWOTH 592,19763 +# define S_IXOTH 593,19829 +# define S_IFBLK 598,20069 +# define S_IFIFO 601,20183 +# define S_IFLNK 604,20283 +# define S_IFSOCK 607,20393 +# define S_ISUID 610,20471 +# define S_ISGID 613,20567 +# define S_ISVTX 616,20664 +# define S_ENFMT 619,20765 + typedef unsigned char byte;byte632,21008 +typedef char boolean;boolean635,21106 +typedef long longint;longint636,21141 +typedef unsigned short UWORD;UWORD637,21176 +typedef unsigned long ULONG;ULONG638,21209 +typedef unsigned char uch;uch639,21242 +typedef unsigned short ush;ush640,21273 +typedef unsigned long ulg;ulg641,21304 +typedef struct min_info min_info643,21336 +} min_info;min_info654,21872 +typedef struct VMStimbuf VMStimbuf656,21885 +} VMStimbuf;VMStimbuf659,22009 + typedef byte local_byte_hdr[local_byte_hdr666,22309 +# define L_VERSION_NEEDED_TO_EXTRACT_0 667,22356 +# define L_VERSION_NEEDED_TO_EXTRACT_1 668,22406 +# define L_GENERAL_PURPOSE_BIT_FLAG 669,22456 +# define L_COMPRESSION_METHOD 670,22506 +# define L_LAST_MOD_FILE_TIME 671,22556 +# define L_LAST_MOD_FILE_DATE 672,22606 +# define L_CRC32 673,22656 +# define L_COMPRESSED_SIZE 674,22707 +# define L_UNCOMPRESSED_SIZE 675,22758 +# define L_FILENAME_LENGTH 676,22809 +# define L_EXTRA_FIELD_LENGTH 677,22860 + typedef byte cdir_byte_hdr[cdir_byte_hdr679,22912 +# define C_VERSION_MADE_BY_0 680,22958 +# define C_VERSION_MADE_BY_1 681,23008 +# define C_VERSION_NEEDED_TO_EXTRACT_0 682,23058 +# define C_VERSION_NEEDED_TO_EXTRACT_1 683,23108 +# define C_GENERAL_PURPOSE_BIT_FLAG 684,23158 +# define C_COMPRESSION_METHOD 685,23208 +# define C_LAST_MOD_FILE_TIME 686,23258 +# define C_LAST_MOD_FILE_DATE 687,23308 +# define C_CRC32 688,23359 +# define C_COMPRESSED_SIZE 689,23410 +# define C_UNCOMPRESSED_SIZE 690,23461 +# define C_FILENAME_LENGTH 691,23512 +# define C_EXTRA_FIELD_LENGTH 692,23563 +# define C_FILE_COMMENT_LENGTH 693,23614 +# define C_DISK_NUMBER_START 694,23665 +# define C_INTERNAL_FILE_ATTRIBUTES 695,23716 +# define C_EXTERNAL_FILE_ATTRIBUTES 696,23767 +# define C_RELATIVE_OFFSET_LOCAL_HEADER 697,23818 + typedef byte ec_byte_rec[ec_byte_rec699,23870 +# define NUMBER_THIS_DISK 701,23990 +# define NUM_DISK_WITH_START_CENTRAL_DIR 702,24040 +# define NUM_ENTRIES_CENTRL_DIR_THS_DISK 703,24090 +# define TOTAL_ENTRIES_CENTRAL_DIR 704,24140 +# define SIZE_CENTRAL_DIRECTORY 705,24191 +# define OFFSET_START_CENTRAL_DIRECTORY 706,24242 +# define ZIPFILE_COMMENT_LENGTH 707,24293 + typedef struct local_file_header local_file_header710,24346 + } local_file_hdr;local_file_hdr721,24737 + typedef struct central_directory_file_header central_directory_file_header723,24759 + } cdir_file_hdr;cdir_file_hdr740,25371 + typedef struct end_central_dir_record end_central_dir_record742,25392 + } ecdir_rec;ecdir_rec750,25746 +# define __ 761,25863 +# define MAX(MAX784,26512 +# define MIN(MIN788,26577 +#define LSEEK(LSEEK792,26631 +#define SKIP_(SKIP_834,28430 +#define READBIT(READBIT853,28971 +#define PEEKBIT(PEEKBIT869,29345 +#define NUKE_CRs(NUKE_CRs873,29479 +#define TOLOWER(TOLOWER896,30178 +# define ascii_to_native(ascii_to_native927,31296 +# define A_TO_N(A_TO_N928,31331 +# define NATIVE 931,31377 +# define A_TO_N(A_TO_N933,31424 + union work work964,32485 + union work work973,32665 +# define prefix_of 984,33002 +# define suffix_of 985,33044 +# define stack 986,33086 +# define slide 987,33120 + +unzip/unzip.h,1007 +#define _unz_H42,1738 +typedef struct TagunzFile__ TagunzFile__55,1995 +typedef struct TagunzFile__ { int unused; } unzFile__;unzFile__55,1995 +typedef unzFile__ *unzFile;unzFile56,2051 +typedef voidp unzFile;unzFile58,2085 +#define UNZ_OK 62,2117 +#define UNZ_END_OF_LIST_OF_FILE 63,2169 +#define UNZ_ERRNO 64,2208 +#define UNZ_EOF 65,2250 +#define UNZ_PARAMERROR 66,2286 +#define UNZ_BADZIPFILE 67,2333 +#define UNZ_INTERNALERROR 68,2380 +#define UNZ_CRCERROR 69,2427 +#define UNZ_STORED 71,2475 +#define UNZ_SHRUNK 72,2536 +#define UNZ_REDUCED1 73,2568 +#define UNZ_REDUCED2 74,2600 +#define UNZ_REDUCED3 75,2632 +#define UNZ_REDUCED4 76,2664 +#define UNZ_IMPLODED 77,2696 +#define UNZ_TOKENIZED 78,2728 +#define UNZ_DEFLATED 79,2760 +typedef struct tm_unz_s tm_unz_s82,2829 +} tm_unz;tm_unz90,3215 +typedef struct unz_global_info_sunz_global_info_s94,3344 +} unz_global_info;unz_global_info99,3558 +typedef struct unz_file_info_sunz_file_info_s103,3647 +} unz_file_info;unz_file_info122,4797 + +unzip/unzipP.h,609 +#define _UNZIPP_H_2,19 +#define local 7,73 +#define CASESENSITIVITYDEFAULT_NO15,296 +#define UNZ_BUFSIZE 20,359 +#define UNZ_MAXFILENAMEINZIP 24,424 +#define ALLOC(ALLOC28,481 +#define TRYFREE(TRYFREE31,539 +#define SIZECENTRALDIRITEM 34,584 +#define SIZEZIPLOCALHEADER 35,618 +#define SEEK_CUR 41,751 +#define SEEK_END 45,798 +#define SEEK_SET 49,845 +typedef struct unz_file_info_internal_sunz_file_info_internal_s53,951 +} unz_file_info_internal;unz_file_info_internal57,1083 +} file_in_zip_read_info_s;file_in_zip_read_info_s91,2450 +} unz_s;unz_s122,3668 + +jma/7zlzma.cpp,32 +bool decompress_lzma_7z(23,812 + +jma/crc32.cpp,81 +namespace CRC32libCRC32lib22,746 + unsigned int CRC32(CRC32lib::CRC3272,4053 + +jma/iiostrm.cpp,87 +HRESULT ISequentialInStream::Read(23,875 +HRESULT ISequentialOutStream::Write(33,1101 + +jma/inbyte.cpp,173 +namespace NStream{NStream22,852 +CInByte::CInByte(NStream::CInByte::CInByte24,872 +CInByte::~CInByte(31,1003 +void CInByte::Init(36,1053 +bool CInByte::ReadBlock(45,1239 + +jma/jma.cpp,589 +namespace JMAJMA100,3792 + time_t uint_to_time(JMA::uint_to_time109,4144 + void jma_open::retrieve_file_block(JMA::jma_open::retrieve_file_block125,4629 + jma_open::jma_open(JMA::jma_open::jma_open209,7357 + jma_open::~jma_open(JMA::jma_open::~jma_open242,8197 + vector jma_open::get_files_info(JMA::jma_open::get_files_info251,8350 + void jma_open::chunk_seek(JMA::jma_open::chunk_seek270,8923 + vector jma_open::get_all_files(JMA::jma_open::get_all_files295,9583 + void jma_open::extract_file(JMA::jma_open::extract_file414,13399 + +jma/lzma.cpp,224 +namespace NCompress NCompress22,850 +namespace NLZMA NCompress::NLZMA23,872 +static class CConstInitNCompress::NLZMA::CConstInit27,930 + CConstInit(NCompress::NLZMA::CConstInit::CConstInit30,964 +} g_ConstInit;40,1165 + +jma/lzmadec.cpp,556 +#define RETURN_E_OUTOFMEMORY_IF_FALSE(RETURN_E_OUTOFMEMORY_IF_FALSE24,932 +namespace NCompress NCompress26,1010 +namespace NLZMA NCompress::NLZMA27,1032 +HRESULT CDecoder::SetDictionarySize(NCompress::NLZMA::CDecoder::SetDictionarySize29,1051 +HRESULT CDecoder::SetLiteralProperties(44,1448 +HRESULT CDecoder::SetPosBitsProperties(55,1752 +CDecoder::CDecoder(66,2087 +HRESULT CDecoder::Create(72,2157 +HRESULT CDecoder::Init(83,2365 +HRESULT CDecoder::CodeReal(122,3225 +HRESULT CDecoder::Code(255,7814 +HRESULT CDecoder::ReadCoderProperties(266,8117 + +jma/s9x-jma.cpp,31 +size_t load_jma_file(100,3896 + +jma/winout.cpp,281 +namespace NStream NStream22,852 +namespace NWindow NStream::NWindow23,872 +void COut::Create(NStream::NWindow::COut::Create25,893 +COut::~COut(40,1381 +void COut::SetWindowSize(45,1421 +void COut::Init(51,1567 +HRESULT COut::Flush(65,1798 +void COut::MoveBlockBackward(80,2138 + +jma/7z.h,54 +#define __7Z_H21,845 +bool decompress_lzma_7z(23,861 + +jma/aribitcd.h,217 +#define __COMPRESSION_BITCODER_H2,33 +class CBitModelCBitModel18,349 + void UpdateModel(UpdateModel22,399 + void Init(Init34,802 +class CBitDecoder:CBitDecoder38,888 + UINT32 Decode(CBitDecoder::Decode41,948 + +jma/ariconst.h,187 +#define __ARICONST_H21,852 +typedef NCompression::NArithmetic::CRangeDecoder CMyRangeDecoder;CMyRangeDecoder26,898 +template class CMyBitDecoder:CMyBitDecoder27,964 + +jma/ariprice.h,38 +#define __COMPRESSION_ARIPRICE_H2,33 + +jma/btreecd.h,804 +#define __BITTREECODER_H21,856 +template CMyBitDecoder2;CMyBitDecoder231,1022 +class CDecoderCDecoder33,1088 + HRESULT Flush(Flush65,2284 + +jma/portable.h,1046 +#define __PORTABLE_H22,852 +typedef signed char INT8;INT826,895 +typedef unsigned char UINT8;UINT827,921 +typedef short INT16;INT1628,950 +typedef unsigned short UINT16;UINT1629,971 +typedef long INT32;INT3230,1002 +typedef unsigned long UINT32;UINT3231,1022 +typedef INT32 INT64;INT6432,1052 +typedef UINT32 UINT64;UINT6433,1073 +typedef UINT8 BYTE;BYTE36,1098 +typedef UINT16 WORD;WORD37,1118 +typedef UINT32 DWORD;DWORD38,1139 +typedef unsigned UINT_PTR;UINT_PTR40,1162 +typedef int BOOL;BOOL42,1190 +#define FALSE 43,1208 +#define TRUE 44,1224 +#define HRESULT 46,1240 +#define S_OK 47,1260 +#define E_INVALIDARG 48,1275 +#define E_OUTOFMEMORY 49,1299 +#define E_FAIL 50,1324 +#define E_INTERNAL_ERROR 51,1342 +#define E_INVALIDDATA 52,1370 +template inline T MyMin(54,1396 +template inline T MyMax(58,1468 +#define RETURN_IF_NOT_S_OK(RETURN_IF_NOT_S_OK62,1540 +#define UINT_SIZE 65,1644 +#define USHORT_SIZE 66,1666 +inline unsigned int charp_to_uint(69,1742 +inline unsigned short charp_to_ushort(79,2062 + +jma/rcdefs.h,190 +#define __RCDEFS_H21,850 +#define RC_INIT_VAR 26,915 +#define RC_FLUSH_VAR 30,1062 +#define RC_NORMALIZE 34,1192 +#define RC_GETBIT2(RC_GETBIT240,1482 +#define RC_GETBIT(RC_GETBIT59,2732 + +jma/rngcoder.h,364 +#define __COMPRESSION_RANGECODER_H21,866 +class CRangeDecoderCRangeDecoder31,1050 + void Normalize(Normalize38,1161 + void Init(Init47,1308 + UINT32 GetThreshold(GetThreshold56,1512 + void Decode(Decode61,1602 + UINT32 DecodeDirectBits(DecodeDirectBits88,2267 + UINT32 DecodeBit(DecodeBit120,2976 + UINT64 GetProcessedSize(GetProcessedSize139,3339 + +jma/s9x-jma.h,0 + +jma/winout.h,345 +#define __STREAM_WINDOWOUT_H21,860 +class COutCOut33,1222 + COut(COut50,1518 + UINT32 GetCurPos(GetCurPos59,1807 + const BYTE *GetPointerToCurrentPos(GetPointerToCurrentPos60,1852 + void CopyBackBlock(CopyBackBlock62,1927 + void PutOneByte(PutOneByte73,2182 + BYTE GetOneByte(GetOneByte80,2310 + BYTE *GetBuffer(GetBuffer85,2397 diff -NaHudr snes9x-1.43-src/snes9x/apu.cpp snes9x-improvement7-src-dehacked/snes9x/apu.cpp --- snes9x-1.43-src/snes9x/apu.cpp 2004-12-31 00:15:47.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/apu.cpp 2005-04-09 00:59:26.000000000 +0300 @@ -444,7 +444,7 @@ S9xTraceSoundDSP ("%d,", c); #endif // Pac-In-Time requires that channels can be key-on - // regardeless of their current state. + // regardless of their current state. if((APU.DSP [APU_KOFF] & mask) ==0) { KeyOnPrev&=~mask; @@ -915,8 +915,12 @@ } } + void S9xUpdateAPUTimer (void) { + if(Settings.UseWIPAPUTiming) + return; + while (CPU.Cycles * 10000L >= IAPU.NextAPUTimerPos) //if (CPU.Cycles * 10000L >= IAPU.NextAPUTimerPos) { @@ -992,10 +996,18 @@ case APU_OUTX + 0x50: case APU_OUTX + 0x60: case APU_OUTX + 0x70: - if (SoundData.channels [reg >> 4].state == SOUND_SILENT) + if(Settings.FakeMuteFix) + { + // fixes Terranigma return (0); - return ((SoundData.channels [reg >> 4].sample >> 8) | - (SoundData.channels [reg >> 4].sample & 0xff)); + } + else + { + if (SoundData.channels [reg >> 4].state == SOUND_SILENT) + return (0); + return ((SoundData.channels [reg >> 4].sample >> 8) | + (SoundData.channels [reg >> 4].sample & 0xff)); + } case APU_ENVX + 0x00: case APU_ENVX + 0x10: diff -NaHudr snes9x-1.43-src/snes9x/cpu.cpp snes9x-improvement7-src-dehacked/snes9x/cpu.cpp --- snes9x-1.43-src/snes9x/cpu.cpp 2004-12-31 00:15:47.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/cpu.cpp 2005-04-09 00:59:26.000000000 +0300 @@ -102,6 +102,7 @@ #include "spc7110.h" #include "obc1.h" +#include "logger.h" #ifndef ZSNES_FX #include "fxemu.h" @@ -175,6 +176,7 @@ void S9xReset (void) { + ResetLogger(); if (Settings.SuperFX) S9xResetSuperFX (); diff -NaHudr snes9x-1.43-src/snes9x/cpuexec.cpp snes9x-improvement7-src-dehacked/snes9x/cpuexec.cpp --- snes9x-1.43-src/snes9x/cpuexec.cpp 2004-12-31 00:15:45.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/cpuexec.cpp 2005-04-09 00:59:26.000000000 +0300 @@ -345,7 +345,13 @@ } if (CPU.V_Counter == PPU.ScreenHeight + 3) - S9xUpdateJoypads (); + S9xUpdateJoypadMemory(); + + // separated from S9xUpdateJoypadMemory because the +3 was causing keypresses to be displayed 1 frame behind, + // but just removing the +3 always would cause some games (Pocky & Rocky) to fail to get input. + // (with this change, games emulate identically to before, only the keypress GUI display timing is better) + if (CPU.V_Counter == PPU.ScreenHeight) + S9xUpdateJoypadButtons(); if (CPU.V_Counter == FIRST_VISIBLE_LINE) { @@ -358,8 +364,65 @@ { RenderLine (CPU.V_Counter - FIRST_VISIBLE_LINE); } + + if(Settings.UseWIPAPUTiming) + { + + // Use TimerErrorCounter to skip update of SPC700 timers once + // every 128 updates. Needed because this section of code is called + // once every emulated 63.5 microseconds, which coresponds to + // 15.750KHz, but the SPC700 timers need to be updated at multiples + // of 8KHz, hence the error correction. + // IAPU.TimerErrorCounter++; + // if (IAPU.TimerErrorCounter >= ) + // IAPU.TimerErrorCounter = 0; + // else + { + if (APU.TimerEnabled [2]) + { + APU.Timer [2] += 4; + while (APU.Timer [2] >= APU.TimerTarget [2]) + { + IAPU.RAM [0xff] = (IAPU.RAM [0xff] + 1) & 0xf; + APU.Timer [2] -= APU.TimerTarget [2]; + #ifdef SPC700_SHUTDOWN + IAPU.WaitCounter++; + IAPU.APUExecuting = TRUE; + #endif + } + } + if (CPU.V_Counter & 1) + { + if (APU.TimerEnabled [0]) + { + APU.Timer [0]++; + if (APU.Timer [0] >= APU.TimerTarget [0]) + { + IAPU.RAM [0xfd] = (IAPU.RAM [0xfd] + 1) & 0xf; + APU.Timer [0] = 0; + #ifdef SPC700_SHUTDOWN + IAPU.WaitCounter++; + IAPU.APUExecuting = TRUE; + #endif + } + } + if (APU.TimerEnabled [1]) + { + APU.Timer [1]++; + if (APU.Timer [1] >= APU.TimerTarget [1]) + { + IAPU.RAM [0xfe] = (IAPU.RAM [0xfe] + 1) & 0xf; + APU.Timer [1] = 0; + #ifdef SPC700_SHUTDOWN + IAPU.WaitCounter++; + IAPU.APUExecuting = TRUE; + #endif + } + } + } + } + } break; - case HTIMER_BEFORE_EVENT: case HTIMER_AFTER_EVENT: if (PPU.HTimerEnabled && diff -NaHudr snes9x-1.43-src/snes9x/display.h snes9x-improvement7-src-dehacked/snes9x/display.h --- snes9x-1.43-src/snes9x/display.h 2004-12-31 00:15:45.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/display.h 2005-04-09 00:59:27.000000000 +0300 @@ -107,7 +107,7 @@ void S9xDeinitDisplay (); void S9xInitInputDevices (); void S9xSetTitle (const char *title); -void S9xProcessEvents (bool8 block); +///void S9xProcessEvents (bool8 block); void S9xPutImage (int width, int height); void S9xParseDisplayArg (char **argv, int &index, int argc); void S9xToggleSoundChannel (int channel); diff -NaHudr snes9x-1.43-src/snes9x/dsp1.cpp snes9x-improvement7-src-dehacked/snes9x/dsp1.cpp --- snes9x-1.43-src/snes9x/dsp1.cpp 2004-12-31 00:15:45.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/dsp1.cpp 2005-04-09 00:59:26.000000000 +0300 @@ -1023,147 +1023,147 @@ DSP4.in_index++; } - if (!DSP4.waiting4command && DSP4.in_count==DSP4.in_index) - { - //DSP4.parameters [DSP4.in_index] |= (byte << 8); - // Actually execute the command - DSP4.waiting4command = TRUE; - DSP4.out_index = 0; - DSP4.in_index=0; - switch (DSP4.command) - { - // 16-bit multiplication - case 0x0000: - { - int16 multiplier, multiplicand; - int product; - - multiplier = DSP4_READ_WORD(0); - multiplicand = DSP4_READ_WORD(2); - - DSP4_Multiply(multiplicand,multiplier,product); - - DSP4.out_count = 4; - DSP4_WRITE_WORD(0,product); - DSP4_WRITE_WORD(2,product>>16); - } - break; - - // unknown: horizontal mapping command - case 0x0011: - { - int16 a,b,c,d,m; - - a = DSP4_READ_WORD(6); - b = DSP4_READ_WORD(4); - c = DSP4_READ_WORD(2); - d = DSP4_READ_WORD(0); - - DSP4_UnknownOP11(a,b,c,d,m); - - DSP4.out_count = 2; - DSP4_WRITE_WORD(0,m); - break; - } - - // track projection - case 0x0001: DSP4_Op01(); break; - - // track projection (pass 2) - case 0x0007: DSP4_Op07(); break; - - // zone projections (fuel/repair/lap/teleport/...) - case 0x0008: DSP4_Op08(); break; - - // sprite transformation - case 0x0009: DSP4_Op09(); break; - - // fast track projection - case 0x000D: DSP4_Op0D(); break; - - // single-player selection - case 0x0003: DSP4_Op03(); break; - - // clear OAM - case 0x0005: - { - op06_index = 0; - op06_offset = 0; - for( int lcv=0; lcv<32; lcv++ ) - op06_OAM[lcv] = 0; - break; - } - - // multi-player selection - case 0x000E: DSP4_Op0E(); break; - -#undef PRINT - - // transfer OAM - case 0x0006: - { - DSP4.out_count = 32; - for( int lcv=0; lcv<32; lcv++ ) - DSP4.output[lcv] = op06_OAM[lcv]; - } - break; - - // unknown - case 0x000A: - { - int16 in1a = DSP4_READ_WORD(0); - int16 in2a = DSP4_READ_WORD(2); - int16 in3a = DSP4_READ_WORD(4); - int16 out1a,out2a,out3a,out4a; - - // NOTE: Snes9x only! - // For some odd reason, the input nybbles are reversed - - DSP4_Op0A(in2a,out1a,out2a,out3a,out4a); - - DSP4.out_count=8; - - // Hack: Reverse the outputs for now to compensate - // Otherwise the AI gets really flaky - DSP4_WRITE_WORD(0,out2a); - DSP4_WRITE_WORD(2,out1a); - DSP4_WRITE_WORD(4,out4a); - DSP4_WRITE_WORD(6,out3a); - } - break; - - // set OAM - case 0x000B: - { - int16 sp_x = DSP4_READ_WORD(0); - int16 sp_y = DSP4_READ_WORD(2); - int16 oam = DSP4_READ_WORD(4); - - if ((sp_y < 0) || ((sp_y & 0x01ff) < 0x00eb)) - { - short Row = (sp_y >> 3) & 0x1f; - - if (RowCount[Row] < MaxTilesPerRow) - { - RowCount[Row]++; - - // yield OAM output - DSP4.out_count = 6; - DSP4_WRITE_WORD(0,1); - - // pack OAM data: x,y,name,attr - DSP4.output[2] = sp_x & 0xff; - DSP4.output[3] = sp_y & 0xff; - DSP4_WRITE_WORD(4,oam); - - // OAM: size,msb data - DSP4_Op06(0,0); - } - } - } - break; - - default: break; + if (!DSP4.waiting4command && DSP4.in_count==DSP4.in_index) + { + //DSP4.parameters [DSP4.in_index] |= (byte << 8); + // Actually execute the command + DSP4.waiting4command = TRUE; + DSP4.out_index = 0; + DSP4.in_index=0; + switch (DSP4.command) + { + // 16-bit multiplication + case 0x0000: + { + int16 multiplier, multiplicand; + int product; + + multiplier = DSP4_READ_WORD(0); + multiplicand = DSP4_READ_WORD(2); + + DSP4_Multiply(multiplicand,multiplier,product); + + DSP4.out_count = 4; + DSP4_WRITE_WORD(0,product); + DSP4_WRITE_WORD(2,product>>16); + } + break; + + // unknown: horizontal mapping command + case 0x0011: + { + int16 a,b,c,d,m; + + a = DSP4_READ_WORD(6); + b = DSP4_READ_WORD(4); + c = DSP4_READ_WORD(2); + d = DSP4_READ_WORD(0); + + DSP4_UnknownOP11(a,b,c,d,m); + + DSP4.out_count = 2; + DSP4_WRITE_WORD(0,m); + break; + } + + // track projection + case 0x0001: DSP4_Op01(); break; + + // track projection (pass 2) + case 0x0007: DSP4_Op07(); break; + + // zone projections (fuel/repair/lap/teleport/...) + case 0x0008: DSP4_Op08(); break; + + // sprite transformation + case 0x0009: DSP4_Op09(); break; + + // fast track projection + case 0x000D: DSP4_Op0D(); break; + + // single-player selection + case 0x0003: DSP4_Op03(); break; + + // clear OAM + case 0x0005: + { + op06_index = 0; + op06_offset = 0; + for( int lcv=0; lcv<32; lcv++ ) + op06_OAM[lcv] = 0; + break; + } + + // multi-player selection + case 0x000E: DSP4_Op0E(); break; + +#undef PRINT + + // transfer OAM + case 0x0006: + { + DSP4.out_count = 32; + for( int lcv=0; lcv<32; lcv++ ) + DSP4.output[lcv] = op06_OAM[lcv]; + } + break; + + // unknown + case 0x000A: + { + int16 in1a = DSP4_READ_WORD(0); + int16 in2a = DSP4_READ_WORD(2); + int16 in3a = DSP4_READ_WORD(4); + int16 out1a,out2a,out3a,out4a; + + // NOTE: Snes9x only! + // For some odd reason, the input nybbles are reversed + + DSP4_Op0A(in2a,out1a,out2a,out3a,out4a); + + DSP4.out_count=8; + + // Hack: Reverse the outputs for now to compensate + // Otherwise the AI gets really flaky + DSP4_WRITE_WORD(0,out2a); + DSP4_WRITE_WORD(2,out1a); + DSP4_WRITE_WORD(4,out4a); + DSP4_WRITE_WORD(6,out3a); + } + break; + + // set OAM + case 0x000B: + { + int16 sp_x = DSP4_READ_WORD(0); + int16 sp_y = DSP4_READ_WORD(2); + int16 oam = DSP4_READ_WORD(4); + + if ((sp_y < 0) || ((sp_y & 0x01ff) < 0x00eb)) + { + short Row = (sp_y >> 3) & 0x1f; + + if (RowCount[Row] < MaxTilesPerRow) + { + RowCount[Row]++; + + // yield OAM output + DSP4.out_count = 6; + DSP4_WRITE_WORD(0,1); + + // pack OAM data: x,y,name,attr + DSP4.output[2] = sp_x & 0xff; + DSP4.output[3] = sp_y & 0xff; + DSP4_WRITE_WORD(4,oam); + + // OAM: size,msb data + DSP4_Op06(0,0); + } + } + } + break; + + default: break; } } } @@ -1192,3 +1192,4 @@ return t; } + diff -NaHudr snes9x-1.43-src/snes9x/dsp1.h snes9x-improvement7-src-dehacked/snes9x/dsp1.h --- snes9x-1.43-src/snes9x/dsp1.h 2004-12-31 00:15:45.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/dsp1.h 2005-04-09 00:59:27.000000000 +0300 @@ -87,44 +87,45 @@ Nintendo Co., Limited and its subsidiary companies. *******************************************************************************/ -#ifndef _DSP1_H_ -#define _DSP1_H_ - -extern void (*SetDSP)(uint8, uint16); -extern uint8 (*GetDSP)(uint16); - -void DSP1SetByte(uint8 byte, uint16 address); -uint8 DSP1GetByte(uint16 address); - -void DSP2SetByte(uint8 byte, uint16 address); -uint8 DSP2GetByte(uint16 address); - -void DSP3SetByte(uint8 byte, uint16 address); -uint8 DSP3GetByte(uint16 address); -void DSP3_Reset(); - -void DSP4SetByte(uint8 byte, uint16 address); -uint8 DSP4GetByte(uint16 address); - -struct SDSP1 { - uint8 version; - bool8 waiting4command; - bool8 first_parameter; - uint8 command; - uint32 in_count; - uint32 in_index; - uint32 out_count; - uint32 out_index; - uint8 parameters [512]; - uint8 output [512]; -}; - -START_EXTERN_C -void S9xResetDSP1 (); -uint8 S9xGetDSP (uint16 Address); -void S9xSetDSP (uint8 Byte, uint16 Address); -END_EXTERN_C - -extern struct SDSP1 DSP1; - -#endif +#ifndef _DSP1_H_ +#define _DSP1_H_ + +extern void (*SetDSP)(uint8, uint16); +extern uint8 (*GetDSP)(uint16); + +void DSP1SetByte(uint8 byte, uint16 address); +uint8 DSP1GetByte(uint16 address); + +void DSP2SetByte(uint8 byte, uint16 address); +uint8 DSP2GetByte(uint16 address); + +void DSP3SetByte(uint8 byte, uint16 address); +uint8 DSP3GetByte(uint16 address); +void DSP3_Reset(); + +void DSP4SetByte(uint8 byte, uint16 address); +uint8 DSP4GetByte(uint16 address); + +struct SDSP1 { + uint8 version; + bool8 waiting4command; + bool8 first_parameter; + uint8 command; + uint32 in_count; + uint32 in_index; + uint32 out_count; + uint32 out_index; + uint8 parameters [512]; + uint8 output [512]; +}; + +START_EXTERN_C +void S9xResetDSP1 (); +uint8 S9xGetDSP (uint16 Address); +void S9xSetDSP (uint8 Byte, uint16 Address); +END_EXTERN_C + +extern struct SDSP1 DSP1; + +#endif + diff -NaHudr snes9x-1.43-src/snes9x/dsp3emu.cpp snes9x-improvement7-src-dehacked/snes9x/dsp3emu.cpp --- snes9x-1.43-src/snes9x/dsp3emu.cpp 2004-12-31 00:15:45.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/dsp3emu.cpp 2005-04-09 00:59:26.000000000 +0300 @@ -85,644 +85,644 @@ Super NES and Super Nintendo Entertainment System are trademarks of Nintendo Co., Limited and its subsidiary companies. -*******************************************************************************/ - -uint16 DSP3_DataROM[1024] = { - 0x8000, 0x4000, 0x2000, 0x1000, 0x0800, 0x0400, 0x0200, 0x0100, - 0x0080, 0x0040, 0x0020, 0x0010, 0x0008, 0x0004, 0x0002, 0x0001, - 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, - 0x0000, 0x000f, 0x0400, 0x0200, 0x0140, 0x0400, 0x0200, 0x0040, - 0x007d, 0x007e, 0x007e, 0x007b, 0x007c, 0x007d, 0x007b, 0x007c, - 0x0002, 0x0020, 0x0030, 0x0000, 0x000d, 0x0019, 0x0026, 0x0032, - 0x003e, 0x004a, 0x0056, 0x0062, 0x006d, 0x0079, 0x0084, 0x008e, - 0x0098, 0x00a2, 0x00ac, 0x00b5, 0x00be, 0x00c6, 0x00ce, 0x00d5, - 0x00dc, 0x00e2, 0x00e7, 0x00ec, 0x00f1, 0x00f5, 0x00f8, 0x00fb, - 0x00fd, 0x00ff, 0x0100, 0x0100, 0x0100, 0x00ff, 0x00fd, 0x00fb, - 0x00f8, 0x00f5, 0x00f1, 0x00ed, 0x00e7, 0x00e2, 0x00dc, 0x00d5, - 0x00ce, 0x00c6, 0x00be, 0x00b5, 0x00ac, 0x00a2, 0x0099, 0x008e, - 0x0084, 0x0079, 0x006e, 0x0062, 0x0056, 0x004a, 0x003e, 0x0032, - 0x0026, 0x0019, 0x000d, 0x0000, 0xfff3, 0xffe7, 0xffdb, 0xffce, - 0xffc2, 0xffb6, 0xffaa, 0xff9e, 0xff93, 0xff87, 0xff7d, 0xff72, - 0xff68, 0xff5e, 0xff54, 0xff4b, 0xff42, 0xff3a, 0xff32, 0xff2b, - 0xff25, 0xff1e, 0xff19, 0xff14, 0xff0f, 0xff0b, 0xff08, 0xff05, - 0xff03, 0xff01, 0xff00, 0xff00, 0xff00, 0xff01, 0xff03, 0xff05, - 0xff08, 0xff0b, 0xff0f, 0xff13, 0xff18, 0xff1e, 0xff24, 0xff2b, - 0xff32, 0xff3a, 0xff42, 0xff4b, 0xff54, 0xff5d, 0xff67, 0xff72, - 0xff7c, 0xff87, 0xff92, 0xff9e, 0xffa9, 0xffb5, 0xffc2, 0xffce, - 0xffda, 0xffe7, 0xfff3, 0x002b, 0x007f, 0x0020, 0x00ff, 0xff00, - 0xffbe, 0x0000, 0x0044, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffc1, 0x0001, 0x0002, 0x0045, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xffc5, 0x0003, 0x0004, 0x0005, 0x0047, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffca, 0x0006, 0x0007, 0x0008, - 0x0009, 0x004a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xffd0, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x004e, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffd7, 0x000f, 0x0010, 0x0011, - 0x0012, 0x0013, 0x0014, 0x0053, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xffdf, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, - 0x0059, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffe8, 0x001c, 0x001d, 0x001e, - 0x001f, 0x0020, 0x0021, 0x0022, 0x0023, 0x0060, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xfff2, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, - 0x002b, 0x002c, 0x0068, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xfffd, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0071, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xffc7, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, - 0x003e, 0x003f, 0x0040, 0x0041, 0x007b, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffd4, 0x0000, 0x0001, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, - 0x000b, 0x0044, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xffe2, 0x000c, 0x000d, 0x000e, 0x000f, 0x0010, 0x0011, 0x0012, - 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0050, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xfff1, 0x0019, 0x001a, 0x001b, - 0x001c, 0x001d, 0x001e, 0x001f, 0x0020, 0x0021, 0x0022, 0x0023, - 0x0024, 0x0025, 0x0026, 0x005d, 0x0000, 0x0000, 0x0000, 0x0000, - 0xffcb, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, - 0x002e, 0x002f, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, - 0x006b, 0x0000, 0x0000, 0x0000, 0xffdc, 0x0000, 0x0001, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, - 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, 0x0044, 0x0000, 0x0000, - 0xffee, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, - 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, - 0x001f, 0x0020, 0x0054, 0x0000, 0xffee, 0x0021, 0x0022, 0x0023, - 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, - 0x002c, 0x002d, 0x002e, 0x002f, 0x0030, 0x0031, 0x0032, 0x0065, - 0xffbe, 0x0000, 0xfeac, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffc1, 0x0001, 0x0002, 0xfead, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xffc5, 0x0003, 0x0004, 0x0005, 0xfeaf, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffca, 0x0006, 0x0007, 0x0008, - 0x0009, 0xfeb2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xffd0, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0xfeb6, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffd7, 0x000f, 0x0010, 0x0011, - 0x0012, 0x0013, 0x0014, 0xfebb, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xffdf, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, - 0xfec1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffe8, 0x001c, 0x001d, 0x001e, - 0x001f, 0x0020, 0x0021, 0x0022, 0x0023, 0xfec8, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xfff2, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, - 0x002b, 0x002c, 0xfed0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xfffd, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0xfed9, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xffc7, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, - 0x003e, 0x003f, 0x0040, 0x0041, 0xfee3, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffd4, 0x0000, 0x0001, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, - 0x000b, 0xfeac, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xffe2, 0x000c, 0x000d, 0x000e, 0x000f, 0x0010, 0x0011, 0x0012, - 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0xfeb8, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xfff1, 0x0019, 0x001a, 0x001b, - 0x001c, 0x001d, 0x001e, 0x001f, 0x0020, 0x0021, 0x0022, 0x0023, - 0x0024, 0x0025, 0x0026, 0xfec5, 0x0000, 0x0000, 0x0000, 0x0000, - 0xffcb, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, - 0x002e, 0x002f, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, - 0xfed3, 0x0000, 0x0000, 0x0000, 0xffdc, 0x0000, 0x0001, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, - 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, 0xfeac, 0x0000, 0x0000, - 0xffee, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, - 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, - 0x001f, 0x0020, 0xfebc, 0x0000, 0xffee, 0x0021, 0x0022, 0x0023, - 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, - 0x002c, 0x002d, 0x002e, 0x002f, 0x0030, 0x0031, 0x0032, 0xfecd, - 0x0154, 0x0218, 0x0110, 0x00b0, 0x00cc, 0x00b0, 0x0088, 0x00b0, - 0x0044, 0x00b0, 0x0000, 0x00b0, 0x00fe, 0xff07, 0x0002, 0x00ff, - 0x00f8, 0x0007, 0x00fe, 0x00ee, 0x07ff, 0x0200, 0x00ef, 0xf800, - 0x0700, 0x00ee, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0001, - 0x0001, 0x0001, 0x0001, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, - 0xffff, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, - 0x0000, 0xffff, 0xffff, 0x0000, 0xffff, 0x0001, 0x0000, 0x0001, - 0x0001, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0xffff, 0x0001, 0x0000, 0x0001, 0x0001, 0x0000, 0x0000, 0xffff, - 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0044, 0x0088, 0x00cc, - 0x0110, 0x0154, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff -}; - -#ifdef __WIN32__ - void (__cdecl *SetDSP3)(void); -#else - void (*SetDSP3)(void); -#endif - -uint16 DSP3_DR; -uint16 DSP3_SR; -uint16 DSP3_MemoryIndex; - -void DSP3_MemorySize() -{ - DSP3_DR = 0x0300; - SetDSP3 = &DSP3_Reset; -} - -void DSP3_TestMemory() -{ - DSP3_DR = 0x0000; - SetDSP3 = &DSP3_Reset; -} - -void DSP3_DumpDataROM() -{ - DSP3_DR = DSP3_DataROM[DSP3_MemoryIndex++]; - if (DSP3_MemoryIndex == 1024) - SetDSP3 = &DSP3_Reset; -} - -void DSP3_MemoryDump() -{ - DSP3_MemoryIndex = 0; - SetDSP3 = &DSP3_DumpDataROM; - DSP3_DumpDataROM(); -} - -int16 DSP3_WinLo; -int16 DSP3_WinHi; - -void DSP3_OP06() -{ - DSP3_WinLo = (uint8)(DSP3_DR); - DSP3_WinHi = (uint8)(DSP3_DR >> 8); - DSP3_Reset(); -} - -void DSP3_OP03() -{ - int16 Lo = (uint8)(DSP3_DR); - int16 Hi = (uint8)(DSP3_DR >> 8); - int16 Ofs = (DSP3_WinLo * Hi << 1) + (Lo << 1); - DSP3_DR = Ofs >> 1; - SetDSP3 = &DSP3_Reset; -} - -int16 DSP3_AddLo; -int16 DSP3_AddHi; - -void DSP3_OP07_B() -{ - int16 Ofs = (DSP3_WinLo * DSP3_AddHi << 1) + (DSP3_AddLo << 1); - DSP3_DR = Ofs >> 1; - SetDSP3 = &DSP3_Reset; -} - -void DSP3_OP07_A() -{ - int16 Lo = (uint8)(DSP3_DR); - int16 Hi = (uint8)(DSP3_DR >> 8); - - if (Lo & 1) Hi += (DSP3_AddLo & 1); - - DSP3_AddLo += Lo; - DSP3_AddHi += Hi; - - if (DSP3_AddLo < 0) - DSP3_AddLo += DSP3_WinLo; - else - if (DSP3_AddLo >= DSP3_WinLo) - DSP3_AddLo -= DSP3_WinLo; - - if (DSP3_AddHi < 0) - DSP3_AddHi += DSP3_WinHi; - else - if (DSP3_AddHi >= DSP3_WinHi) - DSP3_AddHi -= DSP3_WinHi; - - DSP3_DR = DSP3_AddLo | (DSP3_AddHi << 8) | ((DSP3_AddHi >> 8) & 0xff); - SetDSP3 = &DSP3_OP07_B; -} - -void DSP3_OP07() -{ - uint32 dataOfs = ((DSP3_DR << 1) + 0x03b2) & 0x03ff; - - DSP3_AddHi = DSP3_DataROM[dataOfs]; - DSP3_AddLo = DSP3_DataROM[dataOfs + 1]; - - SetDSP3 = &DSP3_OP07_A; - DSP3_SR = 0x0080; -} - -uint16 DSP3_Codewords; -uint16 DSP3_Outwords; -uint16 DSP3_Symbol; -uint16 DSP3_BitCount; -uint16 DSP3_Index; -uint16 DSP3_Codes[512]; -uint16 DSP3_BitsLeft; -uint16 DSP3_ReqBits; -uint16 DSP3_ReqData; -uint16 DSP3_BitCommand; -uint8 DSP3_BaseLength; -uint16 DSP3_BaseCodes; -uint16 DSP3_BaseCode; -uint8 DSP3_CodeLengths[8]; -uint16 DSP3_CodeOffsets[8]; -uint16 DSP3_LZCode; -uint8 DSP3_LZLength; - -uint16 DSP3_X; -uint16 DSP3_Y; - -void DSP3_Coordinate() -{ - DSP3_Index++; - - switch (DSP3_Index) - { - case 3: - { - if (DSP3_DR == 0xffff) - DSP3_Reset(); - break; - } - case 4: - { - DSP3_X = DSP3_DR; - break; - } - case 5: - { - DSP3_Y = DSP3_DR; - DSP3_DR = 1; - break; - } - case 6: - { - DSP3_DR = DSP3_X; - break; - } - case 7: - { - DSP3_DR = DSP3_Y; - DSP3_Index = 0; - break; - } - } -} - -uint8 DSP3_Bitmap[8]; -uint8 DSP3_Bitplane[8]; -uint16 DSP3_BMIndex; -uint16 DSP3_BPIndex; -uint16 DSP3_Count; - -void DSP3_Convert_A() -{ - if (DSP3_BMIndex < 8) - { - DSP3_Bitmap[DSP3_BMIndex++] = (uint8) (DSP3_DR); - DSP3_Bitmap[DSP3_BMIndex++] = (uint8) (DSP3_DR >> 8); - - if (DSP3_BMIndex == 8) - { - for (short i=0; i < 8; i++) - for (short j=0; j < 8; j++) - { - DSP3_Bitplane[j] <<= 1; - DSP3_Bitplane[j] |= (DSP3_Bitmap[i] >> j) & 1; - } - - DSP3_BPIndex = 0; - DSP3_Count--; - } - } - - if (DSP3_BMIndex == 8) - { - if (DSP3_BPIndex == 8) - { - if (!DSP3_Count) DSP3_Reset(); - DSP3_BMIndex = 0; - } - else - { - DSP3_DR = DSP3_Bitplane[DSP3_BPIndex++]; - DSP3_DR |= DSP3_Bitplane[DSP3_BPIndex++] << 8; - } - } -} - -void DSP3_Convert() -{ - DSP3_Count = DSP3_DR; - DSP3_BMIndex = 0; - SetDSP3 = &DSP3_Convert_A; -} - -bool DSP3_GetBits(uint8 Count) -{ - if (!DSP3_BitsLeft) - { - DSP3_BitsLeft = Count; - DSP3_ReqBits = 0; - } - - do { - if (!DSP3_BitCount) - { - DSP3_SR = 0xC0; - return false; - } - - DSP3_ReqBits <<= 1; - if (DSP3_ReqData & 0x8000) DSP3_ReqBits++; - DSP3_ReqData <<= 1; - - DSP3_BitCount--; - DSP3_BitsLeft--; - - } while (DSP3_BitsLeft); - - return true; -} - -void DSP3_Decode_Data() -{ - if (!DSP3_BitCount) - { - if (DSP3_SR & 0x40) - { - DSP3_ReqData = DSP3_DR; - DSP3_BitCount += 16; - } - else - { - DSP3_SR = 0xC0; - return; - } - } - - if (DSP3_LZCode == 1) - { - if (!DSP3_GetBits(1)) - return; - - if (DSP3_ReqBits) - DSP3_LZLength = 12; - else - DSP3_LZLength = 8; - - DSP3_LZCode++; - } - - if (DSP3_LZCode == 2) - { - if (!DSP3_GetBits(DSP3_LZLength)) - return; - - DSP3_LZCode = 0; - DSP3_Outwords--; - if (!DSP3_Outwords) SetDSP3 = &DSP3_Reset; - - DSP3_SR = 0x80; - DSP3_DR = DSP3_ReqBits; - return; - } - - if (DSP3_BaseCode == 0xffff) - { - if (!DSP3_GetBits(DSP3_BaseLength)) - return; - - DSP3_BaseCode = DSP3_ReqBits; - } - - if (!DSP3_GetBits(DSP3_CodeLengths[DSP3_BaseCode])) - return; - - DSP3_Symbol = DSP3_Codes[DSP3_CodeOffsets[DSP3_BaseCode] + DSP3_ReqBits]; - DSP3_BaseCode = 0xffff; - - if (DSP3_Symbol & 0xff00) - { - DSP3_Symbol += 0x7f02; - DSP3_LZCode++; - } - else - { - DSP3_Outwords--; - if (!DSP3_Outwords) - SetDSP3 = &DSP3_Reset; - } - - DSP3_SR = 0x80; - DSP3_DR = DSP3_Symbol; -} - -void DSP3_Decode_Tree() -{ - if (!DSP3_BitCount) - { - DSP3_ReqData = DSP3_DR; - DSP3_BitCount += 16; - } - - if (!DSP3_BaseCodes) - { - DSP3_GetBits(1); - if (DSP3_ReqBits) - { - DSP3_BaseLength = 3; - DSP3_BaseCodes = 8; - } - else - { - DSP3_BaseLength = 2; - DSP3_BaseCodes = 4; - } - } - - while (DSP3_BaseCodes) - { - if (!DSP3_GetBits(3)) - return; - - DSP3_ReqBits++; - - DSP3_CodeLengths[DSP3_Index] = (uint8) DSP3_ReqBits; - DSP3_CodeOffsets[DSP3_Index] = DSP3_Symbol; - DSP3_Index++; - - DSP3_Symbol += 1 << DSP3_ReqBits; - DSP3_BaseCodes--; - } - - DSP3_BaseCode = 0xffff; - DSP3_LZCode = 0; - - SetDSP3 = &DSP3_Decode_Data; - if (DSP3_BitCount) DSP3_Decode_Data(); -} - -void DSP3_Decode_Symbols() -{ - DSP3_ReqData = DSP3_DR; - DSP3_BitCount += 16; - - do { - - if (DSP3_BitCommand == 0xffff) - { - if (!DSP3_GetBits(2)) return; - DSP3_BitCommand = DSP3_ReqBits; - } - - switch (DSP3_BitCommand) - { - case 0: - { - if (!DSP3_GetBits(9)) return; - DSP3_Symbol = DSP3_ReqBits; - break; - } - case 1: - { - DSP3_Symbol++; - break; - } - case 2: - { - if (!DSP3_GetBits(1)) return; - DSP3_Symbol += 2 + DSP3_ReqBits; - break; - } - case 3: - { - if (!DSP3_GetBits(4)) return; - DSP3_Symbol += 4 + DSP3_ReqBits; - break; - } - } - - DSP3_BitCommand = 0xffff; - - DSP3_Codes[DSP3_Index++] = DSP3_Symbol; - DSP3_Codewords--; - - } while (DSP3_Codewords); - - DSP3_Index = 0; - DSP3_Symbol = 0; - DSP3_BaseCodes = 0; - - SetDSP3 = &DSP3_Decode_Tree; - if (DSP3_BitCount) DSP3_Decode_Tree(); -} - -void DSP3_Decode_A() -{ - DSP3_Outwords = DSP3_DR; - SetDSP3 = &DSP3_Decode_Symbols; - DSP3_BitCount = 0; - DSP3_BitsLeft = 0; - DSP3_Symbol = 0; - DSP3_Index = 0; - DSP3_BitCommand = 0xffff; - DSP3_SR = 0xC0; -} - -void DSP3_Decode() -{ - DSP3_Codewords = DSP3_DR; - SetDSP3 = &DSP3_Decode_A; -} - -void DSP3_Command() -{ - if (DSP3_DR < 0x40) - { - switch (DSP3_DR) - { - case 0x02: SetDSP3 = &DSP3_Coordinate; break; - case 0x03: SetDSP3 = &DSP3_OP03; break; - case 0x06: SetDSP3 = &DSP3_OP06; break; - case 0x07: SetDSP3 = &DSP3_OP07; return; - case 0x0f: SetDSP3 = &DSP3_TestMemory; break; - case 0x18: SetDSP3 = &DSP3_Convert; break; - case 0x1f: SetDSP3 = &DSP3_MemoryDump; break; - case 0x2f: SetDSP3 = &DSP3_MemorySize; break; - case 0x38: SetDSP3 = &DSP3_Decode; break; - } - DSP3_SR = 0x0080; - DSP3_Index = 0; - } -} - -void DSP3_Reset() -{ - DSP3_DR = 0x0080; - DSP3_SR = 0x0084; - SetDSP3 = &DSP3_Command; -} - -void DSP3SetByte(uint8 byte, uint16 address) -{ - if ((address & 0xC000) == 0x8000) - { - if (DSP3_SR & 0x04) - { - DSP3_DR = (DSP3_DR & 0xff00) + byte; - (*SetDSP3)(); - } - else - { - DSP3_SR ^= 0x10; - - if (DSP3_SR & 0x10) - DSP3_DR = (DSP3_DR & 0xff00) + byte; - else - { - DSP3_DR = (DSP3_DR & 0x00ff) + (byte << 8); - (*SetDSP3)(); - } - } - } -} - -uint8 DSP3GetByte(uint16 address) -{ - if ((address & 0xC000) == 0x8000) - { - uint8 byte; - - if (DSP3_SR & 0x04) - { - byte = (uint8) DSP3_DR; - (*SetDSP3)(); - } - else - { - DSP3_SR ^= 0x10; - - if (DSP3_SR & 0x10) - byte = (uint8) (DSP3_DR); - else - { - byte = (uint8) (DSP3_DR >> 8); - (*SetDSP3)(); - } - } - - return byte; - } - - return (uint8) DSP3_SR; -} \ No newline at end of file +*******************************************************************************/ + +uint16 DSP3_DataROM[1024] = { + 0x8000, 0x4000, 0x2000, 0x1000, 0x0800, 0x0400, 0x0200, 0x0100, + 0x0080, 0x0040, 0x0020, 0x0010, 0x0008, 0x0004, 0x0002, 0x0001, + 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, + 0x0000, 0x000f, 0x0400, 0x0200, 0x0140, 0x0400, 0x0200, 0x0040, + 0x007d, 0x007e, 0x007e, 0x007b, 0x007c, 0x007d, 0x007b, 0x007c, + 0x0002, 0x0020, 0x0030, 0x0000, 0x000d, 0x0019, 0x0026, 0x0032, + 0x003e, 0x004a, 0x0056, 0x0062, 0x006d, 0x0079, 0x0084, 0x008e, + 0x0098, 0x00a2, 0x00ac, 0x00b5, 0x00be, 0x00c6, 0x00ce, 0x00d5, + 0x00dc, 0x00e2, 0x00e7, 0x00ec, 0x00f1, 0x00f5, 0x00f8, 0x00fb, + 0x00fd, 0x00ff, 0x0100, 0x0100, 0x0100, 0x00ff, 0x00fd, 0x00fb, + 0x00f8, 0x00f5, 0x00f1, 0x00ed, 0x00e7, 0x00e2, 0x00dc, 0x00d5, + 0x00ce, 0x00c6, 0x00be, 0x00b5, 0x00ac, 0x00a2, 0x0099, 0x008e, + 0x0084, 0x0079, 0x006e, 0x0062, 0x0056, 0x004a, 0x003e, 0x0032, + 0x0026, 0x0019, 0x000d, 0x0000, 0xfff3, 0xffe7, 0xffdb, 0xffce, + 0xffc2, 0xffb6, 0xffaa, 0xff9e, 0xff93, 0xff87, 0xff7d, 0xff72, + 0xff68, 0xff5e, 0xff54, 0xff4b, 0xff42, 0xff3a, 0xff32, 0xff2b, + 0xff25, 0xff1e, 0xff19, 0xff14, 0xff0f, 0xff0b, 0xff08, 0xff05, + 0xff03, 0xff01, 0xff00, 0xff00, 0xff00, 0xff01, 0xff03, 0xff05, + 0xff08, 0xff0b, 0xff0f, 0xff13, 0xff18, 0xff1e, 0xff24, 0xff2b, + 0xff32, 0xff3a, 0xff42, 0xff4b, 0xff54, 0xff5d, 0xff67, 0xff72, + 0xff7c, 0xff87, 0xff92, 0xff9e, 0xffa9, 0xffb5, 0xffc2, 0xffce, + 0xffda, 0xffe7, 0xfff3, 0x002b, 0x007f, 0x0020, 0x00ff, 0xff00, + 0xffbe, 0x0000, 0x0044, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffc1, 0x0001, 0x0002, 0x0045, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffc5, 0x0003, 0x0004, 0x0005, 0x0047, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffca, 0x0006, 0x0007, 0x0008, + 0x0009, 0x004a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffd0, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x004e, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffd7, 0x000f, 0x0010, 0x0011, + 0x0012, 0x0013, 0x0014, 0x0053, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffdf, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, + 0x0059, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffe8, 0x001c, 0x001d, 0x001e, + 0x001f, 0x0020, 0x0021, 0x0022, 0x0023, 0x0060, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xfff2, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, + 0x002b, 0x002c, 0x0068, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xfffd, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0071, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffc7, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, + 0x003e, 0x003f, 0x0040, 0x0041, 0x007b, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffd4, 0x0000, 0x0001, 0x0002, + 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, + 0x000b, 0x0044, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffe2, 0x000c, 0x000d, 0x000e, 0x000f, 0x0010, 0x0011, 0x0012, + 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0050, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xfff1, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x005d, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffcb, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, + 0x002e, 0x002f, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, + 0x006b, 0x0000, 0x0000, 0x0000, 0xffdc, 0x0000, 0x0001, 0x0002, + 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, + 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, 0x0044, 0x0000, 0x0000, + 0xffee, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, + 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, + 0x001f, 0x0020, 0x0054, 0x0000, 0xffee, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, 0x0030, 0x0031, 0x0032, 0x0065, + 0xffbe, 0x0000, 0xfeac, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffc1, 0x0001, 0x0002, 0xfead, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffc5, 0x0003, 0x0004, 0x0005, 0xfeaf, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffca, 0x0006, 0x0007, 0x0008, + 0x0009, 0xfeb2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffd0, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0xfeb6, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffd7, 0x000f, 0x0010, 0x0011, + 0x0012, 0x0013, 0x0014, 0xfebb, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffdf, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, + 0xfec1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffe8, 0x001c, 0x001d, 0x001e, + 0x001f, 0x0020, 0x0021, 0x0022, 0x0023, 0xfec8, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xfff2, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, + 0x002b, 0x002c, 0xfed0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xfffd, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0xfed9, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffc7, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, + 0x003e, 0x003f, 0x0040, 0x0041, 0xfee3, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffd4, 0x0000, 0x0001, 0x0002, + 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, + 0x000b, 0xfeac, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffe2, 0x000c, 0x000d, 0x000e, 0x000f, 0x0010, 0x0011, 0x0012, + 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0xfeb8, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xfff1, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0xfec5, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffcb, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, + 0x002e, 0x002f, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, + 0xfed3, 0x0000, 0x0000, 0x0000, 0xffdc, 0x0000, 0x0001, 0x0002, + 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, + 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, 0xfeac, 0x0000, 0x0000, + 0xffee, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, + 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, + 0x001f, 0x0020, 0xfebc, 0x0000, 0xffee, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, 0x0030, 0x0031, 0x0032, 0xfecd, + 0x0154, 0x0218, 0x0110, 0x00b0, 0x00cc, 0x00b0, 0x0088, 0x00b0, + 0x0044, 0x00b0, 0x0000, 0x00b0, 0x00fe, 0xff07, 0x0002, 0x00ff, + 0x00f8, 0x0007, 0x00fe, 0x00ee, 0x07ff, 0x0200, 0x00ef, 0xf800, + 0x0700, 0x00ee, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, + 0x0000, 0xffff, 0xffff, 0x0000, 0xffff, 0x0001, 0x0000, 0x0001, + 0x0001, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0x0001, 0x0000, 0x0001, 0x0001, 0x0000, 0x0000, 0xffff, + 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0044, 0x0088, 0x00cc, + 0x0110, 0x0154, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff +}; + +#ifdef __WIN32__ + void (__cdecl *SetDSP3)(void); +#else + void (*SetDSP3)(void); +#endif + +uint16 DSP3_DR; +uint16 DSP3_SR; +uint16 DSP3_MemoryIndex; + +void DSP3_MemorySize() +{ + DSP3_DR = 0x0300; + SetDSP3 = &DSP3_Reset; +} + +void DSP3_TestMemory() +{ + DSP3_DR = 0x0000; + SetDSP3 = &DSP3_Reset; +} + +void DSP3_DumpDataROM() +{ + DSP3_DR = DSP3_DataROM[DSP3_MemoryIndex++]; + if (DSP3_MemoryIndex == 1024) + SetDSP3 = &DSP3_Reset; +} + +void DSP3_MemoryDump() +{ + DSP3_MemoryIndex = 0; + SetDSP3 = &DSP3_DumpDataROM; + DSP3_DumpDataROM(); +} + +int16 DSP3_WinLo; +int16 DSP3_WinHi; + +void DSP3_OP06() +{ + DSP3_WinLo = (uint8)(DSP3_DR); + DSP3_WinHi = (uint8)(DSP3_DR >> 8); + DSP3_Reset(); +} + +void DSP3_OP03() +{ + int16 Lo = (uint8)(DSP3_DR); + int16 Hi = (uint8)(DSP3_DR >> 8); + int16 Ofs = (DSP3_WinLo * Hi << 1) + (Lo << 1); + DSP3_DR = Ofs >> 1; + SetDSP3 = &DSP3_Reset; +} + +int16 DSP3_AddLo; +int16 DSP3_AddHi; + +void DSP3_OP07_B() +{ + int16 Ofs = (DSP3_WinLo * DSP3_AddHi << 1) + (DSP3_AddLo << 1); + DSP3_DR = Ofs >> 1; + SetDSP3 = &DSP3_Reset; +} + +void DSP3_OP07_A() +{ + int16 Lo = (uint8)(DSP3_DR); + int16 Hi = (uint8)(DSP3_DR >> 8); + + if (Lo & 1) Hi += (DSP3_AddLo & 1); + + DSP3_AddLo += Lo; + DSP3_AddHi += Hi; + + if (DSP3_AddLo < 0) + DSP3_AddLo += DSP3_WinLo; + else + if (DSP3_AddLo >= DSP3_WinLo) + DSP3_AddLo -= DSP3_WinLo; + + if (DSP3_AddHi < 0) + DSP3_AddHi += DSP3_WinHi; + else + if (DSP3_AddHi >= DSP3_WinHi) + DSP3_AddHi -= DSP3_WinHi; + + DSP3_DR = DSP3_AddLo | (DSP3_AddHi << 8) | ((DSP3_AddHi >> 8) & 0xff); + SetDSP3 = &DSP3_OP07_B; +} + +void DSP3_OP07() +{ + uint32 dataOfs = ((DSP3_DR << 1) + 0x03b2) & 0x03ff; + + DSP3_AddHi = DSP3_DataROM[dataOfs]; + DSP3_AddLo = DSP3_DataROM[dataOfs + 1]; + + SetDSP3 = &DSP3_OP07_A; + DSP3_SR = 0x0080; +} + +uint16 DSP3_Codewords; +uint16 DSP3_Outwords; +uint16 DSP3_Symbol; +uint16 DSP3_BitCount; +uint16 DSP3_Index; +uint16 DSP3_Codes[512]; +uint16 DSP3_BitsLeft; +uint16 DSP3_ReqBits; +uint16 DSP3_ReqData; +uint16 DSP3_BitCommand; +uint8 DSP3_BaseLength; +uint16 DSP3_BaseCodes; +uint16 DSP3_BaseCode; +uint8 DSP3_CodeLengths[8]; +uint16 DSP3_CodeOffsets[8]; +uint16 DSP3_LZCode; +uint8 DSP3_LZLength; + +uint16 DSP3_X; +uint16 DSP3_Y; + +void DSP3_Coordinate() +{ + DSP3_Index++; + + switch (DSP3_Index) + { + case 3: + { + if (DSP3_DR == 0xffff) + DSP3_Reset(); + break; + } + case 4: + { + DSP3_X = DSP3_DR; + break; + } + case 5: + { + DSP3_Y = DSP3_DR; + DSP3_DR = 1; + break; + } + case 6: + { + DSP3_DR = DSP3_X; + break; + } + case 7: + { + DSP3_DR = DSP3_Y; + DSP3_Index = 0; + break; + } + } +} + +uint8 DSP3_Bitmap[8]; +uint8 DSP3_Bitplane[8]; +uint16 DSP3_BMIndex; +uint16 DSP3_BPIndex; +uint16 DSP3_Count; + +void DSP3_Convert_A() +{ + if (DSP3_BMIndex < 8) + { + DSP3_Bitmap[DSP3_BMIndex++] = (uint8) (DSP3_DR); + DSP3_Bitmap[DSP3_BMIndex++] = (uint8) (DSP3_DR >> 8); + + if (DSP3_BMIndex == 8) + { + for (short i=0; i < 8; i++) + for (short j=0; j < 8; j++) + { + DSP3_Bitplane[j] <<= 1; + DSP3_Bitplane[j] |= (DSP3_Bitmap[i] >> j) & 1; + } + + DSP3_BPIndex = 0; + DSP3_Count--; + } + } + + if (DSP3_BMIndex == 8) + { + if (DSP3_BPIndex == 8) + { + if (!DSP3_Count) DSP3_Reset(); + DSP3_BMIndex = 0; + } + else + { + DSP3_DR = DSP3_Bitplane[DSP3_BPIndex++]; + DSP3_DR |= DSP3_Bitplane[DSP3_BPIndex++] << 8; + } + } +} + +void DSP3_Convert() +{ + DSP3_Count = DSP3_DR; + DSP3_BMIndex = 0; + SetDSP3 = &DSP3_Convert_A; +} + +bool DSP3_GetBits(uint8 Count) +{ + if (!DSP3_BitsLeft) + { + DSP3_BitsLeft = Count; + DSP3_ReqBits = 0; + } + + do { + if (!DSP3_BitCount) + { + DSP3_SR = 0xC0; + return false; + } + + DSP3_ReqBits <<= 1; + if (DSP3_ReqData & 0x8000) DSP3_ReqBits++; + DSP3_ReqData <<= 1; + + DSP3_BitCount--; + DSP3_BitsLeft--; + + } while (DSP3_BitsLeft); + + return true; +} + +void DSP3_Decode_Data() +{ + if (!DSP3_BitCount) + { + if (DSP3_SR & 0x40) + { + DSP3_ReqData = DSP3_DR; + DSP3_BitCount += 16; + } + else + { + DSP3_SR = 0xC0; + return; + } + } + + if (DSP3_LZCode == 1) + { + if (!DSP3_GetBits(1)) + return; + + if (DSP3_ReqBits) + DSP3_LZLength = 12; + else + DSP3_LZLength = 8; + + DSP3_LZCode++; + } + + if (DSP3_LZCode == 2) + { + if (!DSP3_GetBits(DSP3_LZLength)) + return; + + DSP3_LZCode = 0; + DSP3_Outwords--; + if (!DSP3_Outwords) SetDSP3 = &DSP3_Reset; + + DSP3_SR = 0x80; + DSP3_DR = DSP3_ReqBits; + return; + } + + if (DSP3_BaseCode == 0xffff) + { + if (!DSP3_GetBits(DSP3_BaseLength)) + return; + + DSP3_BaseCode = DSP3_ReqBits; + } + + if (!DSP3_GetBits(DSP3_CodeLengths[DSP3_BaseCode])) + return; + + DSP3_Symbol = DSP3_Codes[DSP3_CodeOffsets[DSP3_BaseCode] + DSP3_ReqBits]; + DSP3_BaseCode = 0xffff; + + if (DSP3_Symbol & 0xff00) + { + DSP3_Symbol += 0x7f02; + DSP3_LZCode++; + } + else + { + DSP3_Outwords--; + if (!DSP3_Outwords) + SetDSP3 = &DSP3_Reset; + } + + DSP3_SR = 0x80; + DSP3_DR = DSP3_Symbol; +} + +void DSP3_Decode_Tree() +{ + if (!DSP3_BitCount) + { + DSP3_ReqData = DSP3_DR; + DSP3_BitCount += 16; + } + + if (!DSP3_BaseCodes) + { + DSP3_GetBits(1); + if (DSP3_ReqBits) + { + DSP3_BaseLength = 3; + DSP3_BaseCodes = 8; + } + else + { + DSP3_BaseLength = 2; + DSP3_BaseCodes = 4; + } + } + + while (DSP3_BaseCodes) + { + if (!DSP3_GetBits(3)) + return; + + DSP3_ReqBits++; + + DSP3_CodeLengths[DSP3_Index] = (uint8) DSP3_ReqBits; + DSP3_CodeOffsets[DSP3_Index] = DSP3_Symbol; + DSP3_Index++; + + DSP3_Symbol += 1 << DSP3_ReqBits; + DSP3_BaseCodes--; + } + + DSP3_BaseCode = 0xffff; + DSP3_LZCode = 0; + + SetDSP3 = &DSP3_Decode_Data; + if (DSP3_BitCount) DSP3_Decode_Data(); +} + +void DSP3_Decode_Symbols() +{ + DSP3_ReqData = DSP3_DR; + DSP3_BitCount += 16; + + do { + + if (DSP3_BitCommand == 0xffff) + { + if (!DSP3_GetBits(2)) return; + DSP3_BitCommand = DSP3_ReqBits; + } + + switch (DSP3_BitCommand) + { + case 0: + { + if (!DSP3_GetBits(9)) return; + DSP3_Symbol = DSP3_ReqBits; + break; + } + case 1: + { + DSP3_Symbol++; + break; + } + case 2: + { + if (!DSP3_GetBits(1)) return; + DSP3_Symbol += 2 + DSP3_ReqBits; + break; + } + case 3: + { + if (!DSP3_GetBits(4)) return; + DSP3_Symbol += 4 + DSP3_ReqBits; + break; + } + } + + DSP3_BitCommand = 0xffff; + + DSP3_Codes[DSP3_Index++] = DSP3_Symbol; + DSP3_Codewords--; + + } while (DSP3_Codewords); + + DSP3_Index = 0; + DSP3_Symbol = 0; + DSP3_BaseCodes = 0; + + SetDSP3 = &DSP3_Decode_Tree; + if (DSP3_BitCount) DSP3_Decode_Tree(); +} + +void DSP3_Decode_A() +{ + DSP3_Outwords = DSP3_DR; + SetDSP3 = &DSP3_Decode_Symbols; + DSP3_BitCount = 0; + DSP3_BitsLeft = 0; + DSP3_Symbol = 0; + DSP3_Index = 0; + DSP3_BitCommand = 0xffff; + DSP3_SR = 0xC0; +} + +void DSP3_Decode() +{ + DSP3_Codewords = DSP3_DR; + SetDSP3 = &DSP3_Decode_A; +} + +void DSP3_Command() +{ + if (DSP3_DR < 0x40) + { + switch (DSP3_DR) + { + case 0x02: SetDSP3 = &DSP3_Coordinate; break; + case 0x03: SetDSP3 = &DSP3_OP03; break; + case 0x06: SetDSP3 = &DSP3_OP06; break; + case 0x07: SetDSP3 = &DSP3_OP07; return; + case 0x0f: SetDSP3 = &DSP3_TestMemory; break; + case 0x18: SetDSP3 = &DSP3_Convert; break; + case 0x1f: SetDSP3 = &DSP3_MemoryDump; break; + case 0x2f: SetDSP3 = &DSP3_MemorySize; break; + case 0x38: SetDSP3 = &DSP3_Decode; break; + } + DSP3_SR = 0x0080; + DSP3_Index = 0; + } +} + +void DSP3_Reset() +{ + DSP3_DR = 0x0080; + DSP3_SR = 0x0084; + SetDSP3 = &DSP3_Command; +} + +void DSP3SetByte(uint8 byte, uint16 address) +{ + if ((address & 0xC000) == 0x8000) + { + if (DSP3_SR & 0x04) + { + DSP3_DR = (DSP3_DR & 0xff00) + byte; + (*SetDSP3)(); + } + else + { + DSP3_SR ^= 0x10; + + if (DSP3_SR & 0x10) + DSP3_DR = (DSP3_DR & 0xff00) + byte; + else + { + DSP3_DR = (DSP3_DR & 0x00ff) + (byte << 8); + (*SetDSP3)(); + } + } + } +} + +uint8 DSP3GetByte(uint16 address) +{ + if ((address & 0xC000) == 0x8000) + { + uint8 byte; + + if (DSP3_SR & 0x04) + { + byte = (uint8) DSP3_DR; + (*SetDSP3)(); + } + else + { + DSP3_SR ^= 0x10; + + if (DSP3_SR & 0x10) + byte = (uint8) (DSP3_DR); + else + { + byte = (uint8) (DSP3_DR >> 8); + (*SetDSP3)(); + } + } + + return byte; + } + + return (uint8) DSP3_SR; +} diff -NaHudr snes9x-1.43-src/snes9x/dsp4.h snes9x-improvement7-src-dehacked/snes9x/dsp4.h --- snes9x-1.43-src/snes9x/dsp4.h 2004-12-31 00:15:47.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/dsp4.h 2005-04-09 00:59:27.000000000 +0300 @@ -1,83 +1,83 @@ -// debug -int block; // current block number -extern int c; - -// op control -int8 DSP4_Logic; // controls op flow - -// projection format -const int16 PLANE_START = 0x7fff; // starting distance - -int16 view_plane; // viewer location -int16 far_plane; // next milestone into screen -int16 segments; // # raster segments to draw -int16 raster; // current raster line - -int16 project_x; // current x-position -int16 project_y; // current y-position - -int16 project_centerx; // x-target of projection -int16 project_centery; // y-target of projection - -int16 project_x1; // current x-distance -int16 project_x1low; // lower 16-bits -int16 project_y1; // current y-distance -int16 project_y1low; // lower 16-bits - -int16 project_x2; // next projected x-distance -int16 project_y2; // next projected y-distance - -int16 project_pitchx; // delta center -int16 project_pitchxlow; // lower 16-bits -int16 project_pitchy; // delta center -int16 project_pitchylow; // lower 16-bits - -int16 project_focalx; // x-point of projection at viewer plane -int16 project_focaly; // y-point of projection at viewer plane - -int16 project_ptr; // data structure pointer - -// render window -int16 center_x; // x-center of viewport -int16 center_y; // y-center of viewport -int16 viewport_left; // x-left of viewport -int16 viewport_right; // x-right of viewport -int16 viewport_top; // y-top of viewport -int16 viewport_bottom; // y-bottom of viewport - -// sprite structure -int16 sprite_x; // projected x-pos of sprite -int16 sprite_y; // projected y-pos of sprite -int16 sprite_offset; // data pointer offset -int8 sprite_type; // vehicle, terrain -bool8 sprite_size; // sprite size: 8x8 or 16x16 - -// path strips -int16 path_clipRight[4]; // value to clip to for x>b -int16 path_clipLeft[4]; // value to clip to for xb +int16 path_clipLeft[4]; // value to clip to for x> 1; -} - -void DSP4_UnknownOP11(short A, short B, short C, short D, short &M) -{ - // 0x155 = 341 = Horizontal Width of the Screen - M = ((A * 0x0155 >> 2) & 0xf000) | ((B * 0x0155 >> 6) & 0x0f00) | - ((C * 0x0155 >> 10) & 0x00f0) | ((D * 0x0155 >> 14) & 0x000f); -} - -const unsigned short Op0A_Values[16] = { - 0x0000, 0x0030, 0x0060, 0x0090, 0x00c0, 0x00f0, 0x0120, 0x0150, - 0xfe80, 0xfeb0, 0xfee0, 0xff10, 0xff40, 0xff70, 0xffa0, 0xffd0 -}; - -void DSP4_Op0A(short n2, short &o1, short &o2, short &o3, short &o4) -{ - o4 = Op0A_Values[(n2 & 0x000f)]; - o3 = Op0A_Values[(n2 & 0x00f0) >> 4]; - o2 = Op0A_Values[(n2 & 0x0f00) >> 8]; - o1 = Op0A_Values[(n2 & 0xf000) >> 12]; -} - -////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////// - -#if OP==0x0009 -#define PRINT -#endif - -void DSP4_Op03() -{ -#ifdef PRINT - printf("Op03\n"); -#endif - - MaxTilesPerRow = 33; - - for (int i=0; i < 32; i++) - RowCount[i] = 0; - - // reset op09 data - op09_mode = 0; -} - -void DSP4_Op0E() -{ -#ifdef PRINT - printf("Op0E\n"); -#endif - - MaxTilesPerRow = 16; - - for (int i=0; i < 32; i++) - RowCount[i] = 0; - - // reset op09 data - op09_mode = 1; -} - -#undef PRINT - -void DSP4_Op06(bool8 size, bool8 msb) -{ - // save post-oam table data for future retrieval - op06_OAM[op06_index] |= (msb<<(op06_offset+0)); - op06_OAM[op06_index] |= (size<<(op06_offset+1)); - op06_offset += 2; - - if(op06_offset==8) - { - // move to next byte in buffer - op06_offset=0; - op06_index++; - } -} - -#if OP==0x0001 -#define PRINT -#endif - -void DSP4_Op01() -{ - uint16 command; - - DSP4.waiting4command = FALSE; - - // op flow control - switch(DSP4_Logic) { - case 1: goto resume1; break; - case 2: goto resume2; break; - } - - //////////////////////////////////////////////////// - // process initial inputs - - // sort inputs - // 0x00 = DSP4_READ_WORD(0x00); - project_focaly = DSP4_READ_WORD(0x02); - raster = DSP4_READ_WORD(0x04); - viewport_top = DSP4_READ_WORD(0x06); - project_y = DSP4_READ_WORD(0x08); - viewport_bottom = DSP4_READ_WORD(0x0a); - project_x1low = DSP4_READ_WORD(0x0c); - project_focalx = DSP4_READ_WORD(0x0e); - project_centerx = DSP4_READ_WORD(0x10); - project_ptr = DSP4_READ_WORD(0x12); - // (envelope?) 0xc0 = DSP4_READ_WORD(0x14); - project_pitchylow = DSP4_READ_WORD(0x16); - project_pitchy = DSP4_READ_WORD(0x18); - project_pitchxlow = DSP4_READ_WORD(0x1a); - project_pitchx = DSP4_READ_WORD(0x1c); - far_plane = DSP4_READ_WORD(0x1e); - // ? = DSP4_READ_WORD(0x20); - project_y1low = DSP4_READ_WORD(0x22); - - // pre-compute - view_plane = PLANE_START; - - // find starting projection points - project_x1 = project_focalx; - project_y -= viewport_bottom; - - // multi-op storage - multi_index1 = 0; - multi_index2 = 0; - - // debug - block=0; - - //////////////////////////////////////////////////// - // command check - - do { - // scan next command - DSP4.in_count = 2; - - DSP4_WAIT(1) resume1: - - // inspect input - command = DSP4_READ_WORD(0); - - // check for termination - if(command == 0x8000) break; - - // already have 2 bytes in queue - DSP4.in_index = 2; - DSP4.in_count = 8; - - DSP4_WAIT(2) resume2: - - //////////////////////////////////////////////////// - // process one iteration of projection - - // inspect inputs - int16 plane = DSP4_READ_WORD(0); - int16 index, lcv; - int16 py_dy=0, px_dx=0; - int16 y_out, x_out; - int16 envelope = DSP4_READ_WORD(6); - int16 project_x; - - // ignore invalid data - if((uint16) plane == 0x8001) continue; - - // one-time init - if(far_plane) - { - // setup final parameters - project_focalx += plane; - project_x1 = project_focalx; - project_y1 = project_focaly; - plane = far_plane; - far_plane = 0; - - // track occlusion - multi_farplane[1] = plane; - multi_raster[1] = viewport_bottom; - } - - // use proportional triangles to project new coords - project_x2 = project_focalx * plane / view_plane; - project_y2 = project_focaly * plane / view_plane; - - // quadratic regression (rough) - if(project_focaly>=-0x0f) - py_dy = project_focaly * project_focaly * -0.20533553 - - 1.08330005 * project_focaly - 69.61094639; - else - py_dy = project_focaly * project_focaly * -0.000657035759 - - 1.07629051 * project_focaly - 65.69315963; - - // approximate # of raster lines - segments = abs(project_y2-project_y1); - - // prevent overdraw - if(project_y2>=raster) segments=0; - else raster=project_y2; - - // don't draw outside the window - if(project_y20) - { - // interpolate between projected points - px_dx = ((project_x2-project_x1)<<8)/segments; - } - - // debug - ++block; -#ifdef PRINT - printf("(line %d) Op01 check %02X, plane %04X, focal_y %04X, y2 %04X, y1 %04X\n",c,(uint16)segments,(uint16)(plane),(uint16)project_focaly,(uint16)project_y2,(uint16)project_y1); -#endif - - // prepare output - DSP4.out_count=8+2+6*segments; - - // pre-block data - DSP4_WRITE_WORD(0,project_focalx); - DSP4_WRITE_WORD(2,project_x2); - DSP4_WRITE_WORD(4,project_focaly); - DSP4_WRITE_WORD(6,project_y2); - DSP4_WRITE_WORD(8,segments); - -#if 0 - DSP4_WRITE_WORD(0,-1); - DSP4_WRITE_WORD(2,-1); - DSP4_WRITE_WORD(4,-1); - DSP4_WRITE_WORD(6,-1); - DSP4_WRITE_WORD(8,-1); -#endif - - index=10; - - project_x = project_centerx + project_x1; - - // iterate through each point - for( lcv=0; lcv>8); - x_out = project_x+((px_dx*lcv)>>8); - - // factor in dynamic track changes - y_out += envelope; - -#if 0 - project_ptr=-1; - y_out=-1; - //x_out=-1; -#endif - - // data - DSP4_WRITE_WORD(index+0,project_ptr); - DSP4_WRITE_WORD(index+2,y_out); - DSP4_WRITE_WORD(index+4,x_out); - index += 6; - - // post-update - project_ptr -= 4; - } - - // post-update - project_y += ((py_dy*lcv)>>8); - - // new positions - if(segments>0) - { - project_x1 = project_x2; - project_y1 = project_y2; - - // storage of focals for op07 - multi_focaly[multi_index2++] = project_focaly; - - // track occlusion: can't see anything below it - multi_farplane[1] = plane; - multi_raster[1] -= segments; - } - - // update projection points - project_pitchy += (int8)DSP4.parameters[3]; - project_pitchx += (int8)DSP4.parameters[5]; - - project_focaly += project_pitchy; - project_focalx += project_pitchx; - } while (1); - - // terminate op - DSP4.waiting4command = TRUE; - DSP4.out_count = 0; -} - -#undef PRINT - -#if OP==0x0007 -#define PRINT -#endif - -void DSP4_Op07() -{ - uint16 command; - - DSP4.waiting4command = FALSE; - - // op flow control - switch(DSP4_Logic) { - case 1: goto resume1; break; - case 2: goto resume2; break; - } - - //////////////////////////////////////////////////// - // sort inputs - - // 0x00 = DSP4_READ_WORD(0x00); - project_focaly = DSP4_READ_WORD(0x02); - raster = DSP4_READ_WORD(0x04); - viewport_top = DSP4_READ_WORD(0x06); - project_y = DSP4_READ_WORD(0x08); - viewport_bottom = DSP4_READ_WORD(0x0a); - project_x1low = DSP4_READ_WORD(0x0c); - project_x1 = DSP4_READ_WORD(0x0e); - project_centerx = DSP4_READ_WORD(0x10); - project_ptr = DSP4_READ_WORD(0x12); - // (envelope?) 0xc0 = DSP4_READ_WORD(0x14); - - // pre-compute - view_plane = PLANE_START; - - // find projection targets - project_y1 = project_focaly; - project_y -= viewport_bottom; - - // multi-op storage - multi_index2 = 0; - - // debug - block=0; - -#ifdef PRINT - printf("(line %d) Op07 data %04X\n",c,(uint16)project_y1); -#endif - - //////////////////////////////////////////////////// - // command check - - do { - // scan next command - DSP4.in_count = 2; - - DSP4_WAIT(1) resume1: - - // inspect input - command = DSP4_READ_WORD(0); - - // check for opcode termination - if(command == 0x8000) break; - - // already have 2 bytes in queue - DSP4.in_index = 2; - DSP4.in_count = 12; - - DSP4_WAIT(2) resume2: - - //////////////////////////////////////////////////// - // process one loop of projection - - int16 plane; - int16 index,lcv; - int16 y_out,x_out; - int16 py_dy=0,px_dx=0; - int16 project_x; - - // debug - ++block; - - // inspect inputs - plane = DSP4_READ_WORD(0); - project_y2 = DSP4_READ_WORD(2); - // ? = DSP4_READ_WORD(4); - project_x2 = DSP4_READ_WORD(6); - int16 envelope = DSP4_READ_WORD(8); - - // ignore invalid data - if((uint16) plane == 0x8001) continue; - - // multi-op storage - project_focaly = multi_focaly[multi_index2]; - - // quadratic regression (rough) - if(project_focaly>=-0x0f) - py_dy = project_focaly * project_focaly * -0.20533553 - - 1.08330005 * project_focaly - 69.61094639; - else - py_dy = project_focaly * project_focaly * -0.000657035759 - - 1.07629051 * project_focaly - 65.69315963; - - // approximate # of raster lines - segments = abs(project_y2-project_y1); - - // prevent overdraw - if(project_y2>=raster) segments=0; - else raster=project_y2; - - // don't draw outside the window - if(project_y20) - { - // interpolate between projected points - px_dx = ((project_x2-project_x1)<<8)/segments; - } - -#ifdef PRINT - printf("(line %d) Op07 block %d, loc %04X, out %02X, project_x2 %04X\n",c,block,plane,segments,(uint16)project_x2); -#endif - - // prepare pre-output - DSP4.out_count=4+2+6*segments; - - DSP4_WRITE_WORD(0,project_x2); - DSP4_WRITE_WORD(2,project_y2); - DSP4_WRITE_WORD(4,segments); - -#if 0 - DSP4_WRITE_WORD(0,-1); - DSP4_WRITE_WORD(2,-1); - DSP4_WRITE_WORD(4,-1); -#endif - - index=6; - - project_x = project_centerx + project_x1; - - for( lcv=0; lcv>8); - x_out = project_x+((px_dx*lcv)>>8); - - // factor in dynamic track changes - y_out += envelope; - -#if 0 - project_ptr = -1; - //y_out = -1; - x_out = -1; -#endif - - // data - DSP4_WRITE_WORD(index+0,project_ptr); - DSP4_WRITE_WORD(index+2,y_out); - DSP4_WRITE_WORD(index+4,x_out); - index += 6; - - // post-update - project_ptr -= 4; - } - - // update internal variables - project_y += ((py_dy*lcv)>>8); - - // new positions - if(segments>0) - { - project_x1 = project_x2; - project_y1 = project_y2; - - // multi-op storage - multi_index2++; - } - } while(1); - - DSP4.waiting4command = TRUE; - DSP4.out_count = 0; -} - -#undef PRINT - -#if OP==0x0008 -#define PRINT -#endif - -void DSP4_Op08() -{ - uint16 command; - - DSP4.waiting4command = FALSE; - - // op flow control - switch(DSP4_Logic) { - case 1: goto resume1; break; - case 2: goto resume2; break; - } - - //////////////////////////////////////////////////// - // process initial inputs - - // clip values - path_clipRight[0] = DSP4_READ_WORD(0x00); - path_clipRight[1] = DSP4_READ_WORD(0x02); - path_clipRight[2] = DSP4_READ_WORD(0x04); - path_clipRight[3] = DSP4_READ_WORD(0x06); - - path_clipLeft[0] = DSP4_READ_WORD(0x08); - path_clipLeft[1] = DSP4_READ_WORD(0x0a); - path_clipLeft[2] = DSP4_READ_WORD(0x0c); - path_clipLeft[3] = DSP4_READ_WORD(0x0e); - - // unknown (constant) - // unknown (constant) - - // path positions - path_pos[0] = DSP4_READ_WORD(0x20); - path_pos[1] = DSP4_READ_WORD(0x22); - path_pos[2] = DSP4_READ_WORD(0x24); - path_pos[3] = DSP4_READ_WORD(0x26); - - // data locations - path_ptr[0] = DSP4_READ_WORD(0x28); - path_ptr[1] = DSP4_READ_WORD(0x2a); - path_ptr[2] = DSP4_READ_WORD(0x2c); - path_ptr[3] = DSP4_READ_WORD(0x2e); - - // project_y1 lines - path_raster[0] = DSP4_READ_WORD(0x30); - path_raster[1] = DSP4_READ_WORD(0x32); - path_raster[2] = DSP4_READ_WORD(0x34); - path_raster[3] = DSP4_READ_WORD(0x36); - - // viewport_top - path_top[0] = DSP4_READ_WORD(0x38); - path_top[1] = DSP4_READ_WORD(0x3a); - path_top[2] = DSP4_READ_WORD(0x3c); - path_top[3] = DSP4_READ_WORD(0x3e); - - // unknown (constants) - - view_plane = PLANE_START; - - // debug - block=0; - - //////////////////////////////////////////////////// - // command check - - do { - // scan next command - DSP4.in_count = 2; - - DSP4_WAIT(1) resume1: - - // inspect input - command = DSP4_READ_WORD(0); - - // terminate op - if(command == 0x8000) break; - - // already have 2 bytes in queue - DSP4.in_index = 2; - DSP4.in_count = 18; - - DSP4_WAIT(2) resume2: - - //////////////////////////////////////////////////// - // projection begins - - // debug - ++block; - - // used in envelope shaping - int16 x1_final; - int16 x2_final; - - // look at guidelines - int16 plane = DSP4_READ_WORD(0x00); - int16 x_left = DSP4_READ_WORD(0x02); - int16 y_left = DSP4_READ_WORD(0x04); - int16 x_right = DSP4_READ_WORD(0x06); - int16 y_right = DSP4_READ_WORD(0x08); - - // envelope guidelines (one frame only) - int16 envelope1 = DSP4_READ_WORD(0x0a); - int16 envelope2 = DSP4_READ_WORD(0x0c); - int16 envelope3 = DSP4_READ_WORD(0x0e); - int16 envelope4 = DSP4_READ_WORD(0x10); - - // ignore invalid data - if((uint16) plane == 0x8001) continue; - - // first init - if(plane == 0x7fff) - { - int pos1,pos2; - - // initialize projection - path_x[0] = x_left; - path_x[1] = x_right; - - path_y[0] = y_left; - path_y[1] = y_right; - - // update coordinates - path_pos[0]-=x_left; - path_pos[1]-=x_left; - path_pos[2]-=x_right; - path_pos[3]-=x_right; - - pos1 = path_pos[0]+envelope1; - pos2 = path_pos[1]+envelope2; - - // clip offscreen data - if(pos1path_clipRight[0]) pos1 = path_clipRight[0]; - if(pos2path_clipRight[1]) pos2 = path_clipRight[1]; - -#if 0 - pos1=-1; - //pos2=-1; -#endif - - path_plane[0] = plane; - path_plane[1] = plane; - - // initial output - DSP4.out_count = 2; - DSP4.output[0]=pos1&0xFF; - DSP4.output[1]=pos2&0xFF; - -#ifdef PRINT - printf("(line %d) Op08 x_left %04X\n",c,(uint16)x_left); -#endif - } - // proceed with projection - else - { - int16 index=0, lcv; - int16 left_inc=0,right_inc=0; - int16 dx1,dx2,dx3,dx4; - - // # segments to traverse - segments = abs(y_left - path_y[0]); - - // prevent overdraw - if(y_left>=path_raster[0]) segments=0; - else path_raster[0]=y_left; - - // don't draw outside the window - if(path_raster[0]0) - { - // use previous data - dx1 = (envelope1 * path_plane[0] / view_plane); - dx2 = (envelope2 * path_plane[0] / view_plane); - - // use temporary envelope pitch (this frame only) - dx3 = (envelope1 * plane / view_plane); - dx4 = (envelope2 * plane / view_plane); - - // project new shapes (left side) - x1_final = x_left+dx1; - x2_final = path_x[0]+dx3; - - // interpolate between projected points with shaping - left_inc = ((x2_final-x1_final)<<8)/segments; - - // project new shapes (right side) - x1_final = x_left+dx2; - x2_final = path_x[0]+dx4; - - // interpolate between projected points with shaping - right_inc = ((x2_final-x1_final)<<8)/segments; - - path_plane[0] = plane; - } - -#ifdef PRINT - printf("(line %d) Op08 block %d, out %02X, raster %02X\n",c,block,segments,(uint16)y_left); -#endif - - // zone 1 - DSP4.out_count = (2+4*segments); - DSP4_WRITE_WORD(index,segments); index+=2; - - for( lcv=1; lcv<=segments; lcv++ ) - { - int16 pos1,pos2; - - // pre-compute - pos1 = path_pos[0]+((left_inc*lcv)>>8)+dx1; - pos2 = path_pos[1]+((right_inc*lcv)>>8)+dx2; - - // clip offscreen data - if(pos1path_clipRight[0]) pos1 = path_clipRight[0]; - if(pos2path_clipRight[1]) pos2 = path_clipRight[1]; - -#if 0 - if(pos1==0x00ff) pos1=0; - if(pos2==0x00ff) pos2=0; - path_ptr[0] = -1; - pos1 = -1; - pos2 = -1; -#endif - - // data - DSP4_WRITE_WORD(index,path_ptr[0]); index+=2; - DSP4.output[index++]=pos1&0xFF; - DSP4.output[index++]=pos2&0xFF; - - // post-update - path_ptr[0] -= 4; - path_ptr[1] -= 4; - } - lcv--; - - if(segments>0) - { - // project points w/out the envelopes - int16 inc = ((path_x[0]-x_left)<<8)/segments; - - // post-store - path_pos[0] += ((inc*lcv)>>8); - path_pos[1] += ((inc*lcv)>>8); - - path_x[0] = x_left; - path_y[0] = y_left; - } - - ////////////////////////////////////////////// - // zone 2 - segments = abs(y_right - path_y[1]); - - // prevent overdraw - if(y_right>=path_raster[2]) segments=0; - else path_raster[2]=y_right; - - // don't draw outside the window - if(path_raster[2]0) - { - // use previous data - dx1 = (envelope1 * path_plane[1] / view_plane); - dx2 = (envelope2 * path_plane[1] / view_plane); - - // use temporary envelope pitch (this frame only) - dx3 = (envelope1 * plane / view_plane); - dx4 = (envelope2 * plane / view_plane); - - // project new shapes (left side) - x1_final = x_left+dx1; - x2_final = path_x[1]+dx3; - - // interpolate between projected points with shaping - left_inc = ((x2_final-x1_final)<<8)/segments; - - // project new shapes (right side) - x1_final = x_left+dx2; - x2_final = path_x[1]+dx4; - - // interpolate between projected points with shaping - right_inc = ((x2_final-x1_final)<<8)/segments; - - path_plane[1] = plane; - } - - // write out results - DSP4.out_count += (2+4*segments); - DSP4_WRITE_WORD(index,segments); index+=2; - - for( lcv=1; lcv<=segments; lcv++ ) - { - int16 pos1,pos2; - - // pre-compute - pos1 = path_pos[2]+((left_inc*lcv)>>8)+dx1; - pos2 = path_pos[3]+((right_inc*lcv)>>8)+dx2; - - // clip offscreen data - if(pos1path_clipRight[2]) pos1 = path_clipRight[2]; - if(pos2path_clipRight[3]) pos2 = path_clipRight[3]; - -#if 0 - if(pos1==0x00ff) pos1=0; - if(pos2==0x00ff) pos2=0; - path_ptr[2] = -1; - //pos1 = -1; - pos2 = -1; -#endif - - // data - DSP4_WRITE_WORD(index,path_ptr[2]); index+=2; - DSP4.output[index++]=pos1&0xFF; - DSP4.output[index++]=pos2&0xFF; - - // post-update - path_ptr[2] -= 4; - path_ptr[3] -= 4; - } - lcv--; - - if(segments>0) - { - // project points w/out the envelopes - int16 inc = ((path_x[1]-x_right)<<8)/segments; - - // post-store - path_pos[2] += ((inc*lcv)>>8); - path_pos[3] += ((inc*lcv)>>8); - - path_x[1] = x_right; - path_y[1] = y_right; - } - } - } while(1); - - DSP4.waiting4command = TRUE; - DSP4.out_count = 2; - DSP4_WRITE_WORD(0,0); -} - -#undef PRINT - -#if OP==0x000D -#define PRINT -#endif - -void DSP4_Op0D() -{ - uint16 command; - - DSP4.waiting4command = FALSE; - - // op flow control - switch(DSP4_Logic) { - case 1: goto resume1; break; - case 2: goto resume2; break; - } - - //////////////////////////////////////////////////// - // process initial inputs - - // sort inputs - // 0x00 = DSP4_READ_WORD(0x00); - project_focaly = DSP4_READ_WORD(0x02); - raster = DSP4_READ_WORD(0x04); - viewport_top = DSP4_READ_WORD(0x06); - project_y = DSP4_READ_WORD(0x08); - viewport_bottom = DSP4_READ_WORD(0x0a); - project_x1low = DSP4_READ_WORD(0x0c); - project_x1 = DSP4_READ_WORD(0x0e); - project_focalx = DSP4_READ_WORD(0x0e); - project_centerx = DSP4_READ_WORD(0x10); - project_ptr = DSP4_READ_WORD(0x12); - // 0xc0 = DSP4_READ_WORD(0x14); - project_pitchylow = DSP4_READ_WORD(0x16); - project_pitchy = DSP4_READ_WORD(0x18); - project_pitchxlow = DSP4_READ_WORD(0x1a); - project_pitchx = DSP4_READ_WORD(0x1c); - far_plane = DSP4_READ_WORD(0x1e); - // ? = DSP4_READ_WORD(0x20); - - // multi-op storage - multi_index1++; - multi_index1%=4; - - // remap 0D->09 window data ahead of time - // index starts at 1-3,0 - // - // Op0D: BL,TL,BR,TR - // Op09: TL,TR,BL,BR (1,2,3,0) - switch(multi_index1) - { - case 1: multi_index2=3; break; - case 2: multi_index2=1; break; - case 3: multi_index2=0; break; - case 0: multi_index2=2; break; - } - - // pre-compute - view_plane = PLANE_START; - - // figure out projection data - project_y -= viewport_bottom; - - // debug - block=0; - - //////////////////////////////////////////////////// - // command check - - do { - // scan next command - DSP4.in_count = 2; - - DSP4_WAIT(1) resume1: - - // inspect input - command = DSP4_READ_WORD(0); - - // terminate op - if(command == 0x8000) break; - - // already have 2 bytes in queue - DSP4.in_index = 2; - DSP4.in_count = 8; - - DSP4_WAIT(2) resume2: - - //////////////////////////////////////////////////// - // project section of the track - - // inspect inputs - int16 plane = DSP4_READ_WORD(0); - int16 index, lcv; - int16 py_dy=0, px_dx=0; - int16 y_out, x_out; - int16 envelope = DSP4_READ_WORD(6); - int16 project_x; - - // ignore invalid data - if((uint16) plane == 0x8001) continue; - - // one-time init - if(far_plane) - { - // setup final data - // low16=plane - project_x1 = project_focalx; - project_y1 = project_focaly; - plane = far_plane; - far_plane = 0; - - // track occlusion - multi_farplane[multi_index2] = plane; - multi_raster[multi_index2] = viewport_bottom; - } - - // use proportional triangles to project new coords - project_x2 = project_focalx * plane / view_plane; - project_y2 = project_focaly * plane / view_plane; - - // quadratic regression (rough) - if(project_focaly>=-0x0f) - py_dy = project_focaly * project_focaly * -0.20533553 - - 1.08330005 * project_focaly - 69.61094639; - else - py_dy = project_focaly * project_focaly * -0.000657035759 - - 1.07629051 * project_focaly - 65.69315963; - - // approximate # of raster lines - segments = abs(project_y2-project_y1); - - // prevent overdraw - if(project_y2>=raster) segments=0; - else raster=project_y2; - - // don't draw outside the window - if(project_y20) - { - // interpolate between projected points - px_dx = ((project_x2-project_x1)<<8)/segments; - } - - // debug - ++block; - -#ifdef PRINT - printf("(line %d) Op0D check %02X, plane %04X\n",c,(uint16)segments,(uint16)(plane)); -#endif - - // prepare output - DSP4.out_count=8+2+6*segments; - - DSP4_WRITE_WORD(0,project_focalx); - DSP4_WRITE_WORD(2,project_x2); - DSP4_WRITE_WORD(4,project_focaly); - DSP4_WRITE_WORD(6,project_y2); - DSP4_WRITE_WORD(8,segments); -#if 0 - DSP4_WRITE_WORD(0,-1); - DSP4_WRITE_WORD(2,-1); - DSP4_WRITE_WORD(4,-1); - //DSP4_WRITE_WORD(6,-1); - DSP4_WRITE_WORD(8,-1); -#endif - - index=10; - - project_x = project_centerx + project_x1; - - // iterate through each point - for( lcv=0; lcv>8); - x_out = project_x+((px_dx*lcv)>>8); - - // factor in dynamic track changes - y_out += envelope; - -#if 0 - project_ptr=-1; - y_out=-1; - x_out=-1; -#endif - - // data - DSP4_WRITE_WORD(index+0,project_ptr); - DSP4_WRITE_WORD(index+2,y_out); - DSP4_WRITE_WORD(index+4,x_out); - index += 6; - - // post-update - project_ptr -= 4; - } - - // post-update - project_y += ((py_dy*lcv)>>8); - - if(segments > 0) - { - project_x1 = project_x2; - project_y1 = project_y2; - - // track occlusion: can't see anything below it - multi_farplane[multi_index2] = plane; - multi_raster[multi_index2] -= segments; - } - - // update focal projection points - project_pitchy += (int8)DSP4.parameters[3]; - project_pitchx += (int8)DSP4.parameters[5]; - - project_focaly += project_pitchy; - project_focalx += project_pitchx; - } while(1); - - DSP4.waiting4command = TRUE; - DSP4.out_count = 0; -} - -#undef PRINT - -#if OP==0x0009 -#define PRINT -#endif - -#if OP==0x0006 -#define PRINT -#endif - -void DSP4_Op09() -{ - uint16 command; - - DSP4.waiting4command = FALSE; - - // op flow control - switch(DSP4_Logic) { - case 1: goto resume1; break; - case 2: goto resume2; break; - case 3: goto resume3; break; - case 4: goto resume4; break; - case 5: goto resume5; break; - case 6: goto resume6; break; - case 7: goto resume7; break; - } - - //////////////////////////////////////////////////// - // process initial inputs - - // debug - block=0; - - // grab screen information - view_plane = PLANE_START; - center_x = DSP4_READ_WORD(0x00); - center_y = DSP4_READ_WORD(0x02); - // 0x00 = DSP4_READ_WORD(0x04); - viewport_left = DSP4_READ_WORD(0x06); - viewport_right = DSP4_READ_WORD(0x08); - viewport_top = DSP4_READ_WORD(0x0a); - viewport_bottom = DSP4_READ_WORD(0x0c); - -#ifdef PRINT2 - printf("Window: (%04X,%04X) (%04X,%04X)\n", - viewport_left,viewport_right,viewport_top,viewport_bottom); -#endif - - // cycle through viewport window data - multi_index1++; - multi_index1%=4; - - goto no_sprite; - - do { - //////////////////////////////////////////////////// - // check for new sprites - - do { - uint16 second; - - DSP4.in_count = 4; - DSP4.in_index = 2; - - DSP4_WAIT(1) resume1: - - // try to classify sprite - second = DSP4_READ_WORD(2); - - // op termination - if(second == 0x8000) goto terminate; - - second >>= 8; - sprite_type = 0; - - // vehicle sprite - if(second == 0x90) - { - sprite_type = 1; - break; - } - // terrain sprite - else if(second != 0) - { - sprite_type = 2; - break; - } - -no_sprite: - // no sprite. try again - - DSP4.in_count = 2; - - DSP4_WAIT(2) resume2: - ; - } while (1); - - //////////////////////////////////////////////////// - // process projection information - -sprite_found: - // vehicle sprite - if(sprite_type == 1) - { - int16 plane; - int16 car_left, car_right, car_left_a; - int16 focal_back, focal_front; - uint8 distance, id; - - // we already have 4 bytes we want - DSP4.in_count = 6+12; - DSP4.in_index = 4; - - DSP4_WAIT(3) resume3: - - // filter inputs - project_y1 = DSP4_READ_WORD(0x00); - // 0x9000 = DSP4_READ_WORD(0x02); - id = DSP4.parameters[0x04]; - distance = DSP4.parameters[0x05]; - focal_back = DSP4_READ_WORD(0x06); - focal_front = DSP4_READ_WORD(0x08); - car_left_a = DSP4_READ_WORD(0x0a); - car_left = DSP4_READ_WORD(0x0c); - plane = DSP4_READ_WORD(0x0e); - car_right = DSP4_READ_WORD(0x10); - - // calculate car's x-center - project_focalx = car_right-car_left; - - // determine how far into the screen to project - project_focaly = focal_back; - project_x = project_focalx * plane / view_plane; - segments = 0x33 - project_focaly * plane / view_plane; - far_plane = plane; - - // prepare memory - sprite_x = center_x+project_x; - sprite_y = viewport_bottom-segments; - far_plane = plane; - - // debug - ++block; -#ifdef PRINT - printf("(line %d) Op09 vehicle block %d, Loop %04X\n",c,block,(uint16)project_y1); - //printf("%04X %04X %04X %04X / ",focal_back,focal_front,car_left_a,car_left); - //printf("%02X %02X ", distance, id); -#endif - - // make the car's x-center available - DSP4.out_count = 2; - DSP4_WRITE_WORD(0,project_focalx); - -#if 0 - DSP4_WRITE_WORD(0,-1); -#endif - - // grab a few remaining vehicle values - DSP4.in_count = 4; - - DSP4_WAIT(4) resume4: - - // store final values - int height = DSP4_READ_WORD(0); - sprite_offset = DSP4_READ_WORD(2); - - // vertical lift factor - sprite_y += height; - -#ifdef PRINT_09 - printf("%04X\n",sprite_offset); -#endif - } - // terrain sprite - else if(sprite_type == 2) - { - int16 plane; - - // we already have 4 bytes we want - DSP4.in_count = 6+6+2; - DSP4.in_index = 4; - - DSP4_WAIT(5) resume5: - - // sort loop inputs - project_y1 = DSP4_READ_WORD(0x00); - plane = DSP4_READ_WORD(0x02); - project_centerx = DSP4_READ_WORD(0x04); - //project_y1 = DSP4_READ_WORD(0x06); - project_focalx = DSP4_READ_WORD(0x08); - project_focaly = DSP4_READ_WORD(0x0a); - sprite_offset = DSP4_READ_WORD(0x0c); - - // determine distances into virtual world - segments = 0x33 - project_y1; - project_x = project_focalx * plane / view_plane; - project_y = project_focaly * plane / view_plane; - - // prepare memory - sprite_x = center_x+project_x-project_centerx; - sprite_y = viewport_bottom-segments+project_y; - far_plane = plane; - - // debug - ++block; -#ifdef PRINT - printf("(line %d) Op09 terrain block %d, Loop %04X\n",c,block,(uint16)project_y1); -#endif - } - - // default sprite size: 16x16 - sprite_size = 1; - - //////////////////////////////////////////////////// - // convert tile data to OAM - - do { - DSP4.in_count = 2; - - DSP4_WAIT(6) resume6: - - command = DSP4_READ_WORD(0); - - // opcode termination - if(command == 0x8000) goto terminate; - - // toggle sprite size - if(command == 0x0000) - { - sprite_size = !sprite_size; -#ifdef PRINT - //printf("TOGGLE=%02X\n",(uint8)sprite_size); -#endif - continue; - } - - // new sprite information - command >>= 8; - if(command != 0x20 && command != 0x40 && - command != 0x60 && command != 0xa0 && - command != 0xc0 && command != 0xe0) - break; - - DSP4.in_count = 6; - DSP4.in_index = 2; - - DSP4_WAIT(7) resume7: - - ///////////////////////////////////// - // process tile data - - bool8 clip; - int16 sp_x, sp_y, sp_oam, sp_msb; - int16 sp_dx, sp_dy; - int16 expand = sprite_size ? 15:7; - - // sprite deltas - sp_dy = DSP4_READ_WORD(2); - sp_dx = DSP4_READ_WORD(4); - - // update coordinates - sp_y = sprite_y + sp_dy; - sp_x = sprite_x + sp_dx; - - // reject points outside the clipping window - clip = FALSE; - - // window clipping - if(sp_x < viewport_left-expand || sp_x > viewport_right) clip=TRUE; - if(sp_y < viewport_top || sp_y > viewport_bottom) clip=TRUE; - - // track occlusion: - // clip any tiles that are below the road - if(far_plane <= multi_farplane[multi_index1] && - (sp_y>>3) >= (multi_raster[multi_index1]>>3)) clip=TRUE; - - // tile limitations - if ((sp_y >= -expand) && ((sp_y < 0) || ((sp_y & 0x01ff) < 0x00eb)) && !clip) - { - short Row = (sp_y >> 3) & 0x1f; - - if(!sprite_size) - { - // 1x1 tile - if (RowCount[Row] < MaxTilesPerRow) - RowCount[Row]++; - else - clip=TRUE; - } - else - { - // 2x2 tile - if ((RowCount[Row+0]+1 < MaxTilesPerRow) && - (RowCount[Row+1]+1 < MaxTilesPerRow)) - { - RowCount[Row+0]+=2; - RowCount[Row+1]+=2; - } - else - clip=TRUE; - } - } - -#ifdef PRINT - printf("(line %d) %04X, %04X, %04X / %04X %04X\n",line, - (uint16)sp_x,(uint16)sp_y,(uint16)far_plane,(uint16)multi_farplane[multi_index1],(uint16)multi_raster[multi_index1]); -#endif - - // don't draw offscreen coordinates - DSP4.out_count = 0; - if(!clip) - { - int16 out_index = 0; - int16 offset = DSP4_READ_WORD(0); - - // update sprite nametable/attribute information - sp_oam = sprite_offset + offset; - sp_msb = (sp_x<0 || sp_x>255); - -#ifdef PRINT2 - printf("(line %d) %04X, %04X, %04X, %04X, %04X\n",line, - (uint16)sp_oam,(uint16)sprite_offset,(uint16)offset, - (uint16)sp_x,(uint16)sp_y); -#endif - - // emit transparency information - if( - (sprite_offset&0x08) && - ((sprite_type==1 && sp_y>=0xcc) || - (sprite_type==2 && sp_y>=0xbb)) - ) - { - DSP4.out_count = 6; - - // one block of OAM data - DSP4_WRITE_WORD(0,1); - - // OAM: x,y,tile,no attr - DSP4.output[2] = sp_x&0xFF; - DSP4.output[3] = (sp_y+6)&0xFF; - DSP4_WRITE_WORD(4,0xEE); - - out_index = 6; - - // OAM: size,msb data - DSP4_Op06(sprite_size,sp_msb); - -#if 0 - //DSP4_WRITE_WORD(0,-1); - DSP4_WRITE_WORD(2,-1); - DSP4_WRITE_WORD(4,-1); -#endif - } - - // normal data - DSP4.out_count += 8; - - // one block of OAM data - DSP4_WRITE_WORD(out_index+0,1); - - // OAM: x,y,tile,attr - DSP4.output[out_index+2] = sp_x&0xFF; - DSP4.output[out_index+3] = sp_y&0xFF; - DSP4_WRITE_WORD(out_index+4,sp_oam); - - // no following OAM data - DSP4_WRITE_WORD(out_index+6,0); - - // OAM: size,msb data - DSP4_Op06(sprite_size,sp_msb); - -#if 0 - //DSP4_WRITE_WORD(out_index+0,-1); - DSP4_WRITE_WORD(out_index+2,-1); - DSP4_WRITE_WORD(out_index+4,-1); -#endif - } - - // no sprite information - if(DSP4.out_count == 0) - { - DSP4.out_count = 2; - DSP4_WRITE_WORD(0,0); - } - } while (1); - - ///////////////////////////////////// - // special cases: plane == 0x0000 - - // special vehicle case - if(command == 0x90) - { - sprite_type = 1; - - // shift bytes - DSP4.parameters[2] = DSP4.parameters[0]; - DSP4.parameters[3] = DSP4.parameters[1]; - DSP4.parameters[0] = 0; - DSP4.parameters[1] = 0; - - goto sprite_found; - } - // special terrain case - else if(command != 0x00 && command != 0xff) - { - sprite_type = 2; - - // shift bytes - DSP4.parameters[2] = DSP4.parameters[0]; - DSP4.parameters[3] = DSP4.parameters[1]; - DSP4.parameters[0] = 0; - DSP4.parameters[1] = 0; - - goto sprite_found; - } - } while (1); - -terminate: - DSP4.waiting4command = TRUE; - DSP4.out_count=0; -} - -#undef PRINT +*******************************************************************************/ + +// Due recognition and credit are given on Overload's DSP website. +// Thank those contributors for their hard work on this chip. + +#include "dsp4.h" + +#define DSP4_READ_WORD(x) \ + READ_WORD(DSP4.parameters+x) + +#define DSP4_WRITE_WORD(x,d) \ + WRITE_WORD(DSP4.output+x,d); + +// used to wait for dsp i/o +#define DSP4_WAIT(x) \ + DSP4_Logic = x; return; + +////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////// + +void DSP4_Multiply(short Multiplicand, short Multiplier, int &Product) +{ + Product = (Multiplicand * Multiplier << 1) >> 1; +} + +void DSP4_UnknownOP11(short A, short B, short C, short D, short &M) +{ + // 0x155 = 341 = Horizontal Width of the Screen + M = ((A * 0x0155 >> 2) & 0xf000) | ((B * 0x0155 >> 6) & 0x0f00) | + ((C * 0x0155 >> 10) & 0x00f0) | ((D * 0x0155 >> 14) & 0x000f); +} + +const unsigned short Op0A_Values[16] = { + 0x0000, 0x0030, 0x0060, 0x0090, 0x00c0, 0x00f0, 0x0120, 0x0150, + 0xfe80, 0xfeb0, 0xfee0, 0xff10, 0xff40, 0xff70, 0xffa0, 0xffd0 +}; + +void DSP4_Op0A(short n2, short &o1, short &o2, short &o3, short &o4) +{ + o4 = Op0A_Values[(n2 & 0x000f)]; + o3 = Op0A_Values[(n2 & 0x00f0) >> 4]; + o2 = Op0A_Values[(n2 & 0x0f00) >> 8]; + o1 = Op0A_Values[(n2 & 0xf000) >> 12]; +} + +////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////// + +#if OP==0x0009 +#define PRINT +#endif + +void DSP4_Op03() +{ +#ifdef PRINT + printf("Op03\n"); +#endif + + MaxTilesPerRow = 33; + + for (int i=0; i < 32; i++) + RowCount[i] = 0; + + // reset op09 data + op09_mode = 0; +} + +void DSP4_Op0E() +{ +#ifdef PRINT + printf("Op0E\n"); +#endif + + MaxTilesPerRow = 16; + + for (int i=0; i < 32; i++) + RowCount[i] = 0; + + // reset op09 data + op09_mode = 1; +} + +#undef PRINT + +void DSP4_Op06(bool8 size, bool8 msb) +{ + // save post-oam table data for future retrieval + op06_OAM[op06_index] |= (msb<<(op06_offset+0)); + op06_OAM[op06_index] |= (size<<(op06_offset+1)); + op06_offset += 2; + + if(op06_offset==8) + { + // move to next byte in buffer + op06_offset=0; + op06_index++; + } +} + +#if OP==0x0001 +#define PRINT +#endif + +void DSP4_Op01() +{ + uint16 command; + + DSP4.waiting4command = FALSE; + + // op flow control + switch(DSP4_Logic) { + case 1: goto resume1; break; + case 2: goto resume2; break; + } + + //////////////////////////////////////////////////// + // process initial inputs + + // sort inputs + // 0x00 = DSP4_READ_WORD(0x00); + project_focaly = DSP4_READ_WORD(0x02); + raster = DSP4_READ_WORD(0x04); + viewport_top = DSP4_READ_WORD(0x06); + project_y = DSP4_READ_WORD(0x08); + viewport_bottom = DSP4_READ_WORD(0x0a); + project_x1low = DSP4_READ_WORD(0x0c); + project_focalx = DSP4_READ_WORD(0x0e); + project_centerx = DSP4_READ_WORD(0x10); + project_ptr = DSP4_READ_WORD(0x12); + // (envelope?) 0xc0 = DSP4_READ_WORD(0x14); + project_pitchylow = DSP4_READ_WORD(0x16); + project_pitchy = DSP4_READ_WORD(0x18); + project_pitchxlow = DSP4_READ_WORD(0x1a); + project_pitchx = DSP4_READ_WORD(0x1c); + far_plane = DSP4_READ_WORD(0x1e); + // ? = DSP4_READ_WORD(0x20); + project_y1low = DSP4_READ_WORD(0x22); + + // pre-compute + view_plane = PLANE_START; + + // find starting projection points + project_x1 = project_focalx; + project_y -= viewport_bottom; + + // multi-op storage + multi_index1 = 0; + multi_index2 = 0; + + // debug + block=0; + + //////////////////////////////////////////////////// + // command check + + do { + // scan next command + DSP4.in_count = 2; + + DSP4_WAIT(1) resume1: + + // inspect input + command = DSP4_READ_WORD(0); + + // check for termination + if(command == 0x8000) break; + + // already have 2 bytes in queue + DSP4.in_index = 2; + DSP4.in_count = 8; + + DSP4_WAIT(2) resume2: + + //////////////////////////////////////////////////// + // process one iteration of projection + + // inspect inputs + int16 plane = DSP4_READ_WORD(0); + int16 index, lcv; + int16 py_dy=0, px_dx=0; + int16 y_out, x_out; + int16 envelope = DSP4_READ_WORD(6); + int16 project_x; + + // ignore invalid data + if((uint16) plane == 0x8001) continue; + + // one-time init + if(far_plane) + { + // setup final parameters + project_focalx += plane; + project_x1 = project_focalx; + project_y1 = project_focaly; + plane = far_plane; + far_plane = 0; + + // track occlusion + multi_farplane[1] = plane; + multi_raster[1] = viewport_bottom; + } + + // use proportional triangles to project new coords + project_x2 = project_focalx * plane / view_plane; + project_y2 = project_focaly * plane / view_plane; + + // quadratic regression (rough) + if(project_focaly>=-0x0f) + py_dy = project_focaly * project_focaly * -0.20533553 + - 1.08330005 * project_focaly - 69.61094639; + else + py_dy = project_focaly * project_focaly * -0.000657035759 + - 1.07629051 * project_focaly - 65.69315963; + + // approximate # of raster lines + segments = abs(project_y2-project_y1); + + // prevent overdraw + if(project_y2>=raster) segments=0; + else raster=project_y2; + + // don't draw outside the window + if(project_y20) + { + // interpolate between projected points + px_dx = ((project_x2-project_x1)<<8)/segments; + } + + // debug + ++block; +#ifdef PRINT + printf("(line %d) Op01 check %02X, plane %04X, focal_y %04X, y2 %04X, y1 %04X\n",c,(uint16)segments,(uint16)(plane),(uint16)project_focaly,(uint16)project_y2,(uint16)project_y1); +#endif + + // prepare output + DSP4.out_count=8+2+6*segments; + + // pre-block data + DSP4_WRITE_WORD(0,project_focalx); + DSP4_WRITE_WORD(2,project_x2); + DSP4_WRITE_WORD(4,project_focaly); + DSP4_WRITE_WORD(6,project_y2); + DSP4_WRITE_WORD(8,segments); + +#if 0 + DSP4_WRITE_WORD(0,-1); + DSP4_WRITE_WORD(2,-1); + DSP4_WRITE_WORD(4,-1); + DSP4_WRITE_WORD(6,-1); + DSP4_WRITE_WORD(8,-1); +#endif + + index=10; + + project_x = project_centerx + project_x1; + + // iterate through each point + for( lcv=0; lcv>8); + x_out = project_x+((px_dx*lcv)>>8); + + // factor in dynamic track changes + y_out += envelope; + +#if 0 + project_ptr=-1; + y_out=-1; + //x_out=-1; +#endif + + // data + DSP4_WRITE_WORD(index+0,project_ptr); + DSP4_WRITE_WORD(index+2,y_out); + DSP4_WRITE_WORD(index+4,x_out); + index += 6; + + // post-update + project_ptr -= 4; + } + + // post-update + project_y += ((py_dy*lcv)>>8); + + // new positions + if(segments>0) + { + project_x1 = project_x2; + project_y1 = project_y2; + + // storage of focals for op07 + multi_focaly[multi_index2++] = project_focaly; + + // track occlusion: can't see anything below it + multi_farplane[1] = plane; + multi_raster[1] -= segments; + } + + // update projection points + project_pitchy += (int8)DSP4.parameters[3]; + project_pitchx += (int8)DSP4.parameters[5]; + + project_focaly += project_pitchy; + project_focalx += project_pitchx; + } while (1); + + // terminate op + DSP4.waiting4command = TRUE; + DSP4.out_count = 0; +} + +#undef PRINT + +#if OP==0x0007 +#define PRINT +#endif + +void DSP4_Op07() +{ + uint16 command; + + DSP4.waiting4command = FALSE; + + // op flow control + switch(DSP4_Logic) { + case 1: goto resume1; break; + case 2: goto resume2; break; + } + + //////////////////////////////////////////////////// + // sort inputs + + // 0x00 = DSP4_READ_WORD(0x00); + project_focaly = DSP4_READ_WORD(0x02); + raster = DSP4_READ_WORD(0x04); + viewport_top = DSP4_READ_WORD(0x06); + project_y = DSP4_READ_WORD(0x08); + viewport_bottom = DSP4_READ_WORD(0x0a); + project_x1low = DSP4_READ_WORD(0x0c); + project_x1 = DSP4_READ_WORD(0x0e); + project_centerx = DSP4_READ_WORD(0x10); + project_ptr = DSP4_READ_WORD(0x12); + // (envelope?) 0xc0 = DSP4_READ_WORD(0x14); + + // pre-compute + view_plane = PLANE_START; + + // find projection targets + project_y1 = project_focaly; + project_y -= viewport_bottom; + + // multi-op storage + multi_index2 = 0; + + // debug + block=0; + +#ifdef PRINT + printf("(line %d) Op07 data %04X\n",c,(uint16)project_y1); +#endif + + //////////////////////////////////////////////////// + // command check + + do { + // scan next command + DSP4.in_count = 2; + + DSP4_WAIT(1) resume1: + + // inspect input + command = DSP4_READ_WORD(0); + + // check for opcode termination + if(command == 0x8000) break; + + // already have 2 bytes in queue + DSP4.in_index = 2; + DSP4.in_count = 12; + + DSP4_WAIT(2) resume2: + + //////////////////////////////////////////////////// + // process one loop of projection + + int16 plane; + int16 index,lcv; + int16 y_out,x_out; + int16 py_dy=0,px_dx=0; + int16 project_x; + + // debug + ++block; + + // inspect inputs + plane = DSP4_READ_WORD(0); + project_y2 = DSP4_READ_WORD(2); + // ? = DSP4_READ_WORD(4); + project_x2 = DSP4_READ_WORD(6); + int16 envelope = DSP4_READ_WORD(8); + + // ignore invalid data + if((uint16) plane == 0x8001) continue; + + // multi-op storage + project_focaly = multi_focaly[multi_index2]; + + // quadratic regression (rough) + if(project_focaly>=-0x0f) + py_dy = project_focaly * project_focaly * -0.20533553 + - 1.08330005 * project_focaly - 69.61094639; + else + py_dy = project_focaly * project_focaly * -0.000657035759 + - 1.07629051 * project_focaly - 65.69315963; + + // approximate # of raster lines + segments = abs(project_y2-project_y1); + + // prevent overdraw + if(project_y2>=raster) segments=0; + else raster=project_y2; + + // don't draw outside the window + if(project_y20) + { + // interpolate between projected points + px_dx = ((project_x2-project_x1)<<8)/segments; + } + +#ifdef PRINT + printf("(line %d) Op07 block %d, loc %04X, out %02X, project_x2 %04X\n",c,block,plane,segments,(uint16)project_x2); +#endif + + // prepare pre-output + DSP4.out_count=4+2+6*segments; + + DSP4_WRITE_WORD(0,project_x2); + DSP4_WRITE_WORD(2,project_y2); + DSP4_WRITE_WORD(4,segments); + +#if 0 + DSP4_WRITE_WORD(0,-1); + DSP4_WRITE_WORD(2,-1); + DSP4_WRITE_WORD(4,-1); +#endif + + index=6; + + project_x = project_centerx + project_x1; + + for( lcv=0; lcv>8); + x_out = project_x+((px_dx*lcv)>>8); + + // factor in dynamic track changes + y_out += envelope; + +#if 0 + project_ptr = -1; + //y_out = -1; + x_out = -1; +#endif + + // data + DSP4_WRITE_WORD(index+0,project_ptr); + DSP4_WRITE_WORD(index+2,y_out); + DSP4_WRITE_WORD(index+4,x_out); + index += 6; + + // post-update + project_ptr -= 4; + } + + // update internal variables + project_y += ((py_dy*lcv)>>8); + + // new positions + if(segments>0) + { + project_x1 = project_x2; + project_y1 = project_y2; + + // multi-op storage + multi_index2++; + } + } while(1); + + DSP4.waiting4command = TRUE; + DSP4.out_count = 0; +} + +#undef PRINT + +#if OP==0x0008 +#define PRINT +#endif + +void DSP4_Op08() +{ + uint16 command; + + DSP4.waiting4command = FALSE; + + // op flow control + switch(DSP4_Logic) { + case 1: goto resume1; break; + case 2: goto resume2; break; + } + + //////////////////////////////////////////////////// + // process initial inputs + + // clip values + path_clipRight[0] = DSP4_READ_WORD(0x00); + path_clipRight[1] = DSP4_READ_WORD(0x02); + path_clipRight[2] = DSP4_READ_WORD(0x04); + path_clipRight[3] = DSP4_READ_WORD(0x06); + + path_clipLeft[0] = DSP4_READ_WORD(0x08); + path_clipLeft[1] = DSP4_READ_WORD(0x0a); + path_clipLeft[2] = DSP4_READ_WORD(0x0c); + path_clipLeft[3] = DSP4_READ_WORD(0x0e); + + // unknown (constant) + // unknown (constant) + + // path positions + path_pos[0] = DSP4_READ_WORD(0x20); + path_pos[1] = DSP4_READ_WORD(0x22); + path_pos[2] = DSP4_READ_WORD(0x24); + path_pos[3] = DSP4_READ_WORD(0x26); + + // data locations + path_ptr[0] = DSP4_READ_WORD(0x28); + path_ptr[1] = DSP4_READ_WORD(0x2a); + path_ptr[2] = DSP4_READ_WORD(0x2c); + path_ptr[3] = DSP4_READ_WORD(0x2e); + + // project_y1 lines + path_raster[0] = DSP4_READ_WORD(0x30); + path_raster[1] = DSP4_READ_WORD(0x32); + path_raster[2] = DSP4_READ_WORD(0x34); + path_raster[3] = DSP4_READ_WORD(0x36); + + // viewport_top + path_top[0] = DSP4_READ_WORD(0x38); + path_top[1] = DSP4_READ_WORD(0x3a); + path_top[2] = DSP4_READ_WORD(0x3c); + path_top[3] = DSP4_READ_WORD(0x3e); + + // unknown (constants) + + view_plane = PLANE_START; + + // debug + block=0; + + //////////////////////////////////////////////////// + // command check + + do { + // scan next command + DSP4.in_count = 2; + + DSP4_WAIT(1) resume1: + + // inspect input + command = DSP4_READ_WORD(0); + + // terminate op + if(command == 0x8000) break; + + // already have 2 bytes in queue + DSP4.in_index = 2; + DSP4.in_count = 18; + + DSP4_WAIT(2) resume2: + + //////////////////////////////////////////////////// + // projection begins + + // debug + ++block; + + // used in envelope shaping + int16 x1_final; + int16 x2_final; + + // look at guidelines + int16 plane = DSP4_READ_WORD(0x00); + int16 x_left = DSP4_READ_WORD(0x02); + int16 y_left = DSP4_READ_WORD(0x04); + int16 x_right = DSP4_READ_WORD(0x06); + int16 y_right = DSP4_READ_WORD(0x08); + + // envelope guidelines (one frame only) + int16 envelope1 = DSP4_READ_WORD(0x0a); + int16 envelope2 = DSP4_READ_WORD(0x0c); + int16 envelope3 = DSP4_READ_WORD(0x0e); + int16 envelope4 = DSP4_READ_WORD(0x10); + + // ignore invalid data + if((uint16) plane == 0x8001) continue; + + // first init + if(plane == 0x7fff) + { + int pos1,pos2; + + // initialize projection + path_x[0] = x_left; + path_x[1] = x_right; + + path_y[0] = y_left; + path_y[1] = y_right; + + // update coordinates + path_pos[0]-=x_left; + path_pos[1]-=x_left; + path_pos[2]-=x_right; + path_pos[3]-=x_right; + + pos1 = path_pos[0]+envelope1; + pos2 = path_pos[1]+envelope2; + + // clip offscreen data + if(pos1path_clipRight[0]) pos1 = path_clipRight[0]; + if(pos2path_clipRight[1]) pos2 = path_clipRight[1]; + +#if 0 + pos1=-1; + //pos2=-1; +#endif + + path_plane[0] = plane; + path_plane[1] = plane; + + // initial output + DSP4.out_count = 2; + DSP4.output[0]=pos1&0xFF; + DSP4.output[1]=pos2&0xFF; + +#ifdef PRINT + printf("(line %d) Op08 x_left %04X\n",c,(uint16)x_left); +#endif + } + // proceed with projection + else + { + int16 index=0, lcv; + int16 left_inc=0,right_inc=0; + int16 dx1,dx2,dx3,dx4; + + // # segments to traverse + segments = abs(y_left - path_y[0]); + + // prevent overdraw + if(y_left>=path_raster[0]) segments=0; + else path_raster[0]=y_left; + + // don't draw outside the window + if(path_raster[0]0) + { + // use previous data + dx1 = (envelope1 * path_plane[0] / view_plane); + dx2 = (envelope2 * path_plane[0] / view_plane); + + // use temporary envelope pitch (this frame only) + dx3 = (envelope1 * plane / view_plane); + dx4 = (envelope2 * plane / view_plane); + + // project new shapes (left side) + x1_final = x_left+dx1; + x2_final = path_x[0]+dx3; + + // interpolate between projected points with shaping + left_inc = ((x2_final-x1_final)<<8)/segments; + + // project new shapes (right side) + x1_final = x_left+dx2; + x2_final = path_x[0]+dx4; + + // interpolate between projected points with shaping + right_inc = ((x2_final-x1_final)<<8)/segments; + + path_plane[0] = plane; + } + +#ifdef PRINT + printf("(line %d) Op08 block %d, out %02X, raster %02X\n",c,block,segments,(uint16)y_left); +#endif + + // zone 1 + DSP4.out_count = (2+4*segments); + DSP4_WRITE_WORD(index,segments); index+=2; + + for( lcv=1; lcv<=segments; lcv++ ) + { + int16 pos1,pos2; + + // pre-compute + pos1 = path_pos[0]+((left_inc*lcv)>>8)+dx1; + pos2 = path_pos[1]+((right_inc*lcv)>>8)+dx2; + + // clip offscreen data + if(pos1path_clipRight[0]) pos1 = path_clipRight[0]; + if(pos2path_clipRight[1]) pos2 = path_clipRight[1]; + +#if 0 + if(pos1==0x00ff) pos1=0; + if(pos2==0x00ff) pos2=0; + path_ptr[0] = -1; + pos1 = -1; + pos2 = -1; +#endif + + // data + DSP4_WRITE_WORD(index,path_ptr[0]); index+=2; + DSP4.output[index++]=pos1&0xFF; + DSP4.output[index++]=pos2&0xFF; + + // post-update + path_ptr[0] -= 4; + path_ptr[1] -= 4; + } + lcv--; + + if(segments>0) + { + // project points w/out the envelopes + int16 inc = ((path_x[0]-x_left)<<8)/segments; + + // post-store + path_pos[0] += ((inc*lcv)>>8); + path_pos[1] += ((inc*lcv)>>8); + + path_x[0] = x_left; + path_y[0] = y_left; + } + + ////////////////////////////////////////////// + // zone 2 + segments = abs(y_right - path_y[1]); + + // prevent overdraw + if(y_right>=path_raster[2]) segments=0; + else path_raster[2]=y_right; + + // don't draw outside the window + if(path_raster[2]0) + { + // use previous data + dx1 = (envelope1 * path_plane[1] / view_plane); + dx2 = (envelope2 * path_plane[1] / view_plane); + + // use temporary envelope pitch (this frame only) + dx3 = (envelope1 * plane / view_plane); + dx4 = (envelope2 * plane / view_plane); + + // project new shapes (left side) + x1_final = x_left+dx1; + x2_final = path_x[1]+dx3; + + // interpolate between projected points with shaping + left_inc = ((x2_final-x1_final)<<8)/segments; + + // project new shapes (right side) + x1_final = x_left+dx2; + x2_final = path_x[1]+dx4; + + // interpolate between projected points with shaping + right_inc = ((x2_final-x1_final)<<8)/segments; + + path_plane[1] = plane; + } + + // write out results + DSP4.out_count += (2+4*segments); + DSP4_WRITE_WORD(index,segments); index+=2; + + for( lcv=1; lcv<=segments; lcv++ ) + { + int16 pos1,pos2; + + // pre-compute + pos1 = path_pos[2]+((left_inc*lcv)>>8)+dx1; + pos2 = path_pos[3]+((right_inc*lcv)>>8)+dx2; + + // clip offscreen data + if(pos1path_clipRight[2]) pos1 = path_clipRight[2]; + if(pos2path_clipRight[3]) pos2 = path_clipRight[3]; + +#if 0 + if(pos1==0x00ff) pos1=0; + if(pos2==0x00ff) pos2=0; + path_ptr[2] = -1; + //pos1 = -1; + pos2 = -1; +#endif + + // data + DSP4_WRITE_WORD(index,path_ptr[2]); index+=2; + DSP4.output[index++]=pos1&0xFF; + DSP4.output[index++]=pos2&0xFF; + + // post-update + path_ptr[2] -= 4; + path_ptr[3] -= 4; + } + lcv--; + + if(segments>0) + { + // project points w/out the envelopes + int16 inc = ((path_x[1]-x_right)<<8)/segments; + + // post-store + path_pos[2] += ((inc*lcv)>>8); + path_pos[3] += ((inc*lcv)>>8); + + path_x[1] = x_right; + path_y[1] = y_right; + } + } + } while(1); + + DSP4.waiting4command = TRUE; + DSP4.out_count = 2; + DSP4_WRITE_WORD(0,0); +} + +#undef PRINT + +#if OP==0x000D +#define PRINT +#endif + +void DSP4_Op0D() +{ + uint16 command; + + DSP4.waiting4command = FALSE; + + // op flow control + switch(DSP4_Logic) { + case 1: goto resume1; break; + case 2: goto resume2; break; + } + + //////////////////////////////////////////////////// + // process initial inputs + + // sort inputs + // 0x00 = DSP4_READ_WORD(0x00); + project_focaly = DSP4_READ_WORD(0x02); + raster = DSP4_READ_WORD(0x04); + viewport_top = DSP4_READ_WORD(0x06); + project_y = DSP4_READ_WORD(0x08); + viewport_bottom = DSP4_READ_WORD(0x0a); + project_x1low = DSP4_READ_WORD(0x0c); + project_x1 = DSP4_READ_WORD(0x0e); + project_focalx = DSP4_READ_WORD(0x0e); + project_centerx = DSP4_READ_WORD(0x10); + project_ptr = DSP4_READ_WORD(0x12); + // 0xc0 = DSP4_READ_WORD(0x14); + project_pitchylow = DSP4_READ_WORD(0x16); + project_pitchy = DSP4_READ_WORD(0x18); + project_pitchxlow = DSP4_READ_WORD(0x1a); + project_pitchx = DSP4_READ_WORD(0x1c); + far_plane = DSP4_READ_WORD(0x1e); + // ? = DSP4_READ_WORD(0x20); + + // multi-op storage + multi_index1++; + multi_index1%=4; + + // remap 0D->09 window data ahead of time + // index starts at 1-3,0 + // + // Op0D: BL,TL,BR,TR + // Op09: TL,TR,BL,BR (1,2,3,0) + switch(multi_index1) + { + case 1: multi_index2=3; break; + case 2: multi_index2=1; break; + case 3: multi_index2=0; break; + case 0: multi_index2=2; break; + } + + // pre-compute + view_plane = PLANE_START; + + // figure out projection data + project_y -= viewport_bottom; + + // debug + block=0; + + //////////////////////////////////////////////////// + // command check + + do { + // scan next command + DSP4.in_count = 2; + + DSP4_WAIT(1) resume1: + + // inspect input + command = DSP4_READ_WORD(0); + + // terminate op + if(command == 0x8000) break; + + // already have 2 bytes in queue + DSP4.in_index = 2; + DSP4.in_count = 8; + + DSP4_WAIT(2) resume2: + + //////////////////////////////////////////////////// + // project section of the track + + // inspect inputs + int16 plane = DSP4_READ_WORD(0); + int16 index, lcv; + int16 py_dy=0, px_dx=0; + int16 y_out, x_out; + int16 envelope = DSP4_READ_WORD(6); + int16 project_x; + + // ignore invalid data + if((uint16) plane == 0x8001) continue; + + // one-time init + if(far_plane) + { + // setup final data + // low16=plane + project_x1 = project_focalx; + project_y1 = project_focaly; + plane = far_plane; + far_plane = 0; + + // track occlusion + multi_farplane[multi_index2] = plane; + multi_raster[multi_index2] = viewport_bottom; + } + + // use proportional triangles to project new coords + project_x2 = project_focalx * plane / view_plane; + project_y2 = project_focaly * plane / view_plane; + + // quadratic regression (rough) + if(project_focaly>=-0x0f) + py_dy = project_focaly * project_focaly * -0.20533553 + - 1.08330005 * project_focaly - 69.61094639; + else + py_dy = project_focaly * project_focaly * -0.000657035759 + - 1.07629051 * project_focaly - 65.69315963; + + // approximate # of raster lines + segments = abs(project_y2-project_y1); + + // prevent overdraw + if(project_y2>=raster) segments=0; + else raster=project_y2; + + // don't draw outside the window + if(project_y20) + { + // interpolate between projected points + px_dx = ((project_x2-project_x1)<<8)/segments; + } + + // debug + ++block; + +#ifdef PRINT + printf("(line %d) Op0D check %02X, plane %04X\n",c,(uint16)segments,(uint16)(plane)); +#endif + + // prepare output + DSP4.out_count=8+2+6*segments; + + DSP4_WRITE_WORD(0,project_focalx); + DSP4_WRITE_WORD(2,project_x2); + DSP4_WRITE_WORD(4,project_focaly); + DSP4_WRITE_WORD(6,project_y2); + DSP4_WRITE_WORD(8,segments); +#if 0 + DSP4_WRITE_WORD(0,-1); + DSP4_WRITE_WORD(2,-1); + DSP4_WRITE_WORD(4,-1); + //DSP4_WRITE_WORD(6,-1); + DSP4_WRITE_WORD(8,-1); +#endif + + index=10; + + project_x = project_centerx + project_x1; + + // iterate through each point + for( lcv=0; lcv>8); + x_out = project_x+((px_dx*lcv)>>8); + + // factor in dynamic track changes + y_out += envelope; + +#if 0 + project_ptr=-1; + y_out=-1; + x_out=-1; +#endif + + // data + DSP4_WRITE_WORD(index+0,project_ptr); + DSP4_WRITE_WORD(index+2,y_out); + DSP4_WRITE_WORD(index+4,x_out); + index += 6; + + // post-update + project_ptr -= 4; + } + + // post-update + project_y += ((py_dy*lcv)>>8); + + if(segments > 0) + { + project_x1 = project_x2; + project_y1 = project_y2; + + // track occlusion: can't see anything below it + multi_farplane[multi_index2] = plane; + multi_raster[multi_index2] -= segments; + } + + // update focal projection points + project_pitchy += (int8)DSP4.parameters[3]; + project_pitchx += (int8)DSP4.parameters[5]; + + project_focaly += project_pitchy; + project_focalx += project_pitchx; + } while(1); + + DSP4.waiting4command = TRUE; + DSP4.out_count = 0; +} + +#undef PRINT + +#if OP==0x0009 +#define PRINT +#endif + +#if OP==0x0006 +#define PRINT +#endif + +void DSP4_Op09() +{ + uint16 command; + + DSP4.waiting4command = FALSE; + + // op flow control + switch(DSP4_Logic) { + case 1: goto resume1; break; + case 2: goto resume2; break; + case 3: goto resume3; break; + case 4: goto resume4; break; + case 5: goto resume5; break; + case 6: goto resume6; break; + case 7: goto resume7; break; + } + + //////////////////////////////////////////////////// + // process initial inputs + + // debug + block=0; + + // grab screen information + view_plane = PLANE_START; + center_x = DSP4_READ_WORD(0x00); + center_y = DSP4_READ_WORD(0x02); + // 0x00 = DSP4_READ_WORD(0x04); + viewport_left = DSP4_READ_WORD(0x06); + viewport_right = DSP4_READ_WORD(0x08); + viewport_top = DSP4_READ_WORD(0x0a); + viewport_bottom = DSP4_READ_WORD(0x0c); + +#ifdef PRINT2 + printf("Window: (%04X,%04X) (%04X,%04X)\n", + viewport_left,viewport_right,viewport_top,viewport_bottom); +#endif + + // cycle through viewport window data + multi_index1++; + multi_index1%=4; + + goto no_sprite; + + do { + //////////////////////////////////////////////////// + // check for new sprites + + do { + uint16 second; + + DSP4.in_count = 4; + DSP4.in_index = 2; + + DSP4_WAIT(1) resume1: + + // try to classify sprite + second = DSP4_READ_WORD(2); + + // op termination + if(second == 0x8000) goto terminate; + + second >>= 8; + sprite_type = 0; + + // vehicle sprite + if(second == 0x90) + { + sprite_type = 1; + break; + } + // terrain sprite + else if(second != 0) + { + sprite_type = 2; + break; + } + +no_sprite: + // no sprite. try again + + DSP4.in_count = 2; + + DSP4_WAIT(2) resume2: + ; + } while (1); + + //////////////////////////////////////////////////// + // process projection information + +sprite_found: + // vehicle sprite + if(sprite_type == 1) + { + int16 plane; + int16 car_left, car_right, car_left_a; + int16 focal_back, focal_front; + uint8 distance, id; + + // we already have 4 bytes we want + DSP4.in_count = 6+12; + DSP4.in_index = 4; + + DSP4_WAIT(3) resume3: + + // filter inputs + project_y1 = DSP4_READ_WORD(0x00); + // 0x9000 = DSP4_READ_WORD(0x02); + id = DSP4.parameters[0x04]; + distance = DSP4.parameters[0x05]; + focal_back = DSP4_READ_WORD(0x06); + focal_front = DSP4_READ_WORD(0x08); + car_left_a = DSP4_READ_WORD(0x0a); + car_left = DSP4_READ_WORD(0x0c); + plane = DSP4_READ_WORD(0x0e); + car_right = DSP4_READ_WORD(0x10); + + // calculate car's x-center + project_focalx = car_right-car_left; + + // determine how far into the screen to project + project_focaly = focal_back; + project_x = project_focalx * plane / view_plane; + segments = 0x33 - project_focaly * plane / view_plane; + far_plane = plane; + + // prepare memory + sprite_x = center_x+project_x; + sprite_y = viewport_bottom-segments; + far_plane = plane; + + // debug + ++block; +#ifdef PRINT + printf("(line %d) Op09 vehicle block %d, Loop %04X\n",c,block,(uint16)project_y1); + //printf("%04X %04X %04X %04X / ",focal_back,focal_front,car_left_a,car_left); + //printf("%02X %02X ", distance, id); +#endif + + // make the car's x-center available + DSP4.out_count = 2; + DSP4_WRITE_WORD(0,project_focalx); + +#if 0 + DSP4_WRITE_WORD(0,-1); +#endif + + // grab a few remaining vehicle values + DSP4.in_count = 4; + + DSP4_WAIT(4) resume4: + + // store final values + int height = DSP4_READ_WORD(0); + sprite_offset = DSP4_READ_WORD(2); + + // vertical lift factor + sprite_y += height; + +#ifdef PRINT_09 + printf("%04X\n",sprite_offset); +#endif + } + // terrain sprite + else if(sprite_type == 2) + { + int16 plane; + + // we already have 4 bytes we want + DSP4.in_count = 6+6+2; + DSP4.in_index = 4; + + DSP4_WAIT(5) resume5: + + // sort loop inputs + project_y1 = DSP4_READ_WORD(0x00); + plane = DSP4_READ_WORD(0x02); + project_centerx = DSP4_READ_WORD(0x04); + //project_y1 = DSP4_READ_WORD(0x06); + project_focalx = DSP4_READ_WORD(0x08); + project_focaly = DSP4_READ_WORD(0x0a); + sprite_offset = DSP4_READ_WORD(0x0c); + + // determine distances into virtual world + segments = 0x33 - project_y1; + project_x = project_focalx * plane / view_plane; + project_y = project_focaly * plane / view_plane; + + // prepare memory + sprite_x = center_x+project_x-project_centerx; + sprite_y = viewport_bottom-segments+project_y; + far_plane = plane; + + // debug + ++block; +#ifdef PRINT + printf("(line %d) Op09 terrain block %d, Loop %04X\n",c,block,(uint16)project_y1); +#endif + } + + // default sprite size: 16x16 + sprite_size = 1; + + //////////////////////////////////////////////////// + // convert tile data to OAM + + do { + DSP4.in_count = 2; + + DSP4_WAIT(6) resume6: + + command = DSP4_READ_WORD(0); + + // opcode termination + if(command == 0x8000) goto terminate; + + // toggle sprite size + if(command == 0x0000) + { + sprite_size = !sprite_size; +#ifdef PRINT + //printf("TOGGLE=%02X\n",(uint8)sprite_size); +#endif + continue; + } + + // new sprite information + command >>= 8; + if(command != 0x20 && command != 0x40 && + command != 0x60 && command != 0xa0 && + command != 0xc0 && command != 0xe0) + break; + + DSP4.in_count = 6; + DSP4.in_index = 2; + + DSP4_WAIT(7) resume7: + + ///////////////////////////////////// + // process tile data + + bool8 clip; + int16 sp_x, sp_y, sp_oam, sp_msb; + int16 sp_dx, sp_dy; + int16 expand = sprite_size ? 15:7; + + // sprite deltas + sp_dy = DSP4_READ_WORD(2); + sp_dx = DSP4_READ_WORD(4); + + // update coordinates + sp_y = sprite_y + sp_dy; + sp_x = sprite_x + sp_dx; + + // reject points outside the clipping window + clip = FALSE; + + // window clipping + if(sp_x < viewport_left-expand || sp_x > viewport_right) clip=TRUE; + if(sp_y < viewport_top || sp_y > viewport_bottom) clip=TRUE; + + // track occlusion: + // clip any tiles that are below the road + if(far_plane <= multi_farplane[multi_index1] && + (sp_y>>3) >= (multi_raster[multi_index1]>>3)) clip=TRUE; + + // tile limitations + if ((sp_y >= -expand) && ((sp_y < 0) || ((sp_y & 0x01ff) < 0x00eb)) && !clip) + { + short Row = (sp_y >> 3) & 0x1f; + + if(!sprite_size) + { + // 1x1 tile + if (RowCount[Row] < MaxTilesPerRow) + RowCount[Row]++; + else + clip=TRUE; + } + else + { + // 2x2 tile + if ((RowCount[Row+0]+1 < MaxTilesPerRow) && + (RowCount[Row+1]+1 < MaxTilesPerRow)) + { + RowCount[Row+0]+=2; + RowCount[Row+1]+=2; + } + else + clip=TRUE; + } + } + +#ifdef PRINT + printf("(line %d) %04X, %04X, %04X / %04X %04X\n",line, + (uint16)sp_x,(uint16)sp_y,(uint16)far_plane,(uint16)multi_farplane[multi_index1],(uint16)multi_raster[multi_index1]); +#endif + + // don't draw offscreen coordinates + DSP4.out_count = 0; + if(!clip) + { + int16 out_index = 0; + int16 offset = DSP4_READ_WORD(0); + + // update sprite nametable/attribute information + sp_oam = sprite_offset + offset; + sp_msb = (sp_x<0 || sp_x>255); + +#ifdef PRINT2 + printf("(line %d) %04X, %04X, %04X, %04X, %04X\n",line, + (uint16)sp_oam,(uint16)sprite_offset,(uint16)offset, + (uint16)sp_x,(uint16)sp_y); +#endif + + // emit transparency information + if( + (sprite_offset&0x08) && + ((sprite_type==1 && sp_y>=0xcc) || + (sprite_type==2 && sp_y>=0xbb)) + ) + { + DSP4.out_count = 6; + + // one block of OAM data + DSP4_WRITE_WORD(0,1); + + // OAM: x,y,tile,no attr + DSP4.output[2] = sp_x&0xFF; + DSP4.output[3] = (sp_y+6)&0xFF; + DSP4_WRITE_WORD(4,0xEE); + + out_index = 6; + + // OAM: size,msb data + DSP4_Op06(sprite_size,sp_msb); + +#if 0 + //DSP4_WRITE_WORD(0,-1); + DSP4_WRITE_WORD(2,-1); + DSP4_WRITE_WORD(4,-1); +#endif + } + + // normal data + DSP4.out_count += 8; + + // one block of OAM data + DSP4_WRITE_WORD(out_index+0,1); + + // OAM: x,y,tile,attr + DSP4.output[out_index+2] = sp_x&0xFF; + DSP4.output[out_index+3] = sp_y&0xFF; + DSP4_WRITE_WORD(out_index+4,sp_oam); + + // no following OAM data + DSP4_WRITE_WORD(out_index+6,0); + + // OAM: size,msb data + DSP4_Op06(sprite_size,sp_msb); + +#if 0 + //DSP4_WRITE_WORD(out_index+0,-1); + DSP4_WRITE_WORD(out_index+2,-1); + DSP4_WRITE_WORD(out_index+4,-1); +#endif + } + + // no sprite information + if(DSP4.out_count == 0) + { + DSP4.out_count = 2; + DSP4_WRITE_WORD(0,0); + } + } while (1); + + ///////////////////////////////////// + // special cases: plane == 0x0000 + + // special vehicle case + if(command == 0x90) + { + sprite_type = 1; + + // shift bytes + DSP4.parameters[2] = DSP4.parameters[0]; + DSP4.parameters[3] = DSP4.parameters[1]; + DSP4.parameters[0] = 0; + DSP4.parameters[1] = 0; + + goto sprite_found; + } + // special terrain case + else if(command != 0x00 && command != 0xff) + { + sprite_type = 2; + + // shift bytes + DSP4.parameters[2] = DSP4.parameters[0]; + DSP4.parameters[3] = DSP4.parameters[1]; + DSP4.parameters[0] = 0; + DSP4.parameters[1] = 0; + + goto sprite_found; + } + } while (1); + +terminate: + DSP4.waiting4command = TRUE; + DSP4.out_count=0; +} + +#undef PRINT + diff -NaHudr snes9x-1.43-src/snes9x/gfx.cpp snes9x-improvement7-src-dehacked/snes9x/gfx.cpp --- snes9x-1.43-src/snes9x/gfx.cpp 2004-12-31 00:15:47.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/gfx.cpp 2005-04-09 00:59:26.000000000 +0300 @@ -97,14 +97,17 @@ #include "apu.h" #include "cheats.h" #include "screenshot.h" +#include "movie.h" #define M7 19 #define M8 19 void output_png(); void ComputeClipWindows (); -static void S9xDisplayFrameRate (); +//static void S9xDisplayPressedKeys (); +//static void S9xDisplayFrameRate (); static void S9xDisplayString (const char *string); +//static void S9xDisplayFrameCount (const char *string); extern uint8 BitShifts[8][4]; extern uint8 TileShifts[8][4]; @@ -597,8 +600,8 @@ void S9xStartScreenRefresh () { - if (GFX.InfoStringTimeout > 0 && --GFX.InfoStringTimeout == 0) - GFX.InfoString = NULL; + if (GFX.InfoStringTimeout > 0 && --GFX.InfoStringTimeout == 0) + GFX.InfoString = NULL; if (IPPU.RenderThisFrame) { @@ -793,10 +796,19 @@ if(Settings.TakeScreenshot) S9xDoScreenshot(IPPU.RenderedScreenWidth, IPPU.RenderedScreenHeight); - if (Settings.DisplayFrameRate) - S9xDisplayFrameRate (); - if (GFX.InfoString) - S9xDisplayString (GFX.InfoString); + +// Don't TOUCH my output! +// if (Settings.DisplayFrameRate) +// S9xDisplayFrameRate(); + +// if (Settings.DisplayPressedKeys /*&& S9xMovieActive()*/) + // S9xDisplayPressedKeys(); + +// if (GFX.FrameDisplay && S9xMovieActive()) +// S9xDisplayFrameCount(GFX.FrameDisplayString); + + if (GFX.InfoString) + S9xDisplayString(GFX.InfoString); S9xDeinitUpdate (IPPU.RenderedScreenWidth, IPPU.RenderedScreenHeight, Settings.SixteenBit); @@ -3443,6 +3455,54 @@ } } } +/* +static void S9xDisplayPressedKeys () +{ + int activeCount = 0; + int enabledCount = 0; + { + for(int J = 0; J < 5; J++) + { + if((IPPU.Joypads[J] & 0xffff) != 0) + activeCount++; + + if(S9xMovieActive() && S9xMovieControllers() & (1<','<','v','^','S','s','Y','B'}; + const static int KeyOrder[]={8,10,7,9, 0, 6,14,13,5, 1, 4,3, 2, 11,12}; // < ^ > v A B Y X L R S s + char string [255]; + int len; + + sprintf(string, enabledCount>1?"P%d: ":" ",J+1); + + int i; + for (i=0; i < 15; i++) + { + int j = KeyOrder[i]; + int mask = (1 << (j+1)); + string[strlen("P?: ")+i]= ((IPPU.Joypads[J] & mask)!=0 || (IPPU.Joypads[J+5] & mask)!=0) ? KeyMap[j] : ' '; + } + + len=strlen(string); + + for (i = 0; i < len; i++) + { + DisplayChar (Screen, string [i]); + Screen += (font_width - 1) * (Settings.SixteenBit ? 2 : 1); + } + } + } +} static void S9xDisplayFrameRate () { @@ -3462,7 +3522,7 @@ (font_width - 1); } } - +*/ static void S9xDisplayString (const char *string) { uint8 *Screen = GFX.Screen + 2 + @@ -3492,6 +3552,36 @@ } } +/*static void S9xDisplayFrameCount (const char *string) +{ + uint8 *Screen = GFX.Screen + 2 + + (IPPU.RenderedScreenHeight - font_height * 4) * GFX.Pitch2; + int len = strlen (string); + int max_chars = IPPU.RenderedScreenWidth / (font_width - 1); + int char_count = 0; + int i; + + for (i = 0; i < len; i++, char_count++) + { + if (char_count >= max_chars || string [i] < 32) + { + Screen -= Settings.SixteenBit ? + (font_width - 1) * sizeof (uint16) * max_chars : + (font_width - 1) * max_chars; + Screen += font_height * GFX.Pitch; + if (Screen >= GFX.Screen + GFX.Pitch * IPPU.RenderedScreenHeight) + break; + char_count -= max_chars; + } + if (string [i] < 32) + continue; + DisplayChar (Screen, string [i]); + Screen += Settings.SixteenBit ? (font_width - 1) * sizeof (uint16) : + (font_width - 1); + } +} +*/ + void S9xUpdateScreen () { int32 x2 = 1; diff -NaHudr snes9x-1.43-src/snes9x/gfx.h snes9x-improvement7-src-dehacked/snes9x/gfx.h --- snes9x-1.43-src/snes9x/gfx.h 2004-12-31 00:15:47.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/gfx.h 2005-04-09 00:59:27.000000000 +0300 @@ -150,6 +150,10 @@ uint32 (*BuildPixel2) (uint32 R, uint32 G, uint32 B); void (*DecomposePixel) (uint32 Pixel, uint32 &R, uint32 &G, uint32 &B); #endif + + bool8 FrameDisplay; + char FrameDisplayString[256]; + }; struct SLineData { diff -NaHudr snes9x-1.43-src/snes9x/i386/.cvsignore snes9x-improvement7-src-dehacked/snes9x/i386/.cvsignore --- snes9x-1.43-src/snes9x/i386/.cvsignore 1970-01-01 02:00:00.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/i386/.cvsignore 2005-03-20 23:46:24.000000000 +0200 @@ -0,0 +1 @@ +*.O \ No newline at end of file diff -NaHudr snes9x-1.43-src/snes9x/i386/cpuexec.S snes9x-improvement7-src-dehacked/snes9x/i386/cpuexec.S --- snes9x-1.43-src/snes9x/i386/cpuexec.S 2004-12-31 00:15:44.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/i386/cpuexec.S 2005-03-21 15:39:57.000000000 +0200 @@ -434,11 +434,19 @@ .L165: xorl %eax, %eax movw ScreenHeight,%ax - addl $3,%eax + addl $3,%eax // the +3 was causing keypresses to be displayed 1 frame behind + addl $0,%eax cmpl V_Counter,%eax jne .NoJoypadUpdate - ccall S9xUpdateJoypads + ccall S9xUpdateJoypadMemory .NoJoypadUpdate: + xorl %eax, %eax + movw ScreenHeight,%ax + addl $0,%eax + cmpl V_Counter,%eax + jne .NoJoypadUpdate2 + ccall S9xUpdateJoypadButtons +.NoJoypadUpdate2: movl V_Counter,%eax cmpl $1,%eax jne .L177 @@ -471,7 +479,8 @@ jz .reschedule #endif -#if 0 + testb $0xff, UseWIPAPUTiming + jz .nowiptiming movb APUTimerEnabled + 2,%cl testb %cl,%cl je .L179 @@ -534,7 +543,7 @@ movw $0,APUTimer + 2 movb $1,APUExecuting movl %edx,APUWaitCounter -#endif +.nowiptiming: jmp .reschedule .htimer_trigger: cmpb $0, HTimerEnabled diff -NaHudr snes9x-1.43-src/snes9x/jma/7z.h snes9x-improvement7-src-dehacked/snes9x/jma/7z.h --- snes9x-1.43-src/snes9x/jma/7z.h 2004-12-31 00:15:49.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/jma/7z.h 2005-03-21 14:00:47.000000000 +0200 @@ -1,5 +1,5 @@ /* -Copyright (C) 2004 NSRT Team ( http://nsrt.edgeemu.com ) +Copyright (C) 2005 NSRT Team ( http://nsrt.edgeemu.com ) Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) This library is free software; you can redistribute it and/or @@ -20,6 +20,9 @@ #ifndef __7Z_H #define __7Z_H +#include "iiostrm.h" + +bool decompress_lzma_7z(ISequentialInStream& in, unsigned in_size, ISequentialOutStream& out, unsigned out_size) throw (); bool decompress_lzma_7z(const unsigned char* in_data, unsigned in_size, unsigned char* out_data, unsigned out_size) throw (); #endif diff -NaHudr snes9x-1.43-src/snes9x/jma/7zlzma.cpp snes9x-improvement7-src-dehacked/snes9x/jma/7zlzma.cpp --- snes9x-1.43-src/snes9x/jma/7zlzma.cpp 2004-12-31 00:15:49.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/jma/7zlzma.cpp 2005-03-21 14:00:47.000000000 +0200 @@ -1,4 +1,5 @@ /* +Copyright (C) 2005 NSRT Team ( http://nsrt.edgeemu.com ) Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) This library is free software; you can redistribute it and/or @@ -20,27 +21,31 @@ #include "lzmadec.h" -bool decompress_lzma_7z(const unsigned char* in_data, unsigned in_size, unsigned char* out_data, unsigned out_size) throw () { - try { +bool decompress_lzma_7z(ISequentialInStream& in, unsigned in_size, ISequentialOutStream& out, unsigned out_size) throw () +{ + try + { NCompress::NLZMA::CDecoder cc; - ISequentialInStream in(reinterpret_cast(in_data), in_size); - ISequentialOutStream out(reinterpret_cast(out_data), out_size); - UINT64 in_size_l = in_size; UINT64 out_size_l = out_size; - if (cc.ReadCoderProperties(&in) != S_OK) - return false; + if (cc.ReadCoderProperties(&in) != S_OK) { return(false); } + if (cc.Code(&in, &out, &in_size_l, &out_size_l) != S_OK) { return(false); } + if (out.size_get() != out_size || out.overflow_get()) { return(false); } - if (cc.Code(&in, &out, &in_size_l, &out_size_l) != S_OK) - return false; + return(true); + } + catch (...) + { + return(false); + } +} - if (out.size_get() != out_size || out.overflow_get()) - return false; +bool decompress_lzma_7z(const unsigned char* in_data, unsigned int in_size, unsigned char* out_data, unsigned int out_size) throw () +{ + ISequentialInStream_Array in(reinterpret_cast(in_data), in_size); + ISequentialOutStream_Array out(reinterpret_cast(out_data), out_size); - return true; - } catch (...) { - return false; - } + return(decompress_lzma_7z(in, in_size, out, out_size)); } diff -NaHudr snes9x-1.43-src/snes9x/jma/iiostrm.cpp snes9x-improvement7-src-dehacked/snes9x/jma/iiostrm.cpp --- snes9x-1.43-src/snes9x/jma/iiostrm.cpp 2004-12-31 00:15:49.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/jma/iiostrm.cpp 2005-03-21 14:00:47.000000000 +0200 @@ -1,4 +1,5 @@ /* +Copyright (C) 2005 NSRT Team ( http://nsrt.edgeemu.com ) Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) Copyright (C) 2001-4 Igor Pavlov ( http://www.7-zip.org ) @@ -19,19 +20,26 @@ #include "portable.h" #include "iiostrm.h" +#include "crc32.h" -HRESULT ISequentialInStream::Read(void *aData, UINT32 aSize, UINT32* aProcessedSize) { +HRESULT ISequentialInStream_Array::Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize) +{ if (aSize > size) + { aSize = size; + } + *aProcessedSize = aSize; memcpy(aData, data, aSize); size -= aSize; data += aSize; - return S_OK; + return(S_OK); } -HRESULT ISequentialOutStream::Write(const void *aData, UINT32 aSize, UINT32* aProcessedSize) { - if (aSize > size) { +HRESULT ISequentialOutStream_Array::Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize) +{ + if (aSize > size) + { overflow = true; aSize = size; } @@ -40,5 +48,85 @@ size -= aSize; data += aSize; total += aSize; - return S_OK; + return(S_OK); +} + +HRESULT ISequentialInStream_String::Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize) +{ + if (aSize > data.size()) + { + aSize = data.size(); + } + + *aProcessedSize = aSize; + memcpy(aData, data.c_str(), aSize); + data.erase(0, aSize); + return(S_OK); +} + +HRESULT ISequentialOutStream_String::Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize) +{ + *aProcessedSize = aSize; + data.append((const char *)aData, aSize); + total += aSize; + return(S_OK); +} + +HRESULT ISequentialInStream_Istream::Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize) +{ + data.read((char *)aData, aSize); + *aProcessedSize = data.gcount(); + return(S_OK); +} + +HRESULT ISequentialOutStream_Ostream::Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize) +{ + *aProcessedSize = aSize; + data.write((char *)aData, aSize); + total += aSize; + return(S_OK); +} + + + +HRESULT ISequentialInStreamCRC32_Array::Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize) +{ + ISequentialInStream_Array::Read(aData, aSize, aProcessedSize); + crc32 = CRC32lib::CRC32((const unsigned char *)aData, *aProcessedSize, ~crc32); + return(S_OK); +} + +HRESULT ISequentialOutStreamCRC32_Array::Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize) +{ + ISequentialOutStream_Array::Write(aData, aSize, aProcessedSize); + crc32 = CRC32lib::CRC32((const unsigned char *)aData, *aProcessedSize, ~crc32); + return(S_OK); +} + +HRESULT ISequentialInStreamCRC32_String::Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize) +{ + ISequentialInStream_String::Read(aData, aSize, aProcessedSize); + crc32 = CRC32lib::CRC32((const unsigned char *)aData, *aProcessedSize, ~crc32); + return(S_OK); +} + +HRESULT ISequentialOutStreamCRC32_String::Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize) +{ + ISequentialOutStream_String::Write(aData, aSize, aProcessedSize); + crc32 = CRC32lib::CRC32((const unsigned char *)aData, *aProcessedSize, ~crc32); + return(S_OK); +} + +HRESULT ISequentialInStreamCRC32_Istream::Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize) +{ + ISequentialInStream_Istream::Read(aData, aSize, aProcessedSize); + crc32 = CRC32lib::CRC32((const unsigned char *)aData, *aProcessedSize, ~crc32); + return(S_OK); +} + +HRESULT ISequentialOutStreamCRC32_Ostream::Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize) +{ + ISequentialOutStream_Ostream::Write(aData, aSize, aProcessedSize); + crc32 = CRC32lib::CRC32((const unsigned char *)aData, *aProcessedSize, ~crc32); + return(S_OK); } diff -NaHudr snes9x-1.43-src/snes9x/jma/iiostrm.h snes9x-improvement7-src-dehacked/snes9x/jma/iiostrm.h --- snes9x-1.43-src/snes9x/jma/iiostrm.h 2004-12-31 00:15:49.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/jma/iiostrm.h 2005-03-21 14:00:47.000000000 +0200 @@ -1,4 +1,5 @@ /* +Copyright (C) 2005 NSRT Team ( http://nsrt.edgeemu.com ) Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) Copyright (C) 2001-4 Igor Pavlov ( http://www.7-zip.org ) @@ -20,29 +21,167 @@ #ifndef __IINOUTSTREAMS_H #define __IINOUTSTREAMS_H +#include + +#if (((defined(_MSC_VER) && _MSC_VER >= 1300)) || defined(__MINGW32__)) + // both MINGW and VS.NET use fstream instead of fstream.h which is deprecated + #include + using namespace std; +#else + // for VC++ 6 + #include +#endif + #include "portable.h" + class ISequentialInStream { +public: + virtual HRESULT Read(void *, UINT32, UINT32 *) = 0; +}; + + +class ISequentialInStream_Array : public ISequentialInStream +{ const char* data; - unsigned size; + unsigned int size; public: - ISequentialInStream(const char* Adata, unsigned Asize) : data(Adata), size(Asize) { } + ISequentialInStream_Array(const char *Adata, unsigned Asize) : data(Adata), size(Asize) { } HRESULT Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize); }; +class ISequentialInStream_String : public ISequentialInStream +{ + std::string& data; +public: + ISequentialInStream_String(std::string& Adata) : data(Adata) { } + + HRESULT Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize); +}; + +class ISequentialInStream_Istream : public ISequentialInStream +{ + std::istream& data; +public: + ISequentialInStream_Istream(std::istream& Adata) : data(Adata) { } + + HRESULT Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize); +}; + + + class ISequentialOutStream { +public: + virtual bool overflow_get() const = 0; + virtual unsigned int size_get() const = 0; + + virtual HRESULT Write(const void *, UINT32, UINT32 *) = 0; +}; + + +class ISequentialOutStream_Array : public ISequentialOutStream +{ char* data; - unsigned size; + unsigned int size; bool overflow; - unsigned total; + unsigned int total; public: - ISequentialOutStream(char* Adata, unsigned Asize) : data(Adata), size(Asize), overflow(false), total(0) { } + ISequentialOutStream_Array(char *Adata, unsigned Asize) : data(Adata), size(Asize), overflow(false), total(0) { } - bool overflow_get() const { return overflow; } - unsigned size_get() const { return total; } + bool overflow_get() const { return(overflow); } + unsigned int size_get() const { return(total); } + + HRESULT Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize); +}; + +class ISequentialOutStream_String : public ISequentialOutStream +{ + std::string& data; + unsigned int total; +public: + ISequentialOutStream_String(std::string& Adata) : data(Adata), total(0) { } + + bool overflow_get() const { return(false); } + unsigned int size_get() const { return(total); } + + HRESULT Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize); +}; + + +class ISequentialOutStream_Ostream : public ISequentialOutStream +{ + std::ostream& data; + unsigned int total; +public: + ISequentialOutStream_Ostream(std::ostream& Adata) : data(Adata), total(0) { } + + bool overflow_get() const { return(false); } + unsigned int size_get() const { return(total); } + + HRESULT Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize); +}; + + + +class ISequentialStreamCRC32 +{ +protected: + unsigned int crc32; +public: + ISequentialStreamCRC32() : crc32(0) {} + unsigned int crc32_get() const { return(crc32); } +}; + + +class ISequentialInStreamCRC32_Array : public ISequentialInStream_Array, public ISequentialStreamCRC32 +{ +public: + ISequentialInStreamCRC32_Array(const char *Adata, unsigned Asize) : ISequentialInStream_Array(Adata, Asize) { } + + HRESULT Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize); +}; + +class ISequentialInStreamCRC32_String : public ISequentialInStream_String, public ISequentialStreamCRC32 +{ +public: + ISequentialInStreamCRC32_String(std::string& Adata) : ISequentialInStream_String(Adata) { } + + HRESULT Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize); +}; + +class ISequentialInStreamCRC32_Istream : public ISequentialInStream_Istream, public ISequentialStreamCRC32 +{ +public: + ISequentialInStreamCRC32_Istream(std::istream& Adata) : ISequentialInStream_Istream(Adata) { } + + HRESULT Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize); +}; + + +class ISequentialOutStreamCRC32_Array : public ISequentialOutStream_Array, public ISequentialStreamCRC32 +{ +public: + ISequentialOutStreamCRC32_Array(char *Adata, unsigned Asize) : ISequentialOutStream_Array(Adata, Asize) { } + + HRESULT Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize); +}; + +class ISequentialOutStreamCRC32_String : public ISequentialOutStream_String, public ISequentialStreamCRC32 +{ +public: + ISequentialOutStreamCRC32_String(std::string& Adata) : ISequentialOutStream_String(Adata) { } + + HRESULT Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize); +}; + + +class ISequentialOutStreamCRC32_Ostream : public ISequentialOutStream_Ostream, public ISequentialStreamCRC32 +{ +public: + ISequentialOutStreamCRC32_Ostream(std::ostream& Adata) : ISequentialOutStream_Ostream(Adata) { } HRESULT Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize); }; diff -NaHudr snes9x-1.43-src/snes9x/jma/inbyte.cpp snes9x-improvement7-src-dehacked/snes9x/jma/inbyte.cpp --- snes9x-1.43-src/snes9x/jma/inbyte.cpp 2004-12-31 00:15:49.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/jma/inbyte.cpp 2005-03-21 14:00:47.000000000 +0200 @@ -1,4 +1,5 @@ /* +Copyright (C) 2005 NSRT Team ( http://nsrt.edgeemu.com ) Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) Copyright (C) 2001-4 Igor Pavlov ( http://www.7-zip.org ) diff -NaHudr snes9x-1.43-src/snes9x/jma/jma.cpp snes9x-improvement7-src-dehacked/snes9x/jma/jma.cpp --- snes9x-1.43-src/snes9x/jma/jma.cpp 2004-12-31 00:15:49.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/jma/jma.cpp 2005-03-21 14:00:47.000000000 +0200 @@ -1,95 +1,23 @@ -/******************************************************************************* - Snes9x - Portable Super Nintendo Entertainment System (TM) emulator. - - (c) Copyright 1996 - 2002 Gary Henderson (gary.henderson@ntlworld.com) and - Jerremy Koot (jkoot@snes9x.com) - - (c) Copyright 2001 - 2004 John Weidman (jweidman@slip.net) - - (c) Copyright 2002 - 2004 Brad Jorsch (anomie@users.sourceforge.net), - funkyass (funkyass@spam.shaw.ca), - Joel Yliluoma (http://iki.fi/bisqwit/) - Kris Bleakley (codeviolation@hotmail.com), - Matthew Kendora, - Nach (n-a-c-h@users.sourceforge.net), - Peter Bortas (peter@bortas.org) and - zones (kasumitokoduck@yahoo.com) - - C4 x86 assembler and some C emulation code - (c) Copyright 2000 - 2003 zsKnight (zsknight@zsnes.com), - _Demo_ (_demo_@zsnes.com), and Nach - - C4 C++ code - (c) Copyright 2003 Brad Jorsch - - DSP-1 emulator code - (c) Copyright 1998 - 2004 Ivar (ivar@snes9x.com), _Demo_, Gary Henderson, - John Weidman, neviksti (neviksti@hotmail.com), - Kris Bleakley, Andreas Naive - - 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 - 2004 zsKnight, pagefault (pagefault@zsnes.com) and - Kris Bleakley - 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-DD1 C emulator code - (c) Copyright 2003 Brad Jorsch with research by - Andreas Naive and John Weidman - - S-RTC C emulator code - (c) Copyright 2001 John Weidman - - ST010 C++ emulator code - (c) Copyright 2003 Feather, Kris Bleakley, John Weidman and Matthew Kendora - - Super FX x86 assembler emulator code - (c) Copyright 1998 - 2003 zsKnight, _Demo_, and pagefault - - Super FX C emulator code - (c) Copyright 1997 - 1999 Ivar, Gary Henderson and John Weidman - - - SH assembler code partly based on x86 assembler code - (c) Copyright 2002 - 2004 Marcus Comstedt (marcus@mc.pp.se) - - JMA compressed file support - (c) Copyright 2004 NSRT Team (http://nsrt.edgeemu.com) - - 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. +/* +Copyright (C) 2005 NSRT Team ( http://nsrt.edgeemu.com ) - 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. +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either +version 2 of the License, or (at your option) any later +version. - Super NES and Super Nintendo Entertainment System are trademarks of - Nintendo Co., Limited and its subsidiary companies. -*******************************************************************************/ +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ +#include #include "jma.h" using namespace std; @@ -101,7 +29,7 @@ { const char jma_magic[] = { 'J', 'M', 'A', 0, 'N' }; const unsigned int jma_header_length = 5; - const unsigned char jma_version = 0; + const unsigned char jma_version = 1; const unsigned int jma_version_length = 1; const unsigned int jma_total_header_length = jma_header_length + jma_version_length + UINT_SIZE; @@ -145,9 +73,46 @@ //Seek to before file block so we can read the file block stream.seekg(-((int)file_block_size+UINT_SIZE),ios::end); + //This is needed if the file block is compressed + stringstream decompressed_file_block; + //Pointer to where to read file block from (file or decompressed buffer) + istream *file_block_stream; + + //Setup file info buffer and byte to read with jma_file_info file_info; char byte; + stream.get(byte); + if (!byte) //If file block is compressed + { + //Compressed size isn't counting the byte we just read or the UINT for compressed size + size_t compressed_size = file_block_size - (1+UINT_SIZE); + + //Read decompressed size / true file block size + stream.read((char *)uint_buffer, UINT_SIZE); + file_block_size = charp_to_uint(uint_buffer); + + //Setup access methods for decompression + ISequentialInStream_Istream compressed_data(stream); + ISequentialOutStream_Ostream decompressed_data(decompressed_file_block); + + //Decompress the data + if (!decompress_lzma_7z(compressed_data, compressed_size, decompressed_data, file_block_size)) + { + throw(JMA_DECOMPRESS_FAILED); + } + + //Go to beginning, setup pointer to buffer + decompressed_file_block.seekg(0, ios::beg); + file_block_stream = &decompressed_file_block; + } + else + { + stream.putback(byte); //Putback byte, byte is part of filename, not compressed indicator + file_block_stream = &stream; + } + + //Minimum file name length is 2 bytes, a char and a null //Minimum comment length is 1 byte, a null //There are currently 2 UINTs and 2 USHORTs per file @@ -156,11 +121,11 @@ //First stored in the file block is the file name null terminated file_info.name = ""; - stream.get(byte); + file_block_stream->get(byte); while (byte) { file_info.name += byte; - stream.get(byte); + file_block_stream->get(byte); } //There must be a file name or the file is bad @@ -172,27 +137,27 @@ //Same trick as above for the comment file_info.comment = ""; - stream.get(byte); + file_block_stream->get(byte); while (byte) { file_info.comment += byte; - stream.get(byte); + file_block_stream->get(byte); } //Next is a UINT representing the file's size - stream.read((char *)uint_buffer, UINT_SIZE); + file_block_stream->read((char *)uint_buffer, UINT_SIZE); file_info.size = charp_to_uint(uint_buffer); //Followed by CRC32 - stream.read((char *)uint_buffer, UINT_SIZE); + file_block_stream->read((char *)uint_buffer, UINT_SIZE); file_info.crc32 = charp_to_uint(uint_buffer); //Special USHORT representation of file's date - stream.read((char *)ushort_buffer, USHORT_SIZE); + file_block_stream->read((char *)ushort_buffer, USHORT_SIZE); file_info.date = charp_to_ushort(ushort_buffer); //Special USHORT representation of file's time - stream.read((char *)ushort_buffer, USHORT_SIZE); + file_block_stream->read((char *)ushort_buffer, USHORT_SIZE); file_info.time = charp_to_ushort(ushort_buffer); file_info.buffer = 0; //Pointing to null till we decompress files @@ -212,7 +177,7 @@ compressed_buffer = 0; stream.open(compressed_file_name, ios::in | ios::binary); - if (!stream) + if (!stream.is_open()) { throw(JMA_NO_OPEN); } @@ -227,7 +192,7 @@ //Not the cleanest code but logical stream.read((char *)header, 5); - if (*header == 0) //Version 0 + if (*header <= jma_version) { chunk_size = charp_to_uint(header+1); //Chunk size is a UINT that follows version # retrieve_file_block(); @@ -241,7 +206,7 @@ //Destructor only has to close the stream if neccesary jma_open::~jma_open() { - if (stream) + if (stream.is_open()) { stream.close(); } @@ -270,11 +235,14 @@ void jma_open::chunk_seek(unsigned int chunk_num) throw(jma_errors) { //Check the stream is open - if (!stream) + if (!stream.is_open()) { throw(JMA_NO_OPEN); } + //Clear possible errors so the seek will work + stream.clear(); + //Move forward over header stream.seekg(jma_total_header_length, ios::beg); @@ -295,7 +263,7 @@ vector jma_open::get_all_files(unsigned char *buffer) throw(jma_errors) { //If there's no stream we can't read from it, so exit - if (!stream) + if (!stream.is_open()) { throw(JMA_NO_OPEN); } @@ -352,16 +320,35 @@ throw(JMA_DECOMPRESS_FAILED); } delete[] compressed_buffer; + + if (remaining_size <= chunk_size) //If we just decompressed the remainder + { + break; + } } } else //Solidly compressed JMA { unsigned char int4_buffer[UINT_SIZE]; - //read the size of the compressed data + //Read the size of the compressed data stream.read((char *)int4_buffer, UINT_SIZE); size_t compressed_size = charp_to_uint(int4_buffer); + //Get decompressed size + size_t size = get_total_size(files); + + //Setup access methods for decompression + ISequentialInStream_Istream compressed_data(stream); + ISequentialOutStream_Array decompressed_data(reinterpret_cast(decompressed_buffer), size); + + //Decompress the data + if (!decompress_lzma_7z(compressed_data, compressed_size, decompressed_data, size)) + { + throw(JMA_DECOMPRESS_FAILED); + } + + /* //Allocate memory of the right size to hold the compressed data in the JMA try { @@ -386,13 +373,14 @@ throw(JMA_BAD_FILE); } - //decompress the data + //Decompress the data if (!decompress_lzma_7z(compressed_buffer, compressed_size, decompressed_buffer, size)) { delete[] compressed_buffer; throw(JMA_DECOMPRESS_FAILED); } delete[] compressed_buffer; + */ } vector file_pointers; @@ -413,7 +401,7 @@ //Extracts the file with a given name found in the archive to the given buffer void jma_open::extract_file(string& name, unsigned char *buffer) throw(jma_errors) { - if (!stream) + if (!stream.is_open()) { throw(JMA_NO_OPEN); } @@ -495,15 +483,13 @@ delete[] comp_buffer; throw(JMA_DECOMPRESS_FAILED); } - else - { - size_t copy_amount = our_file_size-i > chunk_size ? chunk_size : our_file_size-i; - copy_amount -= first_chunk_offset; + + size_t copy_amount = our_file_size-i > chunk_size-first_chunk_offset ? chunk_size-first_chunk_offset : our_file_size-i; + memcpy(buffer+i, decomp_buffer+first_chunk_offset, copy_amount); - first_chunk_offset = 0; + first_chunk_offset = 0; //Set to zero since this is only for the first iteration i += copy_amount; } - } delete[] comp_buffer; } else //Solid JMA @@ -526,6 +512,42 @@ } } + bool jma_open::is_solid() + { + return(chunk_size ? false : true); + } + + const char *jma_error_text(jma_errors error) + { + switch (error) + { + case JMA_NO_CREATE: + return("JMA could not be created"); + + case JMA_NO_MEM_ALLOC: + return("Memory for JMA could be allocated"); + + case JMA_NO_OPEN: + return("JMA could not be opened"); + + case JMA_BAD_FILE: + return("Invalid/Corrupt JMA"); + + case JMA_UNSUPPORTED_VERSION: + return("JMA version not supported"); + + case JMA_COMPRESS_FAILED: + return("JMA compression failed"); + + case JMA_DECOMPRESS_FAILED: + return("JMA decompression failed"); + + case JMA_FILE_NOT_FOUND: + return("File not found in JMA"); + } + return("Unknown error"); + } + } diff -NaHudr snes9x-1.43-src/snes9x/jma/jma.h snes9x-improvement7-src-dehacked/snes9x/jma/jma.h --- snes9x-1.43-src/snes9x/jma/jma.h 2004-12-31 00:15:49.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/jma/jma.h 2005-03-21 14:00:47.000000000 +0200 @@ -1,103 +1,38 @@ -/******************************************************************************* - Snes9x - Portable Super Nintendo Entertainment System (TM) emulator. - - (c) Copyright 1996 - 2002 Gary Henderson (gary.henderson@ntlworld.com) and - Jerremy Koot (jkoot@snes9x.com) - - (c) Copyright 2001 - 2004 John Weidman (jweidman@slip.net) - - (c) Copyright 2002 - 2004 Brad Jorsch (anomie@users.sourceforge.net), - funkyass (funkyass@spam.shaw.ca), - Joel Yliluoma (http://iki.fi/bisqwit/) - Kris Bleakley (codeviolation@hotmail.com), - Matthew Kendora, - Nach (n-a-c-h@users.sourceforge.net), - Peter Bortas (peter@bortas.org) and - zones (kasumitokoduck@yahoo.com) - - C4 x86 assembler and some C emulation code - (c) Copyright 2000 - 2003 zsKnight (zsknight@zsnes.com), - _Demo_ (_demo_@zsnes.com), and Nach - - C4 C++ code - (c) Copyright 2003 Brad Jorsch - - DSP-1 emulator code - (c) Copyright 1998 - 2004 Ivar (ivar@snes9x.com), _Demo_, Gary Henderson, - John Weidman, neviksti (neviksti@hotmail.com), - Kris Bleakley, Andreas Naive - - 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 - 2004 zsKnight, pagefault (pagefault@zsnes.com) and - Kris Bleakley - 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-DD1 C emulator code - (c) Copyright 2003 Brad Jorsch with research by - Andreas Naive and John Weidman - - S-RTC C emulator code - (c) Copyright 2001 John Weidman - - ST010 C++ emulator code - (c) Copyright 2003 Feather, Kris Bleakley, John Weidman and Matthew Kendora - - Super FX x86 assembler emulator code - (c) Copyright 1998 - 2003 zsKnight, _Demo_, and pagefault - - Super FX C emulator code - (c) Copyright 1997 - 1999 Ivar, Gary Henderson and John Weidman - - - SH assembler code partly based on x86 assembler code - (c) Copyright 2002 - 2004 Marcus Comstedt (marcus@mc.pp.se) - - JMA compressed file support - (c) Copyright 2004 NSRT Team (http://nsrt.edgeemu.com) - - 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. +/* +Copyright (C) 2005 NSRT Team ( http://nsrt.edgeemu.com ) - 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. +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either +version 2 of the License, or (at your option) any later +version. - Super NES and Super Nintendo Entertainment System are trademarks of - Nintendo Co., Limited and its subsidiary companies. -*******************************************************************************/ +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ #ifndef JMA_H #define JMA_H #include -#include #include #include +#if (((defined(_MSC_VER) && _MSC_VER >= 1300)) || defined(__MINGW32__)) + // both MINGW and VS.NET use fstream instead of fstream.h which is deprecated + #include + using namespace std; +#else + // for VC++ 6 + #include +#endif + namespace JMA { enum jma_errors { JMA_NO_CREATE, JMA_NO_MEM_ALLOC, JMA_NO_OPEN, JMA_BAD_FILE, @@ -145,6 +80,7 @@ std::vector get_files_info(); std::vector get_all_files(unsigned char *) throw(jma_errors); void extract_file(std::string& name, unsigned char *) throw(jma_errors); + bool is_solid(); private: std::ifstream stream; @@ -157,5 +93,6 @@ void retrieve_file_block() throw(jma_errors); }; + const char *jma_error_text(jma_errors); } #endif diff -NaHudr snes9x-1.43-src/snes9x/jma/lencoder.h snes9x-improvement7-src-dehacked/snes9x/jma/lencoder.h --- snes9x-1.43-src/snes9x/jma/lencoder.h 2004-12-31 00:15:49.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/jma/lencoder.h 2005-03-21 14:00:47.000000000 +0200 @@ -1,4 +1,5 @@ /* +Copyright (C) 2005 NSRT Team ( http://nsrt.edgeemu.com ) Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) Copyright (C) 2001-4 Igor Pavlov ( http://www.7-zip.org ) diff -NaHudr snes9x-1.43-src/snes9x/jma/lzma.h snes9x-improvement7-src-dehacked/snes9x/jma/lzma.h --- snes9x-1.43-src/snes9x/jma/lzma.h 2004-12-31 00:15:49.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/jma/lzma.h 2005-03-21 14:00:47.000000000 +0200 @@ -1,4 +1,5 @@ /* +Copyright (C) 2005 NSRT Team ( http://nsrt.edgeemu.com ) Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) Copyright (C) 2001-4 Igor Pavlov ( http://www.7-zip.org ) diff -NaHudr snes9x-1.43-src/snes9x/jma/lzmadec.cpp snes9x-improvement7-src-dehacked/snes9x/jma/lzmadec.cpp --- snes9x-1.43-src/snes9x/jma/lzmadec.cpp 2004-12-31 00:15:49.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/jma/lzmadec.cpp 2005-03-21 14:00:47.000000000 +0200 @@ -1,5 +1,5 @@ /* -Copyright (C) 2004 NSRT Team ( http://nsrt.edgeemu.com ) +Copyright (C) 2005 NSRT Team ( http://nsrt.edgeemu.com ) Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) Copyright (C) 2001-4 Igor Pavlov ( http://www.7-zip.org ) diff -NaHudr snes9x-1.43-src/snes9x/jma/portable.h snes9x-improvement7-src-dehacked/snes9x/jma/portable.h --- snes9x-1.43-src/snes9x/jma/portable.h 2004-12-31 00:15:49.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/jma/portable.h 2005-03-21 14:00:47.000000000 +0200 @@ -2,22 +2,22 @@ Copyright (C) 2004 NSRT Team ( http://nsrt.edgeemu.com ) Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either +version 2 of the License, or (at your option) any later +version. -This library is distributed in the hope that it will be useful, +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Lesser General Public License for more details. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ - #ifndef __PORTABLE_H #define __PORTABLE_H @@ -29,9 +29,8 @@ typedef unsigned short UINT16; typedef long INT32; typedef unsigned long UINT32; -typedef INT32 INT64; -typedef UINT32 UINT64; - +typedef long long INT64; +typedef unsigned long long UINT64; typedef UINT8 BYTE; typedef UINT16 WORD; diff -NaHudr snes9x-1.43-src/snes9x/jma/s9x-jma.cpp snes9x-improvement7-src-dehacked/snes9x/jma/s9x-jma.cpp --- snes9x-1.43-src/snes9x/jma/s9x-jma.cpp 2004-12-31 00:15:49.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/jma/s9x-jma.cpp 2005-03-20 23:46:22.000000000 +0200 @@ -1,134 +1,134 @@ -/******************************************************************************* - Snes9x - Portable Super Nintendo Entertainment System (TM) emulator. - - (c) Copyright 1996 - 2002 Gary Henderson (gary.henderson@ntlworld.com) and - Jerremy Koot (jkoot@snes9x.com) - - (c) Copyright 2001 - 2004 John Weidman (jweidman@slip.net) - - (c) Copyright 2002 - 2004 Brad Jorsch (anomie@users.sourceforge.net), - funkyass (funkyass@spam.shaw.ca), - Joel Yliluoma (http://iki.fi/bisqwit/) - Kris Bleakley (codeviolation@hotmail.com), - Matthew Kendora, - Nach (n-a-c-h@users.sourceforge.net), - Peter Bortas (peter@bortas.org) and - zones (kasumitokoduck@yahoo.com) - - C4 x86 assembler and some C emulation code - (c) Copyright 2000 - 2003 zsKnight (zsknight@zsnes.com), - _Demo_ (_demo_@zsnes.com), and Nach - - C4 C++ code - (c) Copyright 2003 Brad Jorsch - - DSP-1 emulator code - (c) Copyright 1998 - 2004 Ivar (ivar@snes9x.com), _Demo_, Gary Henderson, - John Weidman, neviksti (neviksti@hotmail.com), - Kris Bleakley, Andreas Naive - - 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 - 2004 zsKnight, pagefault (pagefault@zsnes.com) and - Kris Bleakley - 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-DD1 C emulator code - (c) Copyright 2003 Brad Jorsch with research by - Andreas Naive and John Weidman - - S-RTC C emulator code - (c) Copyright 2001 John Weidman - - ST010 C++ emulator code - (c) Copyright 2003 Feather, Kris Bleakley, John Weidman and Matthew Kendora - - Super FX x86 assembler emulator code - (c) Copyright 1998 - 2003 zsKnight, _Demo_, and pagefault - - Super FX C emulator code - (c) Copyright 1997 - 1999 Ivar, Gary Henderson and John Weidman - - - SH assembler code partly based on x86 assembler code - (c) Copyright 2002 - 2004 Marcus Comstedt (marcus@mc.pp.se) - - JMA compressed file support - (c) Copyright 2004 NSRT Team (http://nsrt.edgeemu.com) - - 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 "../memmap.h" - -#include -using namespace std; - -#include "s9x-jma.h" -#include "jma.h" - -size_t load_jma_file(const char *filename, unsigned char *buffer) -{ - try - { - JMA::jma_open JMAFile(filename); - vector file_info = JMAFile.get_files_info(); - - string our_file_name; - size_t our_file_size = 0; - - for (vector::iterator i = file_info.begin(); i != file_info.end(); i++) - { - //Check for valid ROM based on size - if ((i->size <= CMemory::MAX_ROM_SIZE+512) && (i->size > our_file_size)) - { - our_file_name = i->name; - our_file_size = i->size; - } - } - - if (!our_file_size) - { - return(0); - } - - JMAFile.extract_file(our_file_name, buffer); - - return(our_file_size); - } - catch (JMA::jma_errors jma_error) - { - return(0); - } -} - +/******************************************************************************* + Snes9x - Portable Super Nintendo Entertainment System (TM) emulator. + + (c) Copyright 1996 - 2002 Gary Henderson (gary.henderson@ntlworld.com) and + Jerremy Koot (jkoot@snes9x.com) + + (c) Copyright 2001 - 2004 John Weidman (jweidman@slip.net) + + (c) Copyright 2002 - 2004 Brad Jorsch (anomie@users.sourceforge.net), + funkyass (funkyass@spam.shaw.ca), + Joel Yliluoma (http://iki.fi/bisqwit/) + Kris Bleakley (codeviolation@hotmail.com), + Matthew Kendora, + Nach (n-a-c-h@users.sourceforge.net), + Peter Bortas (peter@bortas.org) and + zones (kasumitokoduck@yahoo.com) + + C4 x86 assembler and some C emulation code + (c) Copyright 2000 - 2003 zsKnight (zsknight@zsnes.com), + _Demo_ (_demo_@zsnes.com), and Nach + + C4 C++ code + (c) Copyright 2003 Brad Jorsch + + DSP-1 emulator code + (c) Copyright 1998 - 2004 Ivar (ivar@snes9x.com), _Demo_, Gary Henderson, + John Weidman, neviksti (neviksti@hotmail.com), + Kris Bleakley, Andreas Naive + + 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 - 2004 zsKnight, pagefault (pagefault@zsnes.com) and + Kris Bleakley + 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-DD1 C emulator code + (c) Copyright 2003 Brad Jorsch with research by + Andreas Naive and John Weidman + + S-RTC C emulator code + (c) Copyright 2001 John Weidman + + ST010 C++ emulator code + (c) Copyright 2003 Feather, Kris Bleakley, John Weidman and Matthew Kendora + + Super FX x86 assembler emulator code + (c) Copyright 1998 - 2003 zsKnight, _Demo_, and pagefault + + Super FX C emulator code + (c) Copyright 1997 - 1999 Ivar, Gary Henderson and John Weidman + + + SH assembler code partly based on x86 assembler code + (c) Copyright 2002 - 2004 Marcus Comstedt (marcus@mc.pp.se) + + JMA compressed file support + (c) Copyright 2004 NSRT Team (http://nsrt.edgeemu.com) + + 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 "../memmap.h" + +#include +using namespace std; + +#include "s9x-jma.h" +#include "jma.h" + +size_t load_jma_file(const char *filename, unsigned char *buffer) +{ + try + { + JMA::jma_open JMAFile(filename); + vector file_info = JMAFile.get_files_info(); + + string our_file_name; + size_t our_file_size = 0; + + for (vector::iterator i = file_info.begin(); i != file_info.end(); i++) + { + //Check for valid ROM based on size + if ((i->size <= CMemory::MAX_ROM_SIZE+512) && (i->size > our_file_size)) + { + our_file_name = i->name; + our_file_size = i->size; + } + } + + if (!our_file_size) + { + return(0); + } + + JMAFile.extract_file(our_file_name, buffer); + + return(our_file_size); + } + catch (JMA::jma_errors jma_error) + { + return(0); + } +} + diff -NaHudr snes9x-1.43-src/snes9x/logger.cpp snes9x-improvement7-src-dehacked/snes9x/logger.cpp --- snes9x-1.43-src/snes9x/logger.cpp 1970-01-01 02:00:00.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/logger.cpp 2005-04-09 00:59:26.000000000 +0300 @@ -0,0 +1,122 @@ +#include +#include +#include "logger.h" +#include "snes9x.h" +#include "soundux.h" +#include "ppu.h" +#include "movie.h" + +int dumpstreams = 0; +int maxframes = -1; + +static int resetno = 0; +static int framecounter = 0; + +static int drift = 0; + +FILE *video=NULL, *audio=NULL; +char autodemo[128] = ""; + +void ResetLogger() +{ + char buffer[256*224*4]; + + if (!dumpstreams) + return; + + framecounter = 0; + drift=0; + + if (video) + fclose(video); + if (audio) + fclose(audio); + + sprintf(buffer, "videostream%d.dat", resetno); + video = fopen(buffer, "wb"); + if (!video) + { + printf("Opening %s failed. Logging cancelled.\n", buffer); + return; + } + + sprintf(buffer, "audiostream%d.dat", resetno); + audio = fopen(buffer, "wb"); + if (!audio) + { + printf("Opening %s failed. Logging cancelled.\n", buffer); + fclose(video); + return; + } + + char *logo = getenv("LOGO"); + if (!logo) + logo = "logo.dat"; + FILE *l = fopen(logo, "rb"); + if (l) + { + const int soundsize = (so.sixteen_bit ? 2 : 1)*(so.stereo?2:1)*so.playback_rate * Settings.FrameTime / 1000000; + printf("Soundsize: %d\n", soundsize); + while (!feof(l)) + { + if (fread(buffer, 1024,224, l) != 224) + break; + VideoLogger(buffer, 256, 224, 24); + memset(buffer, 0, soundsize); + AudioLogger(buffer, soundsize); + } + fclose(l); + } + resetno++; +} + + +void VideoLogger(void *pixels, int width, int height, int depth) +{ + int fc = S9xMovieGetFrameCounter(); + if (fc > 0) + framecounter = fc; + else + framecounter++; + + if (video) + { + fwrite(pixels, 256*4, 224, video); + fflush(video); + fflush(audio); + drift++; + + if (maxframes > 0 && __builtin_expect(framecounter >= maxframes, 0)) + { + printf("-maxframes hit\ndrift:%d\n",drift); + S9xExit(); + } + + } + + if (Settings.DisplayPressedKeys) + { + fprintf(stderr, "%d %s %s %s %s %s %s %c%c%c%c%c%c \r", framecounter, + IPPU.Joypads[0] & SNES_START_MASK ? "Start" : "_____", + IPPU.Joypads[0] & SNES_SELECT_MASK ? "Select" : "______", + IPPU.Joypads[0] & SNES_UP_MASK ? "Up" : "__", + IPPU.Joypads[0] & SNES_DOWN_MASK ? "Down" : "____", + IPPU.Joypads[0] & SNES_LEFT_MASK ? "Left" : "____", + IPPU.Joypads[0] & SNES_RIGHT_MASK ? "Right" : "_____", + IPPU.Joypads[0] & SNES_A_MASK ? 'A':'_', + IPPU.Joypads[0] & SNES_B_MASK ? 'B':'_', + IPPU.Joypads[0] & SNES_X_MASK ? 'X':'_', + IPPU.Joypads[0] & SNES_Y_MASK ? 'Y':'_', + IPPU.Joypads[0] & SNES_TL_MASK ? 'L':'_', + IPPU.Joypads[0] & SNES_TR_MASK ? 'R':'_'); + + } +} + + +void AudioLogger(void *samples, int length) +{ + if (audio) + fwrite(samples, 1, length, audio); + drift--; +} diff -NaHudr snes9x-1.43-src/snes9x/logger.h snes9x-improvement7-src-dehacked/snes9x/logger.h --- snes9x-1.43-src/snes9x/logger.h 1970-01-01 02:00:00.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/logger.h 2005-04-09 00:59:27.000000000 +0300 @@ -0,0 +1,9 @@ +extern int dumpstreams; +extern char autodemo[128]; +extern int maxframes; +extern int logger_pivot; + + +void ResetLogger(); +void VideoLogger(void *pixels, int width, int height, int depth); +void AudioLogger(void *samples, int length); diff -NaHudr snes9x-1.43-src/snes9x/makefile.mgw snes9x-improvement7-src-dehacked/snes9x/makefile.mgw --- snes9x-1.43-src/snes9x/makefile.mgw 1970-01-01 02:00:00.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/makefile.mgw 2005-03-21 14:00:47.000000000 +0200 @@ -0,0 +1,245 @@ +ZSNESFX=1 +ZSNESC4=1 +ASMCPU=1 +#SPC700ASM=1 +#NETPLAY=1 +UNZIP=1 +JMA=1 +#GLIDE=1 +OPENGL=1 +ASMKREED=1 +SDD1_DECOMP=1 +#SDD1_VERIFY=0 +CHEATS=1 +2XSAI=1 +SCREENSHOTS=1 + +ifdef ZSNESFX + FXOBJ=i386/fxemu2b.o i386/fxemu2.o i386/fxemu2c.o i386/fxtable.o \ + i386/sfxproc.o i386/ZSNES.O + FXDEFINES=-DZSNES_FX -DEXECUTE_SUPERFX_PER_LINE + FXDEPENDS=zsnes_fx + FXNO_DEPENDS=c_fx +else + FXOBJ=fxinst.o fxemu.o fxdbg.o + FXDEFINES=-DEXECUTE_SUPERFX_PER_LINE + FXDEPENDS=c_fx + FXNO_DEPENDS=zsnes_fx +endif + +ifdef ZSNESC4 + C4OBJ=i386/C4.O i386/zsnesc4.o c4.o + C4DEFINES=-DZSNES_C4 + C4DEPENDS=zsnes_c4 + C4NO_DEPENDS=c_c4 +else + C4OBJ=c4.o c4emu.o + C4DEFINES= + C4DEPENDS=c_c4 + C4NO_DEPENDS=zsnes_c4 +endif + +ifdef SPC700ASM + SOUNDOBJ=spctool/spc700.o spctool/dsp.o spctool.o spctool/soundmod.o spc.o + SOUNDDEFINES=-DSPCTOOL +else + SOUNDOBJ=spc700.o soundux.o apu.o i386/SPC.O + SOUNDDEFINES=-DSPC700_C +endif + +ifdef ASMCPU + CPUOBJ=i386/cpuops.o i386/cpuexec.o i386/sa1ops.o +else + CPUOBJ=cpuops.o cpuexec.o sa1cpu.o +endif + +PLATFORMOBJ=win32.o ../directx.o ../render.o ../wsnes9x.o \ + ../auxmath.o ../AVIOutput.o ../InputCustom.o ../0snes9x.o \ + +ifdef CHEATS + CHEATOBJ=cheats.o cheats2.o +endif + +SNAPOBJ=snaporig.o snapshot.o +MOVIEOBJ=movie.o + +ifdef SCREENSHOTS + SCREENSHOTOBJ=screenshot.o + SHOTDEFINES=-DHAVE_LIBPNG + LDLIBS=-lpng +endif + +ifdef 2XSAI + ifdef ASMKREED + KREEDOBJ=i386/2XSAIMMX.O i386/bilinear.o 2xsai.o + KREEDDEFINES=-DMMX + else + KREEDOBJ=2xsai.o + endif +endif + +ifdef SDD1_DECOMP + SDD1OBJ=sdd1emu.o + ifdef SDD1_VERIFY + SDD1DEFINES=-DSDD1_DECOMP -DSDD1_VERIFY + else + SDD1DEFINES=-DSDD1_DECOMP + endif +endif + +SPC7110OBJ=spc7110.o +OBC1OBJ=obc1.o +SETAOBJ=seta.o seta010.o seta011.o seta018.o + +OBJECTS=$(CPUOBJ) $(SOUNDOBJ) apudebug.o $(FXOBJ) $(C4OBJ) \ + cpu.o sa1.o debug.o sdd1.o tile.o srtc.o gfx.o memmap.o clip.o \ + dsp1.o ppu.o dma.o snes9x.o data.o globals.o \ + $(SPC7110OBJ) $(OBC1OBJ) $(SETAOBJ) $(KREEDOBJ) $(SDD1OBJ) \ + $(CHEATOBJ) $(PLATFORMOBJ) $(SNAPOBJ) $(SCREENSHOTOBJ) $(MOVIEOBJ) + +ifdef NETPLAY + OBJECTS+=netplay.o server.o + NETPLAYDEFINES=-DNETPLAY_SUPPORT +endif + +ifdef UNZIP + OBJECTS+=loadzip.o unzip/unzip.o unzip/explode.o unzip/unreduce.o unzip/unshrink.o + UNZIPDEFINES=-DUNZIP_SUPPORT +endif + +ifdef JMA +OBJECTS+=jma/s9x-jma.o jma/7zlzma.o jma/crc32.o jma/iiostrm.o jma/inbyte.o \ + jma/jma.o jma/lzma.o jma/lzmadec.o jma/winout.o +JMADEFINES=-DJMA_SUPPORT -fexceptions +endif + +ifdef GLIDE + GLIDEDEFINES=-DUSE_GLIDE + GLIDELIBS=-lglide2x + GLIDEDEPENDS=use_glide + GLIDENO_DEPENDS=no_glide +else + GLIDEDEPENDS=no_glide + GLIDENO_DEPENDS=use_glide +endif + +ifdef OPENGL + OPENGLDEFINES=-DUSE_OPENGL + OPENGLLIBS=-lglu32 -lopengl32 + OPENGLDEPENDS=use_opengl + OPENGLNO_DEPENDS=no_opengl +else + OPENGLDEPENDS=no_opengl + OPENGLNO_DEPENDS=use_opengl +endif + +JOYDEFINES=-DJOYSTICK_SUPPORT + +AUDIODEFINES=-DFMOD_SUPPORT +SOUNDENGINE=-lfmod -lmingw32 + +CCC=c++ +CC=gcc +GASM=c++ +NASM=nasmw + +INCLUDES=-I. -Ii386 -Iunzip -I/mingw/include/FMOD +LDLIBS+=-lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -lcomctl32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -ladvapi32 -lwsock32 -lwinmm -lddraw -ldsound -ldxguid -lvfw32 -lz + +OPTIMISE=-O1 -mtune=pentium -fomit-frame-pointer -fno-exceptions -Wno-unused-parameter -mwindows + +CCFLAGS= \ + -DZLIB \ + -DVAR_CYCLES \ + -DCPU_SHUTDOWN \ + -DSPC700_SHUTDOWN \ + -DSDD1_DECOMP \ + -DHAVE_STRINGS_H \ + -DOLD_COLOUR_BLENDING \ + -DCORRECT_VRAM_READS \ + -DJP_FIX \ + -D__WIN32__ \ + $(FXDEFINES) \ + $(C4DEFINES) \ + $(SOUNDDEFINES) \ + $(NETPLAYDEFINES) \ + $(UNZIPDEFINES) \ + $(JMADEFINES) \ + $(GLIDEDEFINES) \ + $(OPENGLDEFINES) \ + $(SHOTDEFINES) \ + $(KREEDDEFINES) \ + $(SDD1DEFINES) \ + $(JOYDEFINES) \ + $(AUDIODEFINES) + +CFLAGS=$(CCFLAGS) + +.SUFFIXES: .o .cpp .c .cc .h .m .i .S .asm .obj .O .CPP .C .ASM + +all: offsets.exe snes9x.exe + +$(FXDEPENDS): + cp offsets.exe $(FXDEPENDS) + rm -f $(FXNO_DEPENDS) + +$(C4DEPENDS): + cp offsets.exe $(C4DEPENDS) + rm -f $(C4_NODEPENDS) + +offsets.exe: offsets.o + $(CCC) $(INCLUDES) -o $@ offsets.o + offsets.exe > i386/offsets.h + +../0snes9x.o: ../0snes9x.rc ../resource.h + windres --use-temp-file -I../ -o ../0snes9x.o ../0snes9x.rc + +snes9x.exe: $(OBJECTS) $(MINGWOBJECTS) + $(CCC) $(INCLUDES) -Wl,--subsystem,windows -o $@ -s $(OBJECTS) $(LDLIBS) $(SOUNDENGINE) $(OPENGLLIBS) + +cpu.o: + $(CCC) $(INCLUDES) -c $(OPTIMISE) $(CCFLAGS) cpu.cpp -o $@ + +sa1cpu.o: + $(CCC) $(INCLUDES) -c $(OPTIMISE) $(CCFLAGS) sa1cpu.cpp -o $@ + +.cpp.o: + $(CCC) $(INCLUDES) -c $(OPTIMISE) $(CCFLAGS) $*.cpp -o $@ + +.c.o: + $(CC) $(INCLUDES) -c $(OPTIMISE) $(CFLAGS) $*.c -o $@ + +.cpp.S: + $(GASM) $(INCLUDES) -S $(OPTIMISE) $(CCFLAGS) $*.cpp -o $@ + +.cpp.i: + $(GASM) $(INCLUDES) -E $(OPTIMISE) $(CCFLAGS) $*.cpp -o $@ + +.S.o: + $(GASM) $(INCLUDES) -c -D__DJGCC -x assembler-with-cpp $(OPTIMISE) $(CCFLAGS) $*.S -o $@ + +.S.i: + $(GASM) $(INCLUDES) -c -E $(OPTIMISE) $(CCFLAGS) $*.S -o $@ + +.asm.o: + $(NASM) -d__DJGPP__=1 -f win32 $(FXDEFINES) -i . -i i386 -o $@ $*.asm + +.obj.o: + cp $*.obj $*.o + +.CPP.O: + $(CCC) $(INCLUDES) -c $(OPTIMISE) $(CCFLAGS) $*.CPP -o $@ + +.C.O: + $(CC) $(INCLUDES) -c $(OPTIMISE) $(CFLAGS) $*.C -o $@ + +.ASM.O: + $(NASM) -d__DJGPP__=1 -f win32 $(FXDEFINES) -i . -i i386 -o $@ $*.ASM -o $@ + +clean: + rm -f $(FXDEPENDS) $(C4DEPENDS) $(FXNO_DEPENDS) $(C4NO_DEPENDS) + rm -f $(OBJECTS) *.o i386/*.o i386/offsets.h offsets.o + rm -f snes9x.exe offsets.exe + +compress: + upx snes9x.exe diff -NaHudr snes9x-1.43-src/snes9x/memmap.cpp snes9x-improvement7-src-dehacked/snes9x/memmap.cpp --- snes9x-1.43-src/snes9x/memmap.cpp 2004-12-31 00:15:47.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/memmap.cpp 2005-04-09 00:59:27.000000000 +0300 @@ -1679,6 +1679,9 @@ bool8 CMemory::SaveSRAM (const char *filename) { +/// if(!CPU.SRAMModified) +/// return TRUE; + if(Settings.SuperFX && Memory.ROMType < 0x15) return TRUE; if(Settings.SA1 && Memory.ROMType == 0x34) diff -NaHudr snes9x-1.43-src/snes9x/movie.cpp snes9x-improvement7-src-dehacked/snes9x/movie.cpp --- snes9x-1.43-src/snes9x/movie.cpp 2004-12-31 00:15:47.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/movie.cpp 2005-04-09 00:59:27.000000000 +0300 @@ -117,6 +117,7 @@ #define SMV_MAGIC 0x1a564d53 // SMV0x1a #define SMV_VERSION 1 #define SMV_HEADER_SIZE 32 +#define SMV_EXTRAROMINFO_SIZE (2+sizeof(uint32)+sizeof(char)*23+1) #define CONTROLLER_DATA_SIZE 2 #define BUFFER_GROWTH_SIZE 4096 @@ -140,13 +141,17 @@ uint32 RerecordCount; uint8 ControllersMask; uint8 Opts; + uint8 SyncFlags; bool8 ReadOnly; uint32 BytesPerFrame; uint8* InputBuffer; uint32 InputBufferSize; uint8* InputBufferPtr; - bool8 FrameDisplay; - char FrameDisplayString[256]; +/// bool8 FrameDisplay; +/// char FrameDisplayString[256]; + + uint32 ROMCRC32; + char ROMName [23]; } Movie; /* @@ -241,7 +246,8 @@ movie->ControllersMask=*ptr++; movie->Opts=*ptr++; - ptr += 2; + ptr ++; // reserved byte + movie->SyncFlags=*ptr++; // previously reserved byte movie->SaveStateOffset=Read32(ptr); movie->ControllerDataOffset=Read32(ptr); @@ -249,6 +255,33 @@ return SUCCESS; } +static int read_movie_extrarominfo(FILE* fd, SMovie* movie) +{ + if((movie->SyncFlags & MOVIE_SYNC_HASROMINFO) != 0) + { + fseek(fd, movie->SaveStateOffset - SMV_EXTRAROMINFO_SIZE, SEEK_SET); + + uint8 extraRomInfo[SMV_EXTRAROMINFO_SIZE]; + if(fread(extraRomInfo, 1, SMV_EXTRAROMINFO_SIZE, fd) != SMV_EXTRAROMINFO_SIZE) + return WRONG_FORMAT; + + const uint8* ptr=extraRomInfo; + + ptr ++; // zero byte + ptr ++; // zero byte + ptr ++; // zero byte + movie->ROMCRC32=Read32(ptr); + strncpy(movie->ROMName,(const char*)ptr,23); ptr += 23; + } + else + { + movie->ROMCRC32=Memory.ROMCRC32; + strncpy(movie->ROMName,(const char*)Memory.ROMName,23); + } + + return SUCCESS; +} + static void write_movie_header(FILE* fd, const SMovie* movie) { uint8 header[SMV_HEADER_SIZE]; @@ -262,7 +295,8 @@ *ptr++=movie->ControllersMask; *ptr++=movie->Opts; - *ptr++=0; + *ptr++=0; // reserved byte + //*ptr++=movie->SyncFlags; // previously reserved byte *ptr++=0; Write32(movie->SaveStateOffset, ptr); @@ -271,8 +305,52 @@ fwrite(header, 1, SMV_HEADER_SIZE, fd); } +static void write_movie_extrarominfo(FILE* fd, const SMovie* movie) +{ + if((movie->SyncFlags & MOVIE_SYNC_HASROMINFO) != 0) // should be true... + { + uint8 extraRomInfo [SMV_EXTRAROMINFO_SIZE]; + uint8* ptr = extraRomInfo; + + *ptr++=0; // zero byte + *ptr++=0; // zero byte + *ptr++=0; // zero byte + Write32(movie->ROMCRC32, ptr); + strncpy((char*)ptr,movie->ROMName,23); ptr += 23; + + fwrite(extraRomInfo, 1, SMV_EXTRAROMINFO_SIZE, fd); + } +} + static void flush_movie() { + if((Movie.SyncFlags & MOVIE_SYNC_HASROMINFO) == 0) // if we have to insert the ROM info into a movie made by a previous version + { + fseek(Movie.File, 0, SEEK_END); + long oldFileSize = (uint32)ftell(Movie.File); + + // copy whole movie into temporary memory + char * tempFile = (char*)malloc(sizeof(char)*oldFileSize); + fseek(Movie.File, 0, SEEK_SET); + fread(tempFile, 1, oldFileSize, Movie.File); + + // write back part of the movie offset by SMV_EXTRAROMINFO_SIZE + fseek(Movie.File, Movie.SaveStateOffset + SMV_EXTRAROMINFO_SIZE, SEEK_SET); + fwrite(tempFile + Movie.SaveStateOffset, 1, oldFileSize - Movie.SaveStateOffset, Movie.File); + + // free the temporary movie in memory + free(tempFile); + + // update flags and offset amounts + Movie.SyncFlags |= MOVIE_SYNC_HASROMINFO; + Movie.SaveStateOffset += SMV_EXTRAROMINFO_SIZE; + Movie.ControllerDataOffset += SMV_EXTRAROMINFO_SIZE; + + // write the extra rom info into the newly inserted space in the file between the metadata and the save data + fseek(Movie.File, Movie.SaveStateOffset - SMV_EXTRAROMINFO_SIZE, SEEK_SET); + write_movie_extrarominfo(Movie.File, &Movie); + } + fseek(Movie.File, 0, SEEK_SET); write_movie_header(Movie.File, &Movie); fseek(Movie.File, Movie.ControllerDataOffset, SEEK_SET); @@ -376,6 +454,8 @@ return result; } + read_movie_extrarominfo(fd, &Movie); + fn=dup(fileno(fd)); fclose(fd); @@ -428,7 +508,7 @@ return SUCCESS; } -int S9xMovieCreate (const char* filename, uint8 controllers_mask, uint8 opts, const wchar_t* metadata, int metadata_length) +int S9xMovieCreate (const char* filename, uint8 controllers_mask, uint8 opts, uint8 syncFlags, const wchar_t* metadata, int metadata_length) { FILE* fd; STREAM stream; @@ -451,10 +531,11 @@ Movie.MovieId=(uint32)time(NULL); Movie.RerecordCount=0; Movie.MaxFrame=0; - Movie.SaveStateOffset=SMV_HEADER_SIZE+(sizeof(uint16)*metadata_length); + Movie.SaveStateOffset=SMV_HEADER_SIZE+(sizeof(uint16)*metadata_length) + SMV_EXTRAROMINFO_SIZE; Movie.ControllerDataOffset=0; Movie.ControllersMask=controllers_mask; Movie.Opts=opts; + Movie.SyncFlags=syncFlags; if(Settings.PAL) { Movie.Opts |= MOVIE_OPT_PAL; @@ -464,8 +545,14 @@ Movie.Opts &= ~MOVIE_OPT_PAL; } + // extra rom info + Movie.ROMCRC32 = Memory.ROMCRC32; + strncpy(Movie.ROMName, Memory.ROMName, 23); + + write_movie_header(fd, &Movie); + // convert wchar_t metadata string/array to a uint16 array if(metadata_length>0) { @@ -482,6 +569,8 @@ fwrite(meta_buf, sizeof(uint16), metadata_length, fd); } + write_movie_extrarominfo(fd, &Movie); + // write snapshot fn=dup(fileno(fd)); fclose(fd); @@ -537,10 +626,10 @@ } else { - if(Movie.FrameDisplay) + if(GFX.FrameDisplay) { - sprintf(Movie.FrameDisplayString, "Playing frame: %d", Movie.CurrentFrame); - S9xMessage (S9X_INFO, S9X_MOVIE_INFO, Movie.FrameDisplayString); + sprintf(GFX.FrameDisplayString, "Playing frame: %d / %d", Movie.CurrentFrame, Movie.MaxFrame); +/// S9xMessage (S9X_INFO, S9X_MOVIE_INFO, GFX.FrameDisplayString); } read_frame_controller_data(); ++Movie.CurrentFrame; @@ -549,10 +638,10 @@ case MOVIE_STATE_RECORD: { - if(Movie.FrameDisplay) + if(GFX.FrameDisplay) { - sprintf(Movie.FrameDisplayString, "Recording frame: %d", Movie.CurrentFrame); - S9xMessage (S9X_INFO, S9X_MOVIE_INFO, Movie.FrameDisplayString); + sprintf(GFX.FrameDisplayString, "Recording frame: %d", Movie.CurrentFrame); +/// S9xMessage (S9X_INFO, S9X_MOVIE_INFO, GFX.FrameDisplayString); } write_frame_controller_data(); ++Movie.CurrentFrame; @@ -595,6 +684,7 @@ info->LengthFrames=local_movie.MaxFrame; info->RerecordCount=local_movie.RerecordCount; info->Opts=local_movie.Opts; + info->SyncFlags=local_movie.SyncFlags; info->ControllersMask=local_movie.ControllersMask; if(local_movie.SaveStateOffset > SMV_HEADER_SIZE) @@ -602,7 +692,9 @@ uint8 meta_buf[MOVIE_MAX_METADATA * sizeof(uint16)]; int i; - metadata_length=((int)local_movie.SaveStateOffset-SMV_HEADER_SIZE)/sizeof(uint16); + int curRomInfoSize = (local_movie.SyncFlags & MOVIE_SYNC_HASROMINFO) != 0 ? SMV_EXTRAROMINFO_SIZE : 0; + + metadata_length=((int)local_movie.SaveStateOffset-SMV_HEADER_SIZE-curRomInfoSize)/sizeof(uint16); metadata_length=(metadata_length>=MOVIE_MAX_METADATA) ? MOVIE_MAX_METADATA-1 : metadata_length; metadata_length=(int)fread(meta_buf, sizeof(uint16), metadata_length, fd); @@ -618,6 +710,11 @@ info->Metadata[0]='\0'; } + read_movie_extrarominfo(fd, &local_movie); + + info->ROMCRC32=local_movie.ROMCRC32; + strncpy(info->ROMName,local_movie.ROMName,23); + fclose(fd); if(access(filename, W_OK)) @@ -631,6 +728,11 @@ return (Movie.State!=MOVIE_STATE_NONE); } +uint8 S9xMovieControllers () +{ + return Movie.ControllersMask; +} + bool8 S9xMovieReadOnly () { if(!S9xMovieActive()) @@ -663,13 +765,25 @@ return Movie.CurrentFrame; } +void S9xMovieToggleRecState() +{ + Movie.ReadOnly=!Movie.ReadOnly; + + if (Movie.ReadOnly) + S9xMessage(S9X_INFO, S9X_MOVIE_INFO, "Movie is now read-only."); + else + S9xMessage(S9X_INFO, S9X_MOVIE_INFO, "Movie is now read+write."); +} + void S9xMovieToggleFrameDisplay () { - Movie.FrameDisplay = !Movie.FrameDisplay; - if(!Movie.FrameDisplay) - { - GFX.InfoStringTimeout = 1; - } + GFX.FrameDisplay = !GFX.FrameDisplay; +/// if(!GFX.FrameDisplay) +/// GFX.InfoStringTimeout = 1; +/* if(GFX.FrameDisplay) + S9xMessage(S9X_INFO, S9X_MOVIE_INFO, "Frame count display enabled."); + else + S9xMessage(S9X_INFO, S9X_MOVIE_INFO, "Frame count display disabled.");*/ } void S9xMovieFreeze (uint8** buf, uint32* size) @@ -725,6 +839,7 @@ current_frame > max_frame || space_needed > size) { + S9xMessage(S9X_INFO, S9X_MOVIE_INFO, "Invalid movie snapshot."); return false; } @@ -734,16 +849,27 @@ // and make it the input data for the current movie, then continue // writing new input data at the currentframe pointer change_state(MOVIE_STATE_RECORD); - S9xMessage(S9X_INFO, S9X_MOVIE_INFO, MOVIE_INFO_RERECORD); +/// S9xMessage(S9X_INFO, S9X_MOVIE_INFO, MOVIE_INFO_RERECORD); Movie.CurrentFrame = current_frame; Movie.MaxFrame = max_frame; ++Movie.RerecordCount; + // when re-recording, update the sync info in the movie to the new settings as of the last re-record. + bool hadRomInfo = (Movie.SyncFlags & MOVIE_SYNC_HASROMINFO) != 0; + Movie.SyncFlags = MOVIE_SYNC_DATA_EXISTS | (hadRomInfo ? MOVIE_SYNC_HASROMINFO : 0); + if(Settings.UseWIPAPUTiming) Movie.SyncFlags |= MOVIE_SYNC_WIP1TIMING; + if(!Settings.DisallowLeftRight) Movie.SyncFlags |= MOVIE_SYNC_LEFTRIGHT; + if(Settings.SoundEnvelopeHeightReading) Movie.SyncFlags |= MOVIE_SYNC_VOLUMEENVX; + if(Settings.FakeMuteFix) Movie.SyncFlags |= MOVIE_SYNC_FAKEMUTE; + if(Settings.SoundSync) Movie.SyncFlags |= MOVIE_SYNC_SYNCSOUND; + reserve_buffer_space(space_needed); memcpy(Movie.InputBuffer, ptr, space_needed); flush_movie(); fseek(Movie.File, Movie.ControllerDataOffset+(Movie.BytesPerFrame * (Movie.CurrentFrame+1)), SEEK_SET); + +/// Settings.DisplayPressedKeys = false; } else { @@ -757,11 +883,12 @@ // the end of the input data, so check for that here if(current_frame > Movie.MaxFrame) { + S9xMessage(S9X_INFO, S9X_MOVIE_INFO, "Can't load; save past movie."); return false; } change_state(MOVIE_STATE_PLAY); - S9xMessage(S9X_INFO, S9X_MOVIE_INFO, MOVIE_INFO_REWIND); +/// S9xMessage(S9X_INFO, S9X_MOVIE_INFO, MOVIE_INFO_REWIND); Movie.CurrentFrame = current_frame; } diff -NaHudr snes9x-1.43-src/snes9x/movie.h snes9x-improvement7-src-dehacked/snes9x/movie.h --- snes9x-1.43-src/snes9x/movie.h 2004-12-31 00:15:47.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/movie.h 2005-04-09 00:59:27.000000000 +0300 @@ -107,6 +107,14 @@ #define MOVIE_OPT_PAL (1<<1) #define MOVIE_MAX_METADATA 512 +#define MOVIE_SYNC_DATA_EXISTS (0x01) +#define MOVIE_SYNC_WIP1TIMING (0x02) +#define MOVIE_SYNC_LEFTRIGHT (0x04) +#define MOVIE_SYNC_VOLUMEENVX (0x08) +#define MOVIE_SYNC_FAKEMUTE (0x10) +#define MOVIE_SYNC_SYNCSOUND (0x20) +#define MOVIE_SYNC_HASROMINFO (0x40) + START_EXTERN_C struct MovieInfo { @@ -117,13 +125,18 @@ uint8 Opts; uint8 ControllersMask; bool8 ReadOnly; + uint8 SyncFlags; + + uint32 ROMCRC32; + char ROMName [23]; }; // methods used by the user-interface code int S9xMovieOpen (const char* filename, bool8 read_only); -int S9xMovieCreate (const char* filename, uint8 controllers_mask, uint8 opts, const wchar_t* metadata, int metadata_length); +int S9xMovieCreate (const char* filename, uint8 controllers_mask, uint8 opts, uint8 syncFlags, const wchar_t* metadata, int metadata_length); int S9xMovieGetInfo (const char* filename, struct MovieInfo* info); void S9xMovieStop (bool8 suppress_message); +void S9xMovieToggleRecState (); void S9xMovieToggleFrameDisplay (); // methods used by the emulation @@ -135,6 +148,7 @@ // accessor functions bool8 S9xMovieActive (); +uint8 S9xMovieControllers (); // the following accessors return 0/false if !S9xMovieActive() bool8 S9xMovieReadOnly (); uint32 S9xMovieGetId (); diff -NaHudr snes9x-1.43-src/snes9x/offsets snes9x-improvement7-src-dehacked/snes9x/offsets --- snes9x-1.43-src/snes9x/offsets 2004-12-31 00:15:48.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/offsets 1970-01-01 02:00:00.000000000 +0200 @@ -1,321 +0,0 @@ -ELF ƒ4óÿÿ¸‰D$¸Ž­‰D$¡Xщ$èóÿÿ1À¹`»‰D$¡XщL$‰$èóÿÿ¸ »º‰D$¡XщT$‰$èäòÿÿ¸‰D$¸À»‰D$¡Xщ$èÅòÿÿ¸‰D$¸§­‰D$¡Xщ$è¦òÿÿ¸¹¼‰D$¡XщL$‰$è‡òÿÿ¸@¼º ‰D$¡XщT$‰$èhòÿÿ¸‰D$¸€¼‰D$¡Xщ$èIòÿÿ¸‰D$¸Ä­‰D$¡Xщ$è*òÿÿ¸¹â­‰D$¡XщL$‰$è òÿÿ¸À¼ºl‰D$¡XщT$‰$èìñÿÿ¸R‰D$¸½‰D$¡Xщ$èÍñÿÿ¸P‰D$¸@½‰D$¡Xщ$è®ñÿÿ1À¹€½‰D$¡XщL$‰$è’ñÿÿ¸ ½º‰D$¡XщT$‰$èsñÿÿ¸‰D$¸à½‰D$¡Xщ$èTñÿÿ¸‰D$¸¾‰D$¡Xщ$è5ñÿÿ¸¹ ¾‰D$¡XщL$‰$èñÿÿ¸@¾º‰D$¡XщT$‰$è÷ðÿÿ¸‰D$¸`¾‰D$¡Xщ$èØðÿÿ¸‰D$¸ ¾‰D$¡Xщ$è¹ðÿÿ1À¹ý­‰D$¡XщL$‰$èðÿÿ¸®º‰D$¡XщT$‰$è~ðÿÿ¸‰D$¸4®‰D$¡Xщ$è_ðÿÿ¸‰D$¸Q®‰D$¡Xщ$è@ðÿÿ¸¹j®‰D$¡XщL$‰$è!ðÿÿ¸®º‰D$¡XщT$‰$èðÿÿ¸‰D$¸œ®‰D$¡Xщ$èãïÿÿ¸ -‰D$¸à¾‰D$¡Xщ$èÄïÿÿ¸ ¹µ®‰D$¡XщL$‰$è¥ïÿÿ¸Î®º>‰D$¡XщT$‰$è†ïÿÿ¸@‰D$¸ç®‰D$¡Xщ$ègïÿÿ¸@‰D$¸¯‰D$¡Xщ$èHïÿÿ¸A¹¯‰D$¡XщL$‰$è)ïÿÿ¸;¯ºB‰D$¡XщT$‰$è -ïÿÿ¸B‰D$¸ ¿‰D$¡Xщ$èëîÿÿ¸D‰D$¸Q¯‰D$¡Xщ$èÌîÿÿ¸G¹k¯‰D$¡XщL$‰$è­îÿÿ¸`¿ºH‰D$¡XщT$‰$èŽîÿÿ¸J‰D$¸…¯‰D$¡Xщ$èoîÿÿ¸L‰D$¸£¯‰D$¡Xщ$èPîÿÿ¸N¹ ¿‰D$¡XщL$‰$è1îÿÿ¸à¿ºP‰D$¡XщT$‰$èîÿÿ¸R‰D$¸Á¯‰D$¡Xщ$èóíÿÿ¸S‰D$¸Ý¯‰D$¡Xщ$èÔíÿÿ¸T¹ À‰D$¡XщL$‰$èµíÿÿ¸ù¯ºV‰D$¡XщT$‰$è–íÿÿ¸X‰D$¸°‰D$¡Xщ$èwíÿÿ¸Z‰D$¸-°‰D$¡Xщ$èXíÿÿ¸\¹G°‰D$¡XщL$‰$è9íÿÿ¸a°º^‰D$¡XщT$‰$èíÿÿ¸`‰D$¸{°‰D$¡Xщ$èûìÿÿ¸b‰D$¸`À‰D$¡Xщ$èÜìÿÿ¸c¹ À‰D$¡XщL$‰$è½ìÿÿ¸•°ºd‰D$¡XщT$‰$èžìÿÿ¸f‰D$¸àÀ‰D$¡Xщ$èìÿÿ¸e‰D$¸ Á‰D$¡Xщ$è`ìÿÿ¸g¹`Á‰D$¡XщL$‰$èAìÿÿ¸ Áºh‰D$¡XщT$‰$è"ìÿÿ¸j‰D$¸ÀÁ‰D$¡Xщ$èìÿÿ¸l‰D$¸­°‰D$¡Xщ$èäëÿÿ¸p¹Ä°‰D$¡XщL$‰$èÅëÿÿ¸àÁºq‰D$¡XщT$‰$è¦ëÿÿ¸r‰D$¸ ‰D$¡Xщ$è‡ëÿÿ¸s‰D$¸`‰D$¡Xщ$èhëÿÿ¸t¹€Â‰D$¡XщL$‰$èIëÿÿ¸à°ºv‰D$¡XщT$‰$è*ëÿÿ¸y‰D$¸þ°‰D$¡Xщ$è ëÿÿ¸z‰D$¸±‰D$¡Xщ$èìêÿÿ¸š -¹ Â‰D$¡XщL$‰$èÍêÿÿ¸Àº› -‰D$¡XщT$‰$è®êÿÿ¸œ -‰D$¸à‰D$¡Xщ$èêÿÿ¸ž -‰D$¸6±‰D$¡Xщ$èpêÿÿ¸Ÿ -¹O±‰D$¡XщL$‰$èQêÿÿ¸j±º£ -‰D$¡XщT$‰$è2êÿÿ¸¤ -‰D$¸‡±‰D$¡Xщ$èêÿÿ¸¥ -‰D$¸¤±‰D$¡Xщ$èôéÿÿ¸¦ -¹Â±‰D$¡XщL$‰$èÕéÿÿ¸ ú§ -‰D$¡XщT$‰$è¶éÿÿ¸¨ -‰D$¸à±‰D$¡Xщ$è—éÿÿ¸© -‰D$¸@ÉD$¡Xщ$èxéÿÿ¸° -¹`ÉD$¡XщL$‰$èYéÿÿ¸ Ãº¶ -‰D$¡XщT$‰$è:éÿÿ¸¼ -‰D$¸àÉD$¡Xщ$èéÿÿ¸Â -‰D$¸ ĉD$¡Xщ$èüèÿÿ¸È -¹`ĉD$¡XщL$‰$èÝèÿÿ¸ ÄºÎ -‰D$¡XщT$‰$è¾èÿÿ¸Ï -‰D$¸þ±‰D$¡Xщ$èŸèÿÿ¸Ð -‰D$¸àĉD$¡Xщ$è€èÿÿ¸Ò -¹Å‰D$¡XщL$‰$èaèÿÿ¸@ÅºÓ -‰D$¡XщT$‰$èBèÿÿ¸Ô -‰D$¸²‰D$¡Xщ$è#èÿÿ¸F‰D$¸€Å‰D$¡Xщ$èèÿÿ1À¹ Å‰D$¡XщL$‰$èèçÿÿ¸8²º‰D$¡XщT$‰$èÉçÿÿ¸‰D$¸àʼnD$¡Xщ$èªçÿÿ¸‰D$¸Æ‰D$¡Xщ$è‹çÿÿ¸¹@ƉD$¡XщL$‰$èlçÿÿ¸P²º‰D$¡XщT$‰$èMçÿÿ¸‰D$¸€Æ‰D$¡Xщ$è.çÿÿ¸‰D$¸ÀƉD$¡Xщ$èçÿÿ¸¹n²‰D$¡XщL$‰$èðæÿÿ¸‹²º‰D$¡XщT$‰$èÑæÿÿ¸(‰D$¸¨²‰D$¡Xщ$è²æÿÿ¸4‰D$¸Ç‰D$¡Xщ$è“æÿÿ¸6¹Æ²‰D$¡XщL$‰$ètæÿÿ¸@Ǻ8‰D$¡XщT$‰$èUæÿÿ¸<‰D$¸€Ç‰D$¡Xщ$è6æÿÿ¸@‰D$¸ÀljD$¡Xщ$èæÿÿ¸D¹ã²‰D$¡XщL$‰$èøåÿÿ¸ú²ºD‰D$¡XщT$‰$èÙåÿÿ¸D‰D$¸³‰D$¡Xщ$èºåÿÿ¸D ‰D$¸+³‰D$¡Xщ$è›åÿÿ¸H ¹È‰D$¡XщL$‰$è|åÿÿ¸ ȺH‰D$¡XщT$‰$è]åÿÿ¸L‰D$¸@ȉD$¡Xщ$è>åÿÿ¸T‰D$¸A³‰D$¡Xщ$èåÿÿ¸h¹\³‰D$¡XщL$‰$èåÿÿ¸z³ºl‰D$¡XщT$‰$èáäÿÿ¸t‰D$¸“³‰D$¡Xщ$èÂäÿÿ¸|‰D$¸±³‰D$¡Xщ$è£äÿÿ¸„¹Ï³‰D$¡XщL$‰$è„äÿÿ¸ç³1Ò‰D$¡XщT$‰$èhäÿÿ¸‰D$¸´‰D$¡Xщ$èIäÿÿ¸‰D$¸ ´‰D$¡Xщ$è*äÿÿ¸¹`ȉD$¡XщL$‰$è äÿÿ¸€Èº‰D$¡XщT$‰$èìãÿÿ¸‰D$¸ È‰D$¡Xщ$èÍãÿÿ¸ ‰D$¸àȉD$¡Xщ$è®ãÿÿ¸¹É‰D$¡XщL$‰$èãÿÿ¸;´º‰D$¡XщT$‰$èpãÿÿ¸‰D$¸ ɉD$¡Xщ$èQãÿÿ¸‰D$¸@ɉD$¡Xщ$è2ãÿÿ¸¹`ɉD$¡XщL$‰$èãÿÿ¸€Éº‰D$¡XщT$‰$èôâÿÿ¸ ‰D$¸V´‰D$¡Xщ$èÕâÿÿ¸$‰D$¸o´‰D$¡Xщ$è¶âÿÿ¸,¹ÀɉD$¡XщL$‰$è—âÿÿ¸Êº0‰D$¡XщT$‰$èxâÿÿ¸4‰D$¸@ʉD$¡Xщ$èYâÿÿ¸8‰D$¸€Ê‰D$¡Xщ$è:âÿÿ¸<¹ÀʉD$¡XщL$‰$èâÿÿ¸‹´º(‰D$¡XщT$‰$èüáÿÿ¸@‰D$¸¦´‰D$¡Xщ$èÝáÿÿ¸@@‰D$¸¿´‰D$¡Xщ$è¾áÿÿ¸@€¹Ý´‰D$¡XщL$‰$èŸáÿÿ¸ö´ºB€‰D$¡XщT$‰$è€áÿÿ¸D€‰D$¸Ë‰D$¡Xщ$èaáÿÿ¸H€‰D$¸µ‰D$¡Xщ$èBáÿÿ¸P€¹(µ‰D$¡XщL$‰$è#áÿÿ¸@˺Q€‰D$¡XщT$‰$èáÿÿ¸R€‰D$¸€Ë‰D$¡Xщ$èåàÿÿ¸S€‰D$¸ÀˉD$¡Xщ$èÆàÿÿ1À¹Ì‰D$¡XщL$‰$èªàÿÿ¸@̺‰D$¡XщT$‰$è‹àÿÿ¸‰D$¸€Ì‰D$¡Xщ$èlàÿÿ¸‰D$¸À̉D$¡Xщ$èMàÿÿ¸Fµ‰D$¡Xщ$è7àÿÿ¡XѺ͹‰T$‰L$‰$èàÿÿ¸‰D$¸@͉D$¡Xщ$èùßÿÿ¸_µ‰D$¡Xщ$èãßÿÿ¸‰D$¸€Í‰D$¡Xщ$èÄßÿÿ¸¹À͉D$¡XщL$‰$è¥ßÿÿ¡XѺxµ‰T$‰$èßÿÿ¸‰D$¸Î‰D$¡Xщ$èpßÿÿ¸‰D$¸@ΉD$¡Xщ$èQßÿÿ¸‘µ‰D$¡Xщ$è;ßÿÿ¸ -¹€Î‰D$¡XщL$‰$èßÿÿ¸Àκ -‰D$¡XщT$‰$èýÞÿÿ¸ªµ‰D$¡Xщ$èçÞÿÿ¸ ‰D$¸Ï‰D$¡Xщ$èÈÞÿÿ¸ ‰D$¸@ωD$¡Xщ$è©Þÿÿ¡Xѹõ‰L$‰$è“Þÿÿ¸€Ïº‰D$¡XщT$‰$ètÞÿÿÉ1ÀÃU‰åWV1öSƒì è Ã,,è)Þÿÿ“ÄþÿÿƒÄþÿÿ)ÂÁú9Ös‰×´&¼'ÿ”³ÄþÿÿF9þrôƒÄ [^_]ö¿U‰åƒì‰$èBÃÎ+‰t$ƒÄþÿÿ“Äþÿÿ)ÐÁø…Àpÿuè[‹$‹t$‰ì]Ãÿ”³Äþÿÿ‰ðN…Àuòëà‹$ÃU‰åSƒì»(Ñ¡(уøÿtv¼'ƒëÿЋƒøÿuôX[]ÃU‰åSè[ÃC+RèêÝÿÿ‹]üÉÃ#define Flags CPU + %d -#define BranchSkip CPU + %d -#define NMIActive CPU + %d -#define IRQActive CPU + %d -#define InDMA CPU + %d -#define WhichEvent CPU + %d -#define PCS CPU + %d -#define PCBase CPU + %d -#define WaitAddress CPU + %d -#define WaitCounter CPU + %d -#define Cycles CPU + %d -#define NextEvent CPU + %d -#define V_Counter CPU + %d -#define MemSpeed CPU + %d -#define MemSpeedx2 CPU + %d -#define PB Registers + %d -#define DB Registers + %d -#define PP Registers + %d -#define PL Registers + %d -#define PH PL + 1 -#define AA Registers + %d -#define AL Registers + %d -#define AH AL + 1 -#define DD Registers + %d -#define DL Registers + %d -#define DH DL + 1 -#define SS Registers + %d -#define SL Registers + %d -#define SH SL + 1 -#define XX Registers + %d -#define XL Registers + %d -#define XH XL + 1 -#define YY Registers + %d -#define YL Registers + %d -#define YH YL + 1 -#define PCR Registers + %d -#define RAM Memory + %d -#define ROM Memory + %d -#define VRAM Memory + %d -#define SRAM Memory + %d -#define BWRAM Memory + %d -#define FillRAM Memory + %d -#define C4RAM Memory + %d -#define HiROM Memory + %d -#define LoROM Memory + %d -#define SRAMMask Memory + %d -#define SRAMSize Memory + %d -#define Map Memory + %d -#define WriteMap Memory + %d -#define APUPCS IAPU + %d -#define APURAM IAPU + %d -#define APUBit IAPU + %d -#define APUAddress IAPU + %d -#define APU_Carry IAPU + %d -#define APU_Zero IAPU + %d -#define APUCycles APU + %d -#define APUShowROM APU + %d -#define APUFlags APU + %d -#define APUOutPorts APU + %d -#define APUDSP APU + %d -#define APUExtraRAM APU + %d -#define APUTimer APU + %d -#define CPUSpeed ICPU + %d -#define CPUOpcodes ICPU + %d -#define _Carry ICPU + %d -#define _Zero ICPU + %d -#define _Negative ICPU + %d -#define _Overflow ICPU + %d -#define ShiftedDB ICPU + %d -#define ShiftedPB ICPU + %d -#define Scanline ICPU + %d -#define Frame ICPU + %d -#define H_Max Settings + %d -#define Paused Settings + %d -#define PAL Settings + %d -#define BGMode PPU + %d -#define BG3Priority PPU + %d -#define Brightness PPU + %d -#define GHight PPU + %d -#define GInc PPU + %d -#define GAddress PPU + %d -#define GMask1 PPU + %d -#define GShift PPU + %d -#define CGFLIP PPU + %d -#define CGDATA PPU + %d -#define FirstSprite PPU + %d -#define LastSprite PPU + %d -#define OBJ PPU + %d -#define OAMAddr PPU + %d -#define OAMFlip PPU + %d -#define IRQVBeamPos PPU + %d -#define IRQHBeamPos PPU + %d -#define HBeamFlip PPU + %d -#define VBeamFlip PPU + %d -#define MatrixA PPU + %d -#define MatrixB PPU + %d -#define MatrixC PPU + %d -#define MatrixD PPU + %d -#define CentreX PPU + %d -#define CentreY PPU + %d -#define CGADD PPU + %d -#define WRAM PPU + %d -#define BG_Forced PPU + %d -#define OBJNameBase PPU + %d -#define OAMReadFlip PPU + %d -#define OAMData PPU + %d -#define Mosaic PPU + %d -#define BGMosaic PPU + %d -#define Mode7HFlip PPU + %d -#define Mode7VFlip PPU + %d -#define Mode7Repeat PPU + %d -#define Window1Left PPU + %d -#define Window2Left PPU + %d -#define CGFLIPRead PPU + %d -#define MouseSpeed PPU + %d -#define HDMA IPPU + %d -#define OBJChanged IPPU + %d -#define FrameSkip IPPU + %d -#define TileCache IPPU + %d -#define TileCached IPPU + %d -#define Interlace IPPU + %d -#define Red IPPU + %d -#define Green IPPU + %d -#define Blue IPPU + %d -#define XB IPPU + %d -#define Joypads IPPU + %d -#define SuperScope IPPU + %d -#define Mouse IPPU + %d -#define PrevMouseX IPPU + %d -#define PrevMouseY IPPU + %d -#define Clip IPPU + %d -#define SA1Opcodes SA1 + %d -#define SA1_Carry SA1 + %d -#define SA1_Zero SA1 + %d -#define SA1Flags SA1 + %d -#define SA1PCS SA1 + %d -#define SA1PCBase SA1 + %d -#define SA1BWRAM SA1 + %d -#define SA1Map SA1 + %d -#define SA1WriteMap SA1 + %d -#define SA1op1 SA1 + %d -#define SA1op2 SA1 + %d -#define SA1sum SA1 + %d -#define SA1overflow SA1 + %d -#define SA1PH SA1PL + 1 -#define SA1AH SA1AL + 1 -#define SA1DH SA1DL + 1 -#define SA1SH SA1SL + 1 -#define SA1XH SA1XL + 1 -#define SA1YH SA1YL + 1 -#define WaitingForInterrupt CPU + %d -#define PCAtOpcodeStart CPU + %d -#define FastROMSpeed CPU + %d -#define AutoSaveTimer CPU + %d -#define SRAMModified CPU + %d -#define NMITriggerPoint CPU + %d -#define TriedInterleavedMode2 CPU + %d -#define BRKTriggered CPU + %d -#define NMICycleCount CPU + %d -#define IRQCycleCount CPU + %d -#define MemorySpeed Memory + %d -#define BlockIsRAM Memory + %d -#define BlockIsROM Memory + %d -#define ROMFilename Memory + %d -#define APUExecuting IAPU + %d -#define APUDirectPage IAPU + %d -#define APUWaitAddress1 IAPU + %d -#define APUWaitAddress2 IAPU + %d -#define APUWaitCounter IAPU + %d -#define APUShadowRAM IAPU + %d -#define APUCachedSamples IAPU + %d -#define APU_Overflow IAPU + %d -#define APUTimerErrorCounter IAPU + %d -#define APUKeyedChannels APU + %d -#define APUTimerTarget APU + %d -#define APUTimerEnabled APU + %d -#define TimerValueWritten APU + %d -#define CPUExecuting ICPU + %d -#define APUEnabled Settings + %d -#define Shutdown Settings + %d -#define SoundSkipMethod Settings + %d -#define HBlankStart Settings + %d -#define CyclesPercentage Settings + %d -#define DisableIRQ Settings + %d -#define SoundSync Settings + %d -#define SA1Enabled Settings + %d -#define SuperFXEnabled Settings + %d -#define ApuP APURegisters + %d -#define ApuYA APURegisters + %d -#define ApuA APURegisters + %d -#define ApuY APURegisters + %d -#define ApuX APURegisters + %d -#define ApuS APURegisters + %d -#define ApuPC APURegisters + %d -#define APUPCR APURegisters + %d -#define GFullGraphicCount PPU + %d -#define OAMPriorityRotation PPU + %d -#define OAMTileAddress PPU + %d -#define VBeamPosLatched PPU + %d -#define HBeamPosLatched PPU + %d -#define HVBeamCounterLatched PPU + %d -#define Joypad1ButtonReadPos PPU + %d -#define Joypad2ButtonReadPos PPU + %d -#define FixedColourGreen PPU + %d -#define FixedColourRed PPU + %d -#define FixedColourBlue PPU + %d -#define SavedOAMAddr PPU + %d -#define ScreenHeight PPU + %d -#define ForcedBlanking PPU + %d -#define OBJThroughMain PPU + %d -#define OBJThroughSub PPU + %d -#define OBJSizeSelect PPU + %d -#define VTimerEnabled PPU + %d -#define HTimerEnabled PPU + %d -#define HTimerPosition PPU + %d -#define Window1Right PPU + %d -#define Window2Right PPU + %d -#define ClipWindowOverlapLogic PPU + %d -#define ClipWindow1Enable PPU + %d -#define ClipWindow2Enable PPU + %d -#define ClipWindow1Inside PPU + %d -#define ClipWindow2Inside PPU + %d -#define RecomputeClipWindows PPU + %d -#define OBJNameSelect PPU + %d -#define Need16x8Mulitply PPU + %d -#define Joypad3ButtonReadPos PPU + %d -#define RangeTimeOver PPU + %d -#define ColorsChanged IPPU + %d -#define HDMAStarted IPPU + %d -#define MaxBrightness IPPU + %d -#define LatchedBlanking IPPU + %d -#define RenderThisFrame IPPU + %d -#define SkippedFrames IPPU + %d -#define FirstVRAMRead IPPU + %d -#define DoubleWidthPixels IPPU + %d -#define RenderedScreenHeight IPPU + %d -#define RenderedScreenWidth IPPU + %d -#define ScreenColors IPPU + %d -#define PreviousLine IPPU + %d -#define CurrentLine IPPU + %d -#define SA1_Negative SA1 + %d -#define SA1_Overflow SA1 + %d -#define SA1CPUExecuting SA1 + %d -#define SA1ShiftedPB SA1 + %d -#define SA1ShiftedDB SA1 + %d -#define SA1Executing SA1 + %d -#define SA1NMIActive SA1 + %d -#define SA1IRQActive SA1 + %d -#define SA1WaitingForInterrupt SA1 + %d -#define SA1PCAtOpcodeStart SA1 + %d -#define SA1WaitAddress SA1 + %d -#define SA1WaitCounter SA1 + %d -#define SA1WaitByteAddress1 SA1 + %d -#define SA1WaitByteAddress2 SA1 + %d -#define SA1arithmetic_op SA1 + %d -#define VirtualBitmapFormat SA1 + %d -#define SA1_in_char_dma SA1 + %d -#define SA1variable_bit_pos SA1 + %d -#define SA1PB SA1Registers + %d -#define SA1DB SA1Registers + %d -#define SA1PP SA1Registers + %d -#define SA1PL SA1Registers + %d -#define SA1AA SA1Registers + %d -#define SA1AL SA1Registers + %d -#define SA1DD SA1Registers + %d -#define SA1DL SA1Registers + %d -#define SA1SS SA1Registers + %d -#define SA1SL SA1Registers + %d -#define SA1XX SA1Registers + %d -#define SA1XL SA1Registers + %d -#define SA1YY SA1Registers + %d -#define SA1YL SA1Registers + %d -#define SA1PCR SA1Registers + %d -;dÌ´ÿÿ„4ÑzP||ƒ ˆ p„Œ A…D HR` Dƒ ð¥h‚œ -¯ <Ñ,ƒƒþÿÿoÜ‚ÿÿÿoðÿÿoÌ‚ÿÿÿÿÿÿÿÿHÐrƒ‚ƒ’ƒGCC: (GNU) 3.3.5 (Debian 1:3.3.5-1)GCC: (GNU) 3.3.5 (Debian 1:3.3.5-1)GCC: (GNU) 3.3.4 (Debian 1:3.3.4-13)GCC: (GNU) 3.3.4 (Debian 1:3.3.4-13)GCC: (GNU) 3.3.5 (Debian 1:3.3.5-1)GCC: (GNU) 3.3.4 (Debian 1:3.3.4-13)GCC: (GNU) 3.3.5 (Debian 1:3.3.5-1) ƒ",K ð¥Dƒ ă"$H -¦Yƒ!¯œ„_IO_stdin_used« ƒƒ../sysdeps/i386/elf/start.S/home/gotom/debian/glibc/cvs/build.local/glibc_2.3.2.ds1-18.test3/glibc-2.3.2.ds1/build-tree/glibc-2.3.2/csuGNU AS 2.15€˜qăă=ÒÕ0³"B¢ #T¯$0»%q®Ÿ(ƒ¤i)BÕ* NÏ+T,½int-0g2Ú`ã3쩲;Úá<ìXˆìÀ‰0Š0‹q•ŒìÓ0ËŽ0"aeÚ˜‘½•’Í’•#¥½¥³Ä’~'“am”q\•ìî–0 —a°˜0‡™a¨›½Õœa½ - ½ñ£½Í¦ah«a·¬Ú²¯qÄ°ìD³qY´ì*¶½ÌºhÜ»© 󶼺 À«|¿½[Â0 -ŸEa -Úb0 S vQé ÈR$À¥ITªN½#âSõ#öT$y æV#8I#•T©#æ!h#8"I#‰#„ ù&-ÓqõÍ·gß 8§AsH R½R7ºÀË×½½ X7"<?/u¦#Cvç#½x½#zº# Ù{º#Ç}#‰~Ý#8#W€$# ‹„½#$þ…½#(>†½#,ᇽ#0ûŠ½#4¯Œ…#8 =º1$@ “Ñ# -”Ñ#˜½#ƒœ½#   ½#4¢¬#8£I#a§š# À ÆB Ñ B %Kè îéRB@N $½RìO/ 5ARXL R…½R7…ÀºÀË× ]’ ˜¼½…ÀÀÑÑCaÇ Íç½çò× íÀ ø ç!d  $½$ç …ìe5 ;G…šnBajA#Mk‡#Ÿl*#¯m…# :nš# Gs   Ié‚­ê®%#Q¯R#¯°é#ø=¥•± ².,4 2²#¯3=# M,5 /² 4 Q5.ó7 8½À9T¿:0ü–$¦½ù5/home/gotom/debian/glibc/cvs/build.local/glibc_2.3.2.ds1-18.test3/glibc-2.3.2.ds1/build-tree/i386-libc/csu/crti.S/home/gotom/debian/glibc/cvs/build.local/glibc_2.3.2.ds1-18.test3/glibc-2.3.2.ds1/build-tree/glibc-2.3.2/csuGNU AS 2.15€ù(/home/gotom/debian/glibc/cvs/build.local/glibc_2.3.2.ds1-18.test3/glibc-2.3.2.ds1/build-tree/i386-libc/csu/crtn.S/home/gotom/debian/glibc/cvs/build.local/glibc_2.3.2.ds1-18.test3/glibc-2.3.2.ds1/build-tree/glibc-2.3.2/csuGNU AS 2.15€%% : ; I$ > $ >  : ;  : ; I8 -I!I/  I -: ;I  : ; : ; I  : ; ( ' II : ; &I'  < !I4: ; I?  -%%S/û -../sysdeps/i386/elfstart.S ƒ.01:"VWYXû -Àºû -/usr/lib/gcc-lib/i486-linux/3.3.5/include../sysdeps/generic/bits../wcsmbs../sysdeps/gnu../iconvinit.cstddef.htypes.hwchar.h_G_config.hgconv.hÎ…û -/home/gotom/debian/glibc/cvs/build.local/glibc_2.3.2.ds1-18.test3/glibc-2.3.2.ds1/build-tree/i386-libc/csucrti.Sð¥2,WdDƒ",:ă ,Wdd,,-:¬…û -/home/gotom/debian/glibc/cvs/build.local/glibc_2.3.2.ds1-18.test3/glibc-2.3.2.ds1/build-tree/i386-libc/csucrtn.S¦:Yƒ _G_int32_t__time_t__GCONV_INCOMPLETE_INPUT__GCONV_OK__state__gconv_init_fct_G_iconv_t__rlim64_t__GCONV_ILLEGAL_DESCRIPTOR__gconv_infoshort unsigned intunsigned char__useconds_t__counter__fct__val__GCONV_NOCONV__value__nsteps_G_int16_t__max_needed_from__gconv_btowc_fct__off_t__ssize_t__statepinit.c__fsfilcnt_t__steps__fsfilcnt64_t__blkcnt_t__gconv_loaded_object_G_fpos64_t__gconv_t__trans_end_fct__u_int__GCONV_ILLEGAL_INPUT__blksize_t__to_name__uint64_t__id_t__GCONV_EMPTY_INPUT__cd__ino_t/home/gotom/debian/glibc/cvs/build.local/glibc_2.3.2.ds1-18.test3/glibc-2.3.2.ds1/build-tree/glibc-2.3.2/csu__invocation_counter__pid_t__u_short__count__quad_t__u_long__fsid_t__GCONV_FULL_OUTPUT__max_needed_to__timer_t__stateful__uint32_t__key_t__u_char__gconv_step__shlib_handle__min_needed_toshort int__dev_tlong long int__gconv_trans_dataGNU C 3.3.5 (Debian 1:3.3.5-1)__outbuflong long unsigned int__uid_t__wchb__uint16_twint_t__u_quad_t__gconv_trans_end_fct__flags__outbufend__combined__gconv_trans_init_fct__init_fct__modname__trans_context_fct__trans_fct__rlim_t__wch__intptr_t__suseconds_t__ino64_twchar_t__GCONV_IS_LAST__blkcnt64_t__fsblkcnt64_t__mode_t__qaddr_t__pos__gconv_end_fct_IO_stdin_used__internal_use__GCONV_NODB__clock_t__gconv_step_data__gconv_trans_query_fct__socklen_t__int64_t__GCONV_NOMEM__off64_t__btowc_fct_G_fpos_t__int8_t__daddr_t__fsblkcnt_t_G_uint32_t__nlink_t__swblk_t__GCONV_INTERNAL_ERROR__mbstate_t__gid_t__clockid_t__int32_t__gconv_trans_context_fct__next__GCONV_IGNORE_ERRORS__end_fct__trans__uint8_t__gconv_fct__from_name__min_needed_from__gconv_trans_fct__data__caddr_t_G_uint16_t__loff_t__int16_t.symtab.strtab.shstrtab.interp.note.ABI-tag.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame_hdr.data.eh_frame.dynamic.ctors.dtors.jcr.got.bss.comment.debug_aranges.debug_pubnames.debug_info.debug_abbrev.debug_line.debug_str44#HH 1hh47 œœ€?‚¯GÿÿÿoÌ‚ÌTþÿÿoÜ‚Ü@c ƒl ,ƒ, uDƒDp\ƒ\@{ ƒ P"ð¥ð%‡ ¦ &‚) ¤Ï¤OÐP £ Ð P<­HÐHPà¶(Ñ(Q½0Ñ0QÄ8Ñ8QÉ<Ñ/home/gotom/debian/glibc/cvs/build.local/glibc_2.3.2.ds1-18.test3/glibc-2.3.2.ds1/build-tree/i386-libc/config.habi-note.S/home/gotom/debian/glibc/cvs/build.local/glibc_2.3.2.ds1-18.test3/glibc-2.3.2.ds1/build-tree/i386-libc/csu/abi-tag.hinit.c/home/gotom/debian/glibc/cvs/build.local/glibc_2.3.2.ds1-18.test3/glibc-2.3.2.ds1/build-tree/i386-libc/csu/crti.S/home/gotom/debian/glibc/cvs/build.local/glibc_2.3.2.ds1-18.test3/glibc-2.3.2.ds1/build-tree/i386-libc/csu/defs.hinitfini.ccall_gmon_startcrtstuff.c__CTOR_LIST____DTOR_LIST____JCR_LIST__p.0completed.1__do_global_dtors_auxframe_dummy__CTOR_END____DTOR_END____FRAME_END____JCR_END____do_global_ctors_aux/home/gotom/debian/glibc/cvs/build.local/glibc_2.3.2.ds1-18.test3/glibc-2.3.2.ds1/build-tree/i386-libc/csu/crtn.Soffsets.cpp_DYNAMIC_fp_hwfprintf@@GLIBC_2.0__fini_array_end__dso_handle__libc_csu_fini_initstdout@@GLIBC_2.0_start__fini_array_start__libc_csu_init__gxx_personality_v0@@CXXABI_1.2__bss_startmain__libc_start_main@@GLIBC_2.0__init_array_enddata_start_fini_edata__i686.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__end__init_array_start_IO_stdin_used__data_start_Jv_RegisterClasses__gmon_start__ \ No newline at end of file diff -NaHudr snes9x-1.43-src/snes9x/offsets.cpp snes9x-improvement7-src-dehacked/snes9x/offsets.cpp --- snes9x-1.43-src/snes9x/offsets.cpp 2004-12-31 00:15:47.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/offsets.cpp 2005-04-09 00:59:27.000000000 +0300 @@ -209,7 +209,7 @@ OFFSET5(APU_Overflow,_Overflow) OFFSET5(APUTimerErrorCounter,TimerErrorCounter) OFFSET5(NextAPUTimerPos,NextAPUTimerPos) - + OFFSET4(APUCycles,Cycles) OFFSET4(APUShowROM,ShowROM) OFFSET4(APUFlags,Flags) @@ -246,6 +246,7 @@ OFFSET7(SoundSync,SoundSync) OFFSET7(SA1Enabled,SA1) OFFSET7(SuperFXEnabled,SuperFX) + OFFSET7(UseWIPAPUTiming,UseWIPAPUTiming) OFFSET8(ApuP,P) OFFSET8(ApuYA,YA.W) diff -NaHudr snes9x-1.43-src/snes9x/port.h snes9x-improvement7-src-dehacked/snes9x/port.h --- snes9x-1.43-src/snes9x/port.h 2004-12-31 00:15:47.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/port.h 2005-04-09 00:59:27.000000000 +0300 @@ -158,6 +158,10 @@ typedef long long int64; #else /* __WIN32__ */ +#ifdef __MINGW32__ +typedef long int32; +#endif + # ifdef __BORLANDC__ # include # else diff -NaHudr snes9x-1.43-src/snes9x/ppu.cpp snes9x-improvement7-src-dehacked/snes9x/ppu.cpp --- snes9x-1.43-src/snes9x/ppu.cpp 2004-12-31 00:15:47.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/ppu.cpp 2005-04-09 00:59:27.000000000 +0300 @@ -3040,7 +3040,7 @@ } } -void S9xUpdateJoypads () +void S9xUpdateJoypadButtons () { int i; @@ -3051,14 +3051,17 @@ S9xMovieUpdate(); - for (i = 0; i < 5; i++) + if(Settings.DisallowLeftRight) { - if (IPPU.Joypads [i] & SNES_LEFT_MASK) - IPPU.Joypads [i] &= ~SNES_RIGHT_MASK; - if (IPPU.Joypads [i] & SNES_UP_MASK) - IPPU.Joypads [i] &= ~SNES_DOWN_MASK; + for (i = 0; i < 5; i++) + { + if (IPPU.Joypads [i] & SNES_LEFT_MASK) + IPPU.Joypads [i] &= ~SNES_RIGHT_MASK; + if (IPPU.Joypads [i] & SNES_UP_MASK) + IPPU.Joypads [i] &= ~SNES_DOWN_MASK; + } } - + // BJ: This is correct behavior AFAICT (used to be Touhaiden hack) if (IPPU.Controller == SNES_JOYPAD || IPPU.Controller == SNES_MULTIPLAYER5) { @@ -3068,6 +3071,11 @@ IPPU.Joypads [i] |= 0xffff0000; } } +} + +void S9xUpdateJoypadMemory () +{ + int i; // Read mouse position if enabled if (Settings.MouseMaster) @@ -3297,3 +3305,14 @@ } #endif +extern "C" void S9xUpdateJoypads() +{ + if (CPU.V_Counter == PPU.ScreenHeight + 3) + S9xUpdateJoypadMemory(); + + // separated from S9xUpdateJoypadMemory because the +3 was causing keypresses to be displayed 1 frame behind, + // but just removing the +3 always would cause some games (Pocky & Rocky) to fail to get input. + // (with this change, games emulate identically to before, only the keypress GUI display timing is better) + if (CPU.V_Counter == PPU.ScreenHeight) + S9xUpdateJoypadButtons(); +} diff -NaHudr snes9x-1.43-src/snes9x/ppu.h snes9x-improvement7-src-dehacked/snes9x/ppu.h --- snes9x-1.43-src/snes9x/ppu.h 2004-12-31 00:15:47.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/ppu.h 2005-04-09 00:59:28.000000000 +0300 @@ -264,6 +264,7 @@ uint8 MouseSpeed[2]; // XXX Do these need to be added to snapshot.cpp? + // answer: yes, some games (such as Zelda 3) use them uint16 OAMWriteRegister; uint8 BGnxOFSbyte; uint8 OpenBus1; @@ -303,7 +304,8 @@ void S9xResetPPU (); void S9xSoftResetPPU (); void S9xFixColourBrightness (); -void S9xUpdateJoypads (); +void S9xUpdateJoypadButtons (); +void S9xUpdateJoypadMemory (); void S9xProcessMouse(int which1); void S9xSuperFXExec (); diff -NaHudr snes9x-1.43-src/snes9x/screenshot.cpp snes9x-improvement7-src-dehacked/snes9x/screenshot.cpp --- snes9x-1.43-src/snes9x/screenshot.cpp 2004-12-31 00:15:45.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/screenshot.cpp 2005-04-09 00:59:27.000000000 +0300 @@ -112,7 +112,10 @@ #include "ppu.h" #include "screenshot.h" -bool8 S9xDoScreenshot(int width, int height){ +bool8 S9xDoScreenshot(int width, int height) +{ + S9xSetInfoString("Failed to take screenshot."); // gets overwritten upon success + #ifdef HAVE_LIBPNG FILE *fp; png_structp png_ptr; @@ -226,7 +229,15 @@ fclose(fp); fprintf(stderr, "%s saved.\n", fname); - return TRUE; + + { + static char str [64]; + sprintf(str, "Saved screenshot %s", fname + strlen(fname)-7); + str[strlen(str)-3] = '\0'; + S9xSetInfoString(str); + } + + return TRUE; #else perror("Screenshot support not available (libpng was not found at build time)"); return FALSE; diff -NaHudr snes9x-1.43-src/snes9x/server.cpp snes9x-improvement7-src-dehacked/snes9x/server.cpp --- snes9x-1.43-src/snes9x/server.cpp 2004-12-31 00:15:47.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/server.cpp 2005-04-09 00:59:27.000000000 +0300 @@ -762,7 +762,7 @@ Sleep (0); #endif - if (success && !Settings.Paused && !Settings.StopEmulation && + if (success && !(Settings.Paused && !Settings.FrameAdvance) && !Settings.StopEmulation && !Settings.ForcedPause && !NPServer.Paused) { S9xNPSendHeartBeat (); @@ -1226,7 +1226,7 @@ while (!NetPlay.PendingWait4Sync && NetPlay.Connected && !Settings.ForcedPause && !Settings.StopEmulation && - !Settings.Paused) + !(Settings.Paused && !Settings.FrameAdvance)) { #ifdef __WIN32__ Sleep (40); diff -NaHudr snes9x-1.43-src/snes9x/sh/README.txt snes9x-improvement7-src-dehacked/snes9x/sh/README.txt --- snes9x-1.43-src/snes9x/sh/README.txt 1970-01-01 02:00:00.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/sh/README.txt 2005-03-20 23:46:21.000000000 +0200 @@ -0,0 +1,6 @@ +SH assembler is used on Dreamcast. The Dreamcast/DreamSNES target is +currently not completely (or even half way) merged with Snes9X +mainland. These files are still useful to other emulator authors that +know what they are doing though. + +/Peter diff -NaHudr snes9x-1.43-src/snes9x/sh/asmstruc.h snes9x-improvement7-src-dehacked/snes9x/sh/asmstruc.h --- snes9x-1.43-src/snes9x/sh/asmstruc.h 2004-12-31 00:15:46.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/sh/asmstruc.h 2005-03-21 14:00:47.000000000 +0200 @@ -113,7 +113,8 @@ #define S9xAPUOPrint _S9xAPUOPrint #define S9xSuperFXExec _S9xSuperFXExec #define S9xGenerateSound _S9xGenerateSound -#define S9xUpdateJoypads _S9xUpdateJoypads +#define S9xUpdateJoypadButtons _S9xUpdateJoypadButtons +#define S9xUpdateJoypadMemory _S9xUpdateJoypadMemory #define S9xMainLoop _S9xMainLoop #define RenderLine _RenderLine #define S9xSetIRQ _S9xSetIRQ diff -NaHudr snes9x-1.43-src/snes9x/snapshot.cpp snes9x-improvement7-src-dehacked/snes9x/snapshot.cpp --- snes9x-1.43-src/snes9x/snapshot.cpp 2004-12-31 00:15:45.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/snapshot.cpp 2005-04-09 00:59:27.000000000 +0300 @@ -114,6 +114,7 @@ #include "sdd1.h" #include "spc7110.h" #include "movie.h" +#include "../language.h" extern uint8 *SRAM; @@ -316,8 +317,11 @@ {OFFSET (Need16x8Mulitply), 1, INT_V}, {OFFSET (BGMosaic), 4, uint8_ARRAY_V}, {OFFSET (OAMData), 512 + 32, uint8_ARRAY_V}, - {OFFSET (Need16x8Mulitply), 1, INT_V}, - {OFFSET (MouseSpeed), 2, uint8_ARRAY_V} + {OFFSET (MouseSpeed), 2, uint8_ARRAY_V}, + {OFFSET (OAMWriteRegister), 2, INT_V}, // ZELDA FIX + {OFFSET (BGnxOFSbyte), 1, INT_V}, // ZELDA FIX + {OFFSET (OpenBus1), 1, INT_V}, // ZELDA FIX + {OFFSET (OpenBus2), 1, INT_V} // ZELDA FIX }; #undef OFFSET @@ -555,8 +559,10 @@ if(S9xMovieActive()) { - sprintf(String, "Movie snapshot %s", S9xBasename (filename)); + const char * name = S9xBasename (filename); + sprintf(String, "Movie snapshot %s", name + (strlen(name) - 3)); S9xMessage (S9X_INFO, S9X_FREEZE_FILE_INFO, String); + GFX.InfoStringTimeout /= 4; } else { @@ -591,12 +597,10 @@ switch (result) { case WRONG_FORMAT: - S9xMessage (S9X_ERROR, S9X_WRONG_FORMAT, - "File not in Snes9x freeze format"); + S9xMessage (S9X_ERROR, S9X_WRONG_FORMAT, FREEZE_ERR_WRONG_FORMAT); break; case WRONG_VERSION: - S9xMessage (S9X_ERROR, S9X_WRONG_VERSION, - "Incompatable Snes9x freeze file format version"); + S9xMessage (S9X_ERROR, S9X_WRONG_VERSION, FREEZE_ERR_WRONG_VERSION); break; case WRONG_MOVIE_SNAPSHOT: S9xMessage (S9X_ERROR, S9X_WRONG_MOVIE_SNAPSHOT, MOVIE_ERR_SNAPSHOT_WRONG_MOVIE); @@ -606,8 +610,7 @@ break; default: case FILE_NOT_FOUND: - sprintf (String, "ROM image \"%s\" for freeze file not found", - ROMFilename); + sprintf (String, FREEZE_ERR_NOT_FOUND, ROMFilename); S9xMessage (S9X_ERROR, S9X_ROM_NOT_FOUND, String); break; } @@ -615,15 +618,33 @@ return (FALSE); } - if(!S9xMovieActive()) + + if(S9xMovieActive()) { - sprintf(String, "Loaded %s", S9xBasename (filename)); + const char * name = S9xBasename (filename); + if(S9xMovieReadOnly()) + sprintf(String, MOVIE_INFO_REWIND " %s", name + (strlen(name) - 3)); + else + sprintf(String, MOVIE_INFO_RERECORD " %s", name + (strlen(name) - 3)); + S9xMessage (S9X_INFO, S9X_FREEZE_FILE_INFO, String); + GFX.InfoStringTimeout /= 4; + } + else + { + sprintf(String, FREEZE_INFO_LOADED, S9xBasename(filename)); S9xMessage (S9X_INFO, S9X_FREEZE_FILE_INFO, String); } S9xCloseSnapshotFile (snapshot); return (TRUE); } + + { + const char * name = S9xBasename (filename); + sprintf(String, "Save file 00%s does not exist.", name + (strlen(name) - 1)); + S9xMessage (S9X_INFO, S9X_FREEZE_FILE_INFO, String); + } + return (FALSE); } @@ -733,8 +754,7 @@ if (strcasecmp (rom_filename, Memory.ROMFilename) != 0 && strcasecmp (S9xBasename (rom_filename), S9xBasename (Memory.ROMFilename)) != 0) { - S9xMessage (S9X_WARNING, S9X_FREEZE_ROM_NAME, - "Current loaded ROM image doesn't match that required by freeze-game file."); + S9xMessage (S9X_WARNING, S9X_FREEZE_ROM_NAME, FREEZE_ERR_WRONG_ROM_NAME); } // ## begin load ## @@ -930,7 +950,8 @@ S9xSRTCPostLoadState (); if (Settings.SDD1) S9xSDD1PostLoadState (); - + + // XXX is this correct? maybe it causes occasional desyncs when recording? IAPU.NextAPUTimerPos = CPU.Cycles * 10000L; IAPU.APUTimerCounter = 0; } @@ -1059,10 +1080,21 @@ void FreezeBlock (STREAM stream, char *name, uint8 *block, int size) { char buffer [512]; - sprintf (buffer, "%s:%06d:", name, size); - WRITE_STREAM (buffer, strlen (buffer), stream); + + if(size <= 999999) + sprintf (buffer, "%s:%06d:", name, size); + else + { + sprintf (buffer, "%s:------:", name); + buffer[6] = (unsigned char)((unsigned)size >> 24); + buffer[7] = (unsigned char)((unsigned)size >> 16); + buffer[8] = (unsigned char)((unsigned)size >> 8); + buffer[9] = (unsigned char)((unsigned)size >> 0); + } + buffer[11] = 0; + + WRITE_STREAM (buffer, 11, stream); WRITE_STREAM (block, size, stream); - } int UnfreezeStruct (STREAM stream, char *name, void *base, FreezeData *fields, @@ -1165,13 +1197,32 @@ int len = 0; int rem = 0; int rew_len; - if (READ_STREAM (buffer, 11, stream) != 11 || - strncmp (buffer, name, 3) != 0 || buffer [3] != ':' || - (len = atoi (&buffer [4])) == 0) +// if (READ_STREAM (buffer, 11, stream) != 11 || +// strncmp (buffer, name, 3) != 0 || buffer [3] != ':' || +// (len = atoi (&buffer [4])) == 0) + buffer[11] = 0; + if (READ_STREAM (buffer, 11, stream) != 11 + || strncmp (buffer, name, 3) != 0 + || buffer [3] != ':') { + err: + fprintf(stderr, "Found '%.11s', expected %s(%d)\n", buffer, name, size); REVERT_STREAM(stream, FIND_STREAM(stream)-11, 0); return (WRONG_FORMAT); } +// fprintf(stderr, "Found '%.11s', expected %s(%d) - OK\n", buffer, name, size); + if(buffer[4] == '-') + { + len = (((unsigned char)buffer[6]) << 24) + | (((unsigned char)buffer[7]) << 16) + | (((unsigned char)buffer[8]) << 8) + | (((unsigned char)buffer[9]) << 0); + } + else + { + len = atoi(buffer+4); + } + if(len <= 0) goto err; if (len > size) { diff -NaHudr snes9x-1.43-src/snes9x/snes9x.cpp snes9x-improvement7-src-dehacked/snes9x/snes9x.cpp --- snes9x-1.43-src/snes9x/snes9x.cpp 2004-12-31 00:15:47.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/snes9x.cpp 2005-04-09 00:59:27.000000000 +0300 @@ -96,6 +96,7 @@ #include "memmap.h" #include "display.h" #include "cheats.h" +#include "logger.h" #ifdef DEBUGGER extern FILE *trace; @@ -115,7 +116,7 @@ -hirom or -fh or -hr Force Hi-ROM memory map, useful for hacked ROM images.\n"); S9xMessage (S9X_INFO, S9X_USAGE, "\ -lorom or -fl or -lr Force Lo-ROM memory map, useful for hacked ROM images.\n"); - //FIXME: -old bsolete? + //FIXME: -old obsolete? S9xMessage (S9X_INFO, S9X_USAGE, "\ -old or -o Enable old-style SNES joypad emulation\n"); //FIXME: -noold obsolete? @@ -211,6 +212,33 @@ #endif S9xMessage (S9X_INFO, S9X_USAGE, "\ +-displayframerate or -dfr Display frame rate\n"); + S9xMessage (S9X_INFO, S9X_USAGE, "\ +-keypress Show keys pressed to stdout (along with frame\n\ + counter (only reliable during movie rec/play))"); + S9xMessage (S9X_INFO, S9X_USAGE, "\ +-wip Play/record movies as snes9x 1.43-WIP (aka. dev1)"); + S9xMessage (S9X_INFO, S9X_USAGE, "\ +-upanddown Override protection from pressing UP and DOWN\n\ + at the same time. Same for LEFT and RIGHT"); + S9xMessage (S9X_INFO, S9X_USAGE, "\ +-mute Disable audio output. Sound is still emulated."); + S9xMessage (S9X_INFO, S9X_USAGE, "\ +-fakemute Emulate as though -nosound were given, but you still\n\ + get sound output (if incorrect)"); + S9xMessage (S9X_INFO, S9X_USAGE, "\ +-maxframes X Exit after playing X frames. Only works for movies"); + S9xMessage (S9X_INFO, S9X_USAGE, "\ +-autodemo filename.smv Load movie filename.smv (read-only) at start."); + S9xMessage (S9X_INFO, S9X_USAGE, "\ +-oldturbo Turbo button renders all frames."); + S9xMessage (S9X_INFO, S9X_USAGE, "\ +-dumpstreams Save audio and video (raw) to audiostreamX.dat and\n\ + videostreamX.dat, where X increments on each CPU\n\ + reset. -autodemo will start with X=1"); + + + S9xMessage (S9X_INFO, S9X_USAGE, "\ \nROM image needs to be in Super MagiCom (*.smc), Super FamiCom (*.sfc),\n\ *.fig, or split (*.1, *.2, or sf32527a, sf32527b, etc) format and can be\n\ compressed with gzip or compress.\n"); @@ -693,6 +721,8 @@ printf("Snes9X " VERSION "\n"); exit(0); } + + #endif #ifdef STORM else if (strcasecmp(argv[i],"-nosecondjoy")==0){secondjoy=0;} @@ -708,6 +738,25 @@ } } #endif + // DeHackEd's modifications + else if (strcasecmp(argv[i], "-wip") == 0) + Settings.UseWIPAPUTiming = 1; + else if (strcasecmp(argv[i], "-upanddown") == 0) + Settings.DisallowLeftRight = 0; + else if (strcasecmp(argv[i], "-keypress") == 0) + Settings.DisplayPressedKeys = 1; + else if (strcasecmp(argv[i], "-mute") == 0) + Settings.Mute = 1; + else if (strcasecmp(argv[i], "-fakemute") == 0) + Settings.FakeMuteFix = 1; + else if (strcasecmp(argv[i], "-maxframes") == 0) + maxframes = atoi(argv[++i]); + else if (strcasecmp(argv[i], "-autodemo") == 0) + strncpy(autodemo, argv[++i], 120); + else if (strcasecmp(argv[i], "-oldturbo") == 0) + Settings.TurboSkipFrames = 0; + else if (strcasecmp(argv[i], "-dumpstreams") == 0) + dumpstreams = 1; else S9xParseArg (argv, i, argc); diff -NaHudr snes9x-1.43-src/snes9x/snes9x.h snes9x-improvement7-src-dehacked/snes9x/snes9x.h --- snes9x-1.43-src/snes9x/snes9x.h 2004-12-31 00:15:47.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/snes9x.h 2005-04-09 00:59:28.000000000 +0300 @@ -89,7 +89,7 @@ #ifndef _SNES9X_H_ #define _SNES9X_H_ -#define VERSION "1.43" +#define VERSION "1.43+" #include #include @@ -272,6 +272,7 @@ /* Joystick options */ bool8 SwapJoypads; bool8 JoystickEnabled; + bool8 DisallowLeftRight; /* ROM timing options (see also H_Max above) */ bool8 ForcePAL; @@ -333,18 +334,23 @@ bool8 DisableSampleCaching; bool8 DisableMasterVolume; bool8 SoundSync; + bool8 FakeMuteFix; bool8 InterpolatedSound; bool8 ThreadSound; bool8 Mute; + bool8 FAMute; bool8 NextAPUEnabled; uint8 AltSampleDecode; bool8 FixFrequency; + bool8 UseWIPAPUTiming; /* Graphics options */ bool8 SixteenBit; bool8 Transparency; bool8 SupportHiRes; bool8 Mode7Interpolate; + bool8 HeightExtend; + bool8 AspectRatio; /* SNES graphics options */ bool8 BGLayering; @@ -353,6 +359,7 @@ bool8 ForceNoTransparency; bool8 DisableHDMA; bool8 DisplayFrameRate; + bool8 DisplayPressedKeys; bool8 DisableRangeTimeOver; /* XXX: unused */ /* Others */ @@ -390,6 +397,8 @@ #ifdef DEBUG_MAXCOUNT unsigned int MaxCount; #endif + + int CurrentSaveSlot; }; struct SSNESGameFixes diff -NaHudr snes9x-1.43-src/snes9x/soundux.cpp snes9x-improvement7-src-dehacked/snes9x/soundux.cpp --- snes9x-1.43-src/snes9x/soundux.cpp 2004-12-31 00:15:44.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/soundux.cpp 2005-04-09 00:59:27.000000000 +0300 @@ -156,6 +156,9 @@ extern "C" void DecodeBlockAsm (int8 *, int16 *, int32 *, int32 *); extern "C" void DecodeBlockAsm2 (int8 *, int16 *, int32 *, int32 *); +int FakeMute = 1; +int DoFakeMute = 0; + // F is channel's current frequency and M is the 16-bit modulation waveform // from the previous channel multiplied by the current envelope volume level. #define PITCH_MOD(F,M) ((F) * ((((unsigned long) (M)) + 0x800000) >> 16) >> 7) @@ -174,10 +177,12 @@ { ch->state = SOUND_SILENT; ch->mode = MODE_NONE; + if(!DoFakeMute || !Settings.FakeMuteFix) { APU.DSP [APU_ENDX] |= 1 << i; APU.DSP [APU_KON] &= ~(1 << i); APU.DSP [APU_KOFF] &= ~(1 << i); APU.KeyedChannels &= ~(1 << i); + } } #ifdef __DJGPP END_OF_FUNCTION (S9xAPUSetEndOfSample) @@ -185,7 +190,9 @@ void S9xAPUSetEndX (int ch) { + if(!DoFakeMute || !Settings.FakeMuteFix) { APU.DSP [APU_ENDX] |= 1 << ch; + } } #ifdef __DJGPP END_OF_FUNCTION (S9xAPUSetEndX) @@ -865,6 +872,8 @@ int pitch_mod = SoundData.pitch_mod & ~APU.DSP[APU_NON]; + DoFakeMute=FakeMute; + for (uint32 J = 0; J < NUM_CHANNELS; J++) { int32 VL, VR; @@ -1148,6 +1157,7 @@ } stereo_exit: ; } + DoFakeMute=0; } #ifdef __DJGPP @@ -1160,6 +1170,8 @@ int pitch_mod = SoundData.pitch_mod & (~APU.DSP[APU_NON]); + DoFakeMute=FakeMute; + for (uint32 J = 0; J < NUM_CHANNELS; J++) { Channel *ch = &SoundData.channels[J]; @@ -1433,6 +1445,7 @@ } mono_exit: ; } + DoFakeMute=0; } #ifdef __DJGPP END_OF_FUNCTION(MixMono); diff -NaHudr snes9x-1.43-src/snes9x/spc700.cpp snes9x-improvement7-src-dehacked/snes9x/spc700.cpp --- snes9x-1.43-src/snes9x/spc700.cpp 2004-12-31 00:15:45.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/spc700.cpp 2005-04-09 00:59:27.000000000 +0300 @@ -131,7 +131,7 @@ { \ if (!ICPU.CPUExecuting) \ { \ - APU.Cycles = CPU.Cycles = CPU.NextEvent; \ + APU.Cycles = CPU.Cycles = CPU.NextEvent; \ S9xUpdateAPUTimer(); \ } \ else \ diff -NaHudr snes9x-1.43-src/snes9x/unix/unix.cpp snes9x-improvement7-src-dehacked/snes9x/unix/unix.cpp --- snes9x-1.43-src/snes9x/unix/unix.cpp 2004-12-31 00:15:47.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/unix/unix.cpp 2005-03-21 03:09:04.000000000 +0200 @@ -153,6 +153,7 @@ #include "soundux.h" #include "spc700.h" #include "spc7110.h" +#include "logger.h" #ifdef SPCTOOL #include "spctool/spc700.h" @@ -215,12 +216,15 @@ char *js_device [4] = {"/dev/js0", "/dev/js1", "/dev/js2", "/dev/js3"}; #endif +int FromPause = 1; + void InitJoysticks (); void ReadJoysticks (); #endif void InitTimer (); void *S9xProcessSound (void *); +void S9xProcessEvents(bool8 blocking); char *rom_filename = NULL; char *snapshot_filename = NULL; @@ -394,7 +398,7 @@ #else Settings.JoystickEnabled = FALSE; #endif - + Settings.DisallowLeftRight = 1; Settings.SoundPlaybackRate = 4; Settings.Stereo = TRUE; Settings.SoundBufferSize = 0; @@ -402,6 +406,7 @@ Settings.DisableSoundEcho = FALSE; #ifndef NOSOUND Settings.APUEnabled = Settings.NextAPUEnabled = TRUE; + Settings.InterpolatedSound = TRUE; #else Settings.APUEnabled = Settings.NextAPUEnabled = FALSE; #endif @@ -618,13 +623,15 @@ while (1) { - if (!Settings.Paused + if (!Settings.Paused || Settings.FrameAdvance #ifdef DEBUGGER || (CPU.Flags & (DEBUG_MODE_FLAG | SINGLE_STEP_FLAG)) #endif ) + { + Settings.FrameAdvance = 0; S9xMainLoop (); - + } if (Settings.Paused #ifdef DEBUGGER || (CPU.Flags & DEBUG_MODE_FLAG) @@ -1078,6 +1085,8 @@ bool8 S9xDeinitUpdate (int Width, int Height, bool8 /*sixteen_bit*/) { S9xPutImage (Width, Height); + if (!Settings.SoundSync) + S9xGenerateSound(); return (TRUE); } @@ -1188,12 +1197,13 @@ timeout.it_interval.tv_usec = 0; timeout.it_value.tv_sec = 0; timeout.it_value.tv_usec = 0; - if (setitimer (ITIMER_REAL, &timeout, NULL) < 0) - perror ("setitimer"); +// if (setitimer (ITIMER_REAL, &timeout, NULL) < 0) +// perror ("setitimer"); } void InitTimer () { + return; struct itimerval timeout; struct sigaction sa; @@ -1230,6 +1240,9 @@ void S9xSyncSpeed () { + IPPU.RenderThisFrame = TRUE; + if (dumpstreams) + return; #ifdef _NETPLAY_SUPPORT if (Settings.NetPlay) { @@ -1246,6 +1259,8 @@ IPPU.RenderThisFrame = TRUE; IPPU.SkippedFrames = 0; } + // Don't skip frames. EVER. + /* else { if (IPPU.SkippedFrames < 10) @@ -1259,6 +1274,7 @@ IPPU.SkippedFrames = 0; } } + */ } else #endif @@ -1312,30 +1328,48 @@ unsigned limit = Settings.SkipFrames == AUTO_FRAMERATE ? (timercmp(&next1, &now, <) ? 10 : 1) : Settings.SkipFrames; - - IPPU.RenderThisFrame = ++IPPU.SkippedFrames >= limit; - if(IPPU.RenderThisFrame) - { - IPPU.SkippedFrames = 0; - } - else - { - /* If we were behind the schedule, check how much it is */ - if(timercmp(&next1, &now, <)) - { - unsigned lag = - (now.tv_sec - next1.tv_sec) * 1000000 - + now.tv_usec - next1.tv_usec; - if(lag >= 1000000) - { - /* More than a second behind means probably - * pause. The next line prevents the magic - * fast-forward effect. - */ - next1 = now; - } - } - } + + + + + if (FromPause) + { + next1 = now; + FromPause = 0; + } + else + { + // Unforseen events, such as SIGSTOP, severe system lag, etc + unsigned lag = (now.tv_sec - next1.tv_sec) * 1000000 + now.tv_usec - next1.tv_usec; + + // I'm using 0.25 of a second instead of 1.00 +// if (lag >= 250000) +// next1 = now; + + } +// IPPU.RenderThisFrame = ++IPPU.SkippedFrames >= limit; +// if(IPPU.RenderThisFrame) +// { +// IPPU.SkippedFrames = 0; +// } +// else +// { +// /* If we were behind the schedule, check how much it is */ +// if(timercmp(&next1, &now, <)) +// { +// unsigned lag = +// (now.tv_sec - next1.tv_sec) * 1000000 +// + now.tv_usec - next1.tv_usec; +// if(lag >= 1000000) +// { +// /* More than a second behind means probably +// * pause. The next line prevents the magic +// * fast-forward effect. +// */ +// next1 = now; +// } +// } +// } /* Delay until we're completed this frame */ @@ -1662,7 +1696,28 @@ /* Linux version (OSS) */ int J, K; - if ((so.sound_fd = open ("/dev/dsp", O_WRONLY)) < 0) + if (Settings.Mute) + { + + // Do all sound setup without opening /dev/dsp + so.sixteen_bit = true; + so.stereo = true; + so.playback_rate = Rates[mode & 0x07]; + S9xSetPlaybackRate (so.playback_rate); + + if (buffer_size == 0) + buffer_size = BufferSizes [mode & 7]; + + if (buffer_size > MAX_BUFFER_SIZE / 4) + buffer_size = MAX_BUFFER_SIZE / 4; + if (so.sixteen_bit) + buffer_size *= 2; + if (so.stereo) + buffer_size *= 2; + return TRUE; + } + + if ((so.sound_fd = open ("/dev/dsp", O_NONBLOCK|O_WRONLY)) < 0) { perror ("/dev/dsp"); return (FALSE); @@ -1815,6 +1870,7 @@ { /* Linux and Sun versions */ +/* Mass comment-out! int bytes_so_far = so.sixteen_bit ? (so.samples_mixed_so_far << 1) : so.samples_mixed_so_far; if (Settings.SoundSync == 2) @@ -1893,6 +1949,18 @@ S9xProcessSound (NULL); pending_signal = FALSE; } + + */ + uint8 Buf[262144]; + unsigned N = so.playback_rate * Settings.FrameTime / 1000000; + if (so.stereo) N *= 2; + S9xMixSamplesO(Buf, N, 0); + if (so.sixteen_bit) N *= 2; + + if (!Settings.Mute) + write(so.sound_fd, Buf, N); + + AudioLogger(Buf, N); } void *S9xProcessSound (void *) @@ -1901,7 +1969,8 @@ /* If threads in use, this is to loop indefinitely */ /* If not, this will be called by timer */ - + S9xGenerateSound(); + return NULL; #ifdef __linux audio_buf_info info; @@ -2019,7 +2088,8 @@ } if(I == 0) break; - I = write (so.sound_fd, (char *) Buf + byte_offset, I); + if (!Settings.Mute) + I = write (so.sound_fd, (char *) Buf + byte_offset, I); if (I > 0) { bytes_to_write -= I; @@ -2039,7 +2109,7 @@ #endif #ifdef __sun - if (!Settings.ThreadSound) + if (!Settings.ThreadSound && !Settings.Mute) write (so.sound_fd, NULL, 0); #endif diff -NaHudr snes9x-1.43-src/snes9x/unix/x11.cpp snes9x-improvement7-src-dehacked/snes9x/unix/x11.cpp --- snes9x-1.43-src/snes9x/unix/x11.cpp 2004-12-31 00:15:47.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/unix/x11.cpp 2005-03-21 15:44:02.000000000 +0200 @@ -108,6 +108,7 @@ #include "soundux.h" #include "x11.h" #include "spc7110.h" +#include "logger.h" #if 0 #define QT_CLEAN_NAMESPACE @@ -158,6 +159,8 @@ #define ALL_DEVICE_EVENTS 0 #endif +extern int FromPause; + typedef struct { bool8 full_screen_available; @@ -1004,8 +1007,9 @@ WRITE_MOVIE_ASK, LOAD_MOVIE_ASK, STOP_MOVIE, - - FUNC_LAST = STOP_MOVIE /* update this to match the last token */ + READONLY_MOVIE_TOGGLE, + FRAMEADVANCE, + FUNC_LAST = FRAMEADVANCE /* update this to match the last token */ }; static const char* GetFuncName(functiontype func) { @@ -1044,6 +1048,8 @@ case WRITE_MOVIE_ASK: return "WRITE_MOVIE_ASK"; case LOAD_MOVIE_ASK: return "LOAD_MOVIE_ASK"; case STOP_MOVIE: return "STOP_MOVIE"; + case READONLY_MOVIE_TOGGLE: return "READONLY_MOVIE_TOGGLE"; + case FRAMEADVANCE: return "FRAMEADVANCE"; default: return "unknown"; } } @@ -1262,8 +1268,11 @@ Define(TOGGLE_TRANSP, 0, XK_9); Define(TOGGLE_CLIPWIN, 0, XK_BackSpace); Define(TOGGLE_CONTROLLER, 0, XK_7); - Define(TOGGLE_INTERPSOUND, 0, XK_bracketleft, Alt(XK_8)); - Define(TOGGLE_SYNCSOUND, 0, XK_bracketright, Alt(XK_9)); +// I'm claiming these in the name of Frame Advance +// Define(TOGGLE_INTERPSOUND, 0, XK_bracketleft, Alt(XK_8)); +// Define(TOGGLE_SYNCSOUND, 0, XK_bracketright, Alt(XK_9)); + Define(TOGGLE_INTERPSOUND, 0, Alt(XK_8)); + Define(TOGGLE_SYNCSOUND, 0, Alt(XK_9)); Define(TOGGLE_MODE7INTERP, 0, Shift(XK_9)); Define(TURBO_ENABLE, 0, XK_Tab); Define(SUPERSCOPE_TURBO, 0, XK_grave, XK_asciitilde, XK_numbersign); @@ -1274,7 +1283,8 @@ Define(WRITE_MOVIE_ASK, 0, Shift(XK_1)); Define(LOAD_MOVIE_ASK, 0, Shift(XK_2)); Define(STOP_MOVIE, 0, Shift(XK_3)); - + Define(READONLY_MOVIE_TOGGLE,0,Shift(XK_4)); + Define(FRAMEADVANCE, 0, XK_backslash, XK_bracketleft, XK_bracketright); VerifySetup(); } public: @@ -1314,6 +1324,13 @@ } #endif + if (autodemo[0]) + { + S9xMovieOpen(autodemo, true); + printf("Autodemo loading.\n"); + autodemo[0] = 0; + } + while (block || CheckForPendingXEvents (GUI.display)) { XEvent event; @@ -1571,6 +1588,7 @@ if(event.type != KeyPress) break; Settings.Paused ^= 1; + FromPause = 1; S9xDisplayStateChange ("Pause", Settings.Paused); break; @@ -1698,6 +1716,7 @@ case KeyboardSetup::TURBO_ENABLE: { Settings.TurboMode = event.type == KeyPress; + FromPause = 1; break; } case KeyboardSetup::SUPERSCOPE_TURBO: @@ -1730,15 +1749,45 @@ } case KeyboardSetup::WRITE_MOVIE_ASK: { - if(event.type != KeyPress) break; + char temp[128]; + if(event.type != KeyPress) break; + FromPause = 1; + int Reset = 0; + + resetq: + printf("From reset? (yes/no/cancel): "); + fflush(stdout); + + fgets(temp, 127, stdin); + if (temp[0] == 'y' || temp[0] == 'Y') + Reset = 1; + else if (temp[0] == 'n' || temp[0] == 'N') + Reset = 0; + else if (temp[0] == 'c' || temp[0] == 'C') + break; + else + goto resetq; + + int numplayers; + playersq: + printf("Number of players (1/2/3/4/5/cancel): "); + fflush(stdout); + fgets(temp, 127, stdin); + if (temp[0] == 'c' || temp[0] == 'C') + break; + else + numplayers = atoi(temp); + if (numplayers < 1 || numplayers > 5) + goto playersq; + wchar_t name[MOVIE_MAX_METADATA] = {0}; if(S9xMovieActive()) S9xMovieStop(FALSE); S9xMovieCreate(S9xChooseMovieFilename(FALSE), - 0x1F, - //MOVIE_OPT_FROM_SNAPSHOT + (1 << numplayers)-1 , + (!Reset) ? MOVIE_OPT_FROM_SNAPSHOT : MOVIE_OPT_FROM_RESET - , + , 0, name,0); break; } @@ -1757,7 +1806,18 @@ if(S9xMovieActive()) S9xMovieStop(FALSE); break; } - + case KeyboardSetup::READONLY_MOVIE_TOGGLE: + { + // I'll get to it later + break; + + } + case KeyboardSetup::FRAMEADVANCE: + { + if (event.type != KeyPress) break; + Settings.FrameAdvance=1; + break; + } /* Do not put a "default" case here, or you'll * miss the compiler warning about unhandled * enumeration values @@ -2050,6 +2110,7 @@ GUI.last_snes_width = snes_width; GUI.last_snes_height = snes_height; + VideoLogger(GUI.image_date, snes_width, snes_height, GUI.depth); if (GUI.box.x != GUI.old_box.x || GUI.box.y != GUI.old_box.y || GUI.box.width != GUI.old_box.width || GUI.box.height != GUI.old_box.height) @@ -2211,6 +2272,8 @@ { static char path [PATH_MAX]; char buffer [PATH_MAX]; + + FromPause = 1; XAutoRepeatOn (GUI.display); diff -NaHudr snes9x-1.43-src/snes9x/unzip/crc32.h snes9x-improvement7-src-dehacked/snes9x/unzip/crc32.h --- snes9x-1.43-src/snes9x/unzip/crc32.h 1970-01-01 02:00:00.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/unzip/crc32.h 2005-03-20 23:46:28.000000000 +0200 @@ -0,0 +1,441 @@ +/* crc32.h -- tables for rapid CRC calculation + * Generated automatically by crc32.c + */ + +local const unsigned long FAR crc_table[TBLS][256] = +{ + { + 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL, + 0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL, + 0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL, + 0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL, + 0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL, + 0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL, + 0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL, + 0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL, + 0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL, + 0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL, + 0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL, + 0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL, + 0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL, + 0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL, + 0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL, + 0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL, + 0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL, + 0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL, + 0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL, + 0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL, + 0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL, + 0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL, + 0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL, + 0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL, + 0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL, + 0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL, + 0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL, + 0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL, + 0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL, + 0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL, + 0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL, + 0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL, + 0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL, + 0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL, + 0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL, + 0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL, + 0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL, + 0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL, + 0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL, + 0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL, + 0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL, + 0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL, + 0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL, + 0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL, + 0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL, + 0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL, + 0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL, + 0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL, + 0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL, + 0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL, + 0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL, + 0x2d02ef8dUL +#ifdef BYFOUR + }, + { + 0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL, + 0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL, + 0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL, + 0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL, + 0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL, + 0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL, + 0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL, + 0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL, + 0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL, + 0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL, + 0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL, + 0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL, + 0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL, + 0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL, + 0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL, + 0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL, + 0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL, + 0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL, + 0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL, + 0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL, + 0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL, + 0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL, + 0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL, + 0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL, + 0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL, + 0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL, + 0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL, + 0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL, + 0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL, + 0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL, + 0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL, + 0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL, + 0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL, + 0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL, + 0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL, + 0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL, + 0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL, + 0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL, + 0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL, + 0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL, + 0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL, + 0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL, + 0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL, + 0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL, + 0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL, + 0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL, + 0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL, + 0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL, + 0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL, + 0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL, + 0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL, + 0x9324fd72UL + }, + { + 0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL, + 0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL, + 0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL, + 0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL, + 0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL, + 0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL, + 0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL, + 0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL, + 0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL, + 0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL, + 0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL, + 0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL, + 0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL, + 0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL, + 0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL, + 0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL, + 0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL, + 0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL, + 0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL, + 0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL, + 0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL, + 0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL, + 0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL, + 0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL, + 0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL, + 0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL, + 0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL, + 0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL, + 0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL, + 0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL, + 0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL, + 0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL, + 0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL, + 0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL, + 0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL, + 0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL, + 0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL, + 0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL, + 0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL, + 0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL, + 0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL, + 0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL, + 0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL, + 0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL, + 0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL, + 0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL, + 0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL, + 0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL, + 0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL, + 0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL, + 0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL, + 0xbe9834edUL + }, + { + 0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL, + 0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL, + 0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL, + 0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL, + 0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL, + 0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL, + 0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL, + 0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL, + 0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL, + 0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL, + 0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL, + 0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL, + 0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL, + 0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL, + 0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL, + 0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL, + 0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL, + 0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL, + 0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL, + 0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL, + 0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL, + 0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL, + 0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL, + 0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL, + 0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL, + 0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL, + 0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL, + 0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL, + 0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL, + 0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL, + 0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL, + 0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL, + 0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL, + 0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL, + 0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL, + 0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL, + 0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL, + 0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL, + 0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL, + 0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL, + 0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL, + 0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL, + 0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL, + 0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL, + 0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL, + 0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL, + 0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL, + 0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL, + 0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL, + 0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL, + 0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL, + 0xde0506f1UL + }, + { + 0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL, + 0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL, + 0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL, + 0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL, + 0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL, + 0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL, + 0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL, + 0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL, + 0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL, + 0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL, + 0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL, + 0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL, + 0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL, + 0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL, + 0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL, + 0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL, + 0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL, + 0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL, + 0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL, + 0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL, + 0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL, + 0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL, + 0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL, + 0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL, + 0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL, + 0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL, + 0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL, + 0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL, + 0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL, + 0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL, + 0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL, + 0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL, + 0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL, + 0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL, + 0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL, + 0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL, + 0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL, + 0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL, + 0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL, + 0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL, + 0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL, + 0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL, + 0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL, + 0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL, + 0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL, + 0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL, + 0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL, + 0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL, + 0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL, + 0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL, + 0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL, + 0x8def022dUL + }, + { + 0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL, + 0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL, + 0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL, + 0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL, + 0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL, + 0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL, + 0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL, + 0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL, + 0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL, + 0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL, + 0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL, + 0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL, + 0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL, + 0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL, + 0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL, + 0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL, + 0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL, + 0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL, + 0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL, + 0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL, + 0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL, + 0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL, + 0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL, + 0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL, + 0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL, + 0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL, + 0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL, + 0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL, + 0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL, + 0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL, + 0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL, + 0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL, + 0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL, + 0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL, + 0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL, + 0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL, + 0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL, + 0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL, + 0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL, + 0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL, + 0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL, + 0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL, + 0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL, + 0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL, + 0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL, + 0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL, + 0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL, + 0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL, + 0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL, + 0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL, + 0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL, + 0x72fd2493UL + }, + { + 0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL, + 0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL, + 0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL, + 0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL, + 0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL, + 0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL, + 0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL, + 0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL, + 0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL, + 0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL, + 0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL, + 0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL, + 0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL, + 0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL, + 0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL, + 0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL, + 0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL, + 0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL, + 0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL, + 0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL, + 0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL, + 0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL, + 0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL, + 0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL, + 0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL, + 0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL, + 0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL, + 0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL, + 0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL, + 0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL, + 0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL, + 0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL, + 0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL, + 0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL, + 0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL, + 0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL, + 0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL, + 0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL, + 0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL, + 0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL, + 0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL, + 0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL, + 0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL, + 0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL, + 0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL, + 0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL, + 0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL, + 0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL, + 0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL, + 0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL, + 0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL, + 0xed3498beUL + }, + { + 0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL, + 0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL, + 0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL, + 0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL, + 0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL, + 0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL, + 0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL, + 0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL, + 0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL, + 0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL, + 0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL, + 0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL, + 0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL, + 0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL, + 0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL, + 0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL, + 0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL, + 0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL, + 0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL, + 0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL, + 0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL, + 0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL, + 0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL, + 0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL, + 0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL, + 0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL, + 0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL, + 0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL, + 0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL, + 0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL, + 0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL, + 0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL, + 0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL, + 0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL, + 0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL, + 0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL, + 0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL, + 0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL, + 0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL, + 0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL, + 0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL, + 0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL, + 0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL, + 0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL, + 0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL, + 0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL, + 0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL, + 0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL, + 0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL, + 0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL, + 0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL, + 0xf10605deUL +#endif + } +}; diff -NaHudr snes9x-1.43-src/snes9x/win32.cpp snes9x-improvement7-src-dehacked/snes9x/win32.cpp --- snes9x-1.43-src/snes9x/win32.cpp 2004-12-31 00:15:47.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/win32.cpp 2005-04-09 00:59:27.000000000 +0300 @@ -100,7 +100,7 @@ #include "soundux.h" #include "netplay.h" #include "movie.h" -#include "..\AVIOutput.h" +#include "..\AVIOutput.h" #include "..\language.h" #include @@ -138,7 +138,7 @@ void DoAVIClose(int reason); static void DoAVIVideoFrame(SSurface* source_surface, int width, int height, bool8 sixteen_bit); -static void S9xWinScanJoypads (); +void S9xWinScanJoypads (); typedef struct { @@ -607,7 +607,8 @@ return; if( mute || Settings.ForcedPause || - Settings.Paused || Settings.StopEmulation || GUI.AVIOut) + Settings.Paused && (Settings.FAMute || !(Settings.FrameAdvance) && !(DirectX.IdleCount < 8)) // gives frame advance sound + || Settings.StopEmulation || GUI.AVIOut) { if (so.sixteen_bit) { @@ -737,6 +738,15 @@ void S9xSyncSpeed( void) { +/* if (Settings.FrameAdvance) + { + CHECK_SOUND(); S9xProcessEvents(FALSE); + IPPU.RenderThisFrame=TRUE; + IPPU.SkippedFrames = 0; + Settings.FrameAdvance--; + return; + } +*/ #ifdef NETPLAY_SUPPORT if (Settings.NetPlay) { @@ -835,36 +845,36 @@ } else { - if (IPPU.SkippedFrames < Settings.AutoMaxSkipFrames) - { - IPPU.SkippedFrames++; - IPPU.RenderThisFrame = FALSE; - } - else - { - IPPU.RenderThisFrame = TRUE; - IPPU.SkippedFrames = 0; - } + if (IPPU.SkippedFrames < Settings.AutoMaxSkipFrames) + { + IPPU.SkippedFrames++; + IPPU.RenderThisFrame = FALSE; + } + else + { + IPPU.RenderThisFrame = TRUE; + IPPU.SkippedFrames = 0; + } } } else { - uint32 SkipFrames; - if(Settings.TurboMode) - SkipFrames = Settings.TurboSkipFrames; - else - SkipFrames = (Settings.SkipFrames == AUTO_FRAMERATE) ? 0 : Settings.SkipFrames; - if (++IPPU.FrameSkip >= SkipFrames) - { - IPPU.FrameSkip = 0; - IPPU.SkippedFrames = 0; - IPPU.RenderThisFrame = TRUE; - } - else - { - IPPU.SkippedFrames++; - IPPU.RenderThisFrame = FALSE; - } + uint32 SkipFrames; + if(Settings.TurboMode) + SkipFrames = Settings.TurboSkipFrames; + else + SkipFrames = (Settings.SkipFrames == AUTO_FRAMERATE) ? 0 : Settings.SkipFrames; + if (++IPPU.FrameSkip >= SkipFrames) + { + IPPU.FrameSkip = 0; + IPPU.SkippedFrames = 0; + IPPU.RenderThisFrame = TRUE; + } + else + { + IPPU.SkippedFrames++; + IPPU.RenderThisFrame = FALSE; + } } } @@ -897,6 +907,9 @@ bool S9xGetState (WORD KeyIdent) { + if(KeyIdent == 0 || KeyIdent == VK_ESCAPE) // if it's the 'disabled' key, it's never pressed + return true; + if (KeyIdent & 0x8000) { int j = (KeyIdent >> 8) & 15; @@ -970,7 +983,7 @@ second = false; } -static void S9xWinScanJoypads () +void S9xWinScanJoypads () { uint8 PadState[2]; JOYINFOEX jie; @@ -1111,49 +1124,91 @@ } } + for (int J = 0; J < 5; J++) { if (Joypad [J].Enabled) { - PadState[0] = 0; - PadState[0] |= !S9xGetState (Joypad[J].R) ? 16 : 0; - PadState[0] |= !S9xGetState (Joypad[J].L) ? 32 : 0; - PadState[0] |= !S9xGetState (Joypad[J].X) ? 64 : 0; - PadState[0] |= !S9xGetState (Joypad[J].A) ? 128 : 0; - - PadState[1] = 0; - PadState[1] |= !S9xGetState (Joypad[J].Right) ? 1 : 0; - PadState[1] |= !S9xGetState (Joypad[J].Right_Up) ? 1 + 8 : 0; - PadState[1] |= !S9xGetState (Joypad[J].Right_Down)? 1 + 4 : 0; - PadState[1] |= !S9xGetState (Joypad[J].Left) ? 2 : 0; - PadState[1] |= !S9xGetState (Joypad[J].Left_Up)? 2 + 8 : 0; - PadState[1] |= !S9xGetState (Joypad[J].Left_Down)? 2 + 4 : 0; - PadState[1] |= !S9xGetState (Joypad[J].Down) ? 4 : 0; - PadState[1] |= !S9xGetState (Joypad[J].Up) ? 8 : 0; - PadState[1] |= !S9xGetState (Joypad[J].Start) ? 16 : 0; - PadState[1] |= !S9xGetState (Joypad[J].Select) ? 32 : 0; - PadState[1] |= !S9xGetState (Joypad[J].Y) ? 64 : 0; - PadState[1] |= !S9xGetState (Joypad[J].B) ? 128 : 0; + // toggle checks + { + PadState[0] = 0; + PadState[0] |= ToggleJoypadStorage[J].R||TurboToggleJoypadStorage[J].R ? 16 : 0; + PadState[0] |= ToggleJoypadStorage[J].L||TurboToggleJoypadStorage[J].L ? 32 : 0; + PadState[0] |= ToggleJoypadStorage[J].X||TurboToggleJoypadStorage[J].X ? 64 : 0; + PadState[0] |= ToggleJoypadStorage[J].A||TurboToggleJoypadStorage[J].A ? 128 : 0; + + PadState[1] = 0; + PadState[1] |= ToggleJoypadStorage[J].Right ? 1 : 0; +/// PadState[1] |= false ? 1 + 8 : 0; +/// PadState[1] |= false ? 1 + 4 : 0; + PadState[1] |= ToggleJoypadStorage[J].Left ? 2 : 0; +/// PadState[1] |= false ? 2 + 8 : 0; +/// PadState[1] |= false ? 2 + 4 : 0; + PadState[1] |= ToggleJoypadStorage[J].Down ? 4 : 0; + PadState[1] |= ToggleJoypadStorage[J].Up ? 8 : 0; + PadState[1] |= ToggleJoypadStorage[J].Start||TurboToggleJoypadStorage[J].Start ? 16 : 0; + PadState[1] |= ToggleJoypadStorage[J].Select||TurboToggleJoypadStorage[J].Select ? 32 : 0; + PadState[1] |= ToggleJoypadStorage[J].Y||TurboToggleJoypadStorage[J].Y ? 64 : 0; + PadState[1] |= ToggleJoypadStorage[J].B||TurboToggleJoypadStorage[J].B ? 128 : 0; + } + // togglify + if(S9xGetState(Joypad[J+5].Left)) + { +/// PadState[0] = 0; + PadState[0] |= (!S9xGetState(Joypad[J].R)||!S9xGetState(Joypad[J+5].R)) ? 16 : 0; + PadState[0] |= (!S9xGetState(Joypad[J].L)||!S9xGetState(Joypad[J+5].L)) ? 32 : 0; + PadState[0] |= (!S9xGetState(Joypad[J].X)||!S9xGetState(Joypad[J+5].X)) ? 64 : 0; + PadState[0] |= (!S9xGetState(Joypad[J].A)||!S9xGetState(Joypad[J+5].A)) ? 128 : 0; + +/// PadState[1] = 0; + PadState[1] |= (!S9xGetState(Joypad[J].Right)) ? 1 : 0; + PadState[1] |= (!S9xGetState(Joypad[J].Right_Up)) ? 1 + 8 : 0; + PadState[1] |= (!S9xGetState(Joypad[J].Right_Down)) ? 1 + 4 : 0; + PadState[1] |= (!S9xGetState(Joypad[J].Left)) ? 2 : 0; + PadState[1] |= (!S9xGetState(Joypad[J].Left_Up)) ? 2 + 8 : 0; + PadState[1] |= (!S9xGetState(Joypad[J].Left_Down)) ? 2 + 4 : 0; + PadState[1] |= (!S9xGetState(Joypad[J].Down)) ? 4 : 0; + PadState[1] |= (!S9xGetState(Joypad[J].Up)) ? 8 : 0; + PadState[1] |= (!S9xGetState(Joypad[J].Start)||!S9xGetState(Joypad[J+5].Start)) ? 16 : 0; + PadState[1] |= (!S9xGetState(Joypad[J].Select)||!S9xGetState(Joypad[J+5].Select)) ? 32 : 0; + PadState[1] |= (!S9xGetState(Joypad[J].Y)||!S9xGetState(Joypad[J+5].Y)) ? 64 : 0; + PadState[1] |= (!S9xGetState(Joypad[J].B)||!S9xGetState(Joypad[J+5].B)) ? 128 : 0; + } + + bool turbofy = !S9xGetState(Joypad[J+5].Up); // All Mod for turbo //handle turbo case! - if((GUI.TurboMask&TURBO_A_MASK)&&(PadState[0]&128)) - PadState[0]^=(joypads[J]&128); - if((GUI.TurboMask&TURBO_B_MASK)&&(PadState[1]&128)) - PadState[1]^=((joypads[J]&(128<<8))>>8); - if((GUI.TurboMask&TURBO_Y_MASK)&&(PadState[1]&64)) - PadState[1]^=((joypads[J]&(64<<8))>>8); - if((GUI.TurboMask&TURBO_X_MASK)&&(PadState[0]&64)) - PadState[0]^=(joypads[J]&64); - if((GUI.TurboMask&TURBO_L_MASK)&&(PadState[0]&32)) - PadState[0]^=(joypads[J]&32); - if((GUI.TurboMask&TURBO_R_MASK)&&(PadState[0]&16)) - PadState[0]^=(joypads[J]&16); - if((GUI.TurboMask&TURBO_SEL_MASK)&&(PadState[1]&32)) - PadState[1]^=((joypads[J]&(32<<8))>>8); - if((GUI.TurboMask&TURBO_STA_MASK)&&(PadState[1]&16)) - PadState[1]^=((joypads[J]&(16<<8))>>8); + if(turbofy || ((GUI.TurboMask&TURBO_A_MASK))&&(PadState[0]&128) || !S9xGetState(Joypad[J+5].A )) PadState[0]^=(joypads[J]&128); + if(turbofy || ((GUI.TurboMask&TURBO_B_MASK))&&(PadState[1]&128) || !S9xGetState(Joypad[J+5].B )) PadState[1]^=((joypads[J]&(128<<8))>>8); + if(turbofy || ((GUI.TurboMask&TURBO_Y_MASK))&&(PadState[1]&64) || !S9xGetState(Joypad[J+5].Y )) PadState[1]^=((joypads[J]&(64<<8))>>8); + if(turbofy || ((GUI.TurboMask&TURBO_X_MASK))&&(PadState[0]&64) || !S9xGetState(Joypad[J+5].X )) PadState[0]^=(joypads[J]&64); + if(turbofy || ((GUI.TurboMask&TURBO_L_MASK))&&(PadState[0]&32) || !S9xGetState(Joypad[J+5].L )) PadState[0]^=(joypads[J]&32); + if(turbofy || ((GUI.TurboMask&TURBO_R_MASK))&&(PadState[0]&16) || !S9xGetState(Joypad[J+5].R )) PadState[0]^=(joypads[J]&16); + if(turbofy || ((GUI.TurboMask&TURBO_STA_MASK))&&(PadState[1]&16) || !S9xGetState(Joypad[J+5].Start )) PadState[1]^=((joypads[J]&(16<<8))>>8); + if(turbofy || ((GUI.TurboMask&TURBO_SEL_MASK))&&(PadState[1]&32) || !S9xGetState(Joypad[J+5].Select)) PadState[1]^=((joypads[J]&(32<<8))>>8); + + if(TurboToggleJoypadStorage[J].A ) PadState[0]^=(joypads[J]&128); + if(TurboToggleJoypadStorage[J].B ) PadState[1]^=((joypads[J]&(128<<8))>>8); + if(TurboToggleJoypadStorage[J].Y ) PadState[1]^=((joypads[J]&(64<<8))>>8); + if(TurboToggleJoypadStorage[J].X ) PadState[0]^=(joypads[J]&64); + if(TurboToggleJoypadStorage[J].L ) PadState[0]^=(joypads[J]&32); + if(TurboToggleJoypadStorage[J].R ) PadState[0]^=(joypads[J]&16); + if(TurboToggleJoypadStorage[J].Start ) PadState[1]^=((joypads[J]&(16<<8))>>8); + if(TurboToggleJoypadStorage[J].Select) PadState[1]^=((joypads[J]&(32<<8))>>8); //end turbo case... + + // enforce left+right/up+down disallowance here to + // avoid recording unused l+r/u+d that will cause desyncs + // when played back with l+r/u+d is allowed + if(Settings.DisallowLeftRight) + { + if((PadState[1] & 2) != 0) + PadState[1] &= ~(1); + if((PadState[1] & 8) != 0) + PadState[1] &= ~(4); + } + joypads [J] = PadState [0] | (PadState [1] << 8) | 0x80000000; } else @@ -1357,9 +1412,9 @@ lpDDSurface2 = DirectX.lpDDSOffScreen2; PrimarySurfaceLockFailed = true; srcRect.top = 0; - srcRect.bottom = Height; + srcRect.bottom = Height - (Settings.HeightExtend?0:15); srcRect.left = 0; - srcRect.right = Width; + srcRect.right = Width; } else { @@ -1442,14 +1497,45 @@ ClientToScreen (GUI.hWnd, &p); GetClientRect (GUI.hWnd, &dstRect); - OffsetRect(&dstRect, p.x, p.y); - */ - p.x = p.y = 0; - ClientToScreen (GUI.hWnd, &p); - GetClientRect (GUI.hWnd, &dstRect); - dstRect.bottom = int(double(dstRect.bottom) * double(239.0 / 240.0)); OffsetRect(&dstRect, p.x, p.y); - } + */ + p.x = p.y = 0; + ClientToScreen (GUI.hWnd, &p); + GetClientRect (GUI.hWnd, &dstRect); +// dstRect.bottom = int(double(dstRect.bottom) * double(239.0 / 240.0)); + + if(Settings.AspectRatio) + { + int width = dstRect.right - dstRect.left; + int height = dstRect.bottom - dstRect.top; + + int oldWidth = SNES_WIDTH; + int oldHeight = Settings.HeightExtend ? SNES_HEIGHT_EXTENDED : SNES_HEIGHT; + int newWidth, newHeight; + + if(oldWidth * height > oldHeight * width) + { + newWidth = oldWidth*width/oldWidth; + newHeight = oldHeight*width/oldWidth; + } + else + { + newWidth = oldWidth*height/oldHeight; + newHeight = oldHeight*height/oldHeight; + } + int xOffset = (width - newWidth)/2; + int yOffset = (height - newHeight)/2; + + dstRect.right = dstRect.left + newWidth; + dstRect.bottom = dstRect.top + newHeight; + + OffsetRect(&dstRect, p.x + xOffset, p.y + yOffset); + } + else + { + OffsetRect(&dstRect, p.x, p.y); + } + } else { GetClientRect (GUI.hWnd, &dstRect); @@ -1463,7 +1549,7 @@ height *= 2; } p.x = ((dstRect.right - dstRect.left) - width) >> 1; - p.y = ((dstRect.bottom - dstRect.top) - height) >> 1; + p.y = ((dstRect.bottom - dstRect.top) - height) >> 1; ClientToScreen (GUI.hWnd, &p); dstRect.top = p.y; @@ -2340,7 +2426,7 @@ // create new writer AVICreate(&GUI.AVIOut); - int framerate = (Settings.PAL) ? 50 : 60; + int framerate = Memory.ROMFramesPerSecond; int frameskip = Settings.SkipFrames; if(frameskip == 0 || frameskip == AUTO_FRAMERATE) frameskip = 1; diff -NaHudr snes9x-1.43-src/snes9x/xenofarm.sh snes9x-improvement7-src-dehacked/snes9x/xenofarm.sh --- snes9x-1.43-src/snes9x/xenofarm.sh 2004-12-31 00:15:44.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/xenofarm.sh 2005-03-20 23:46:31.000000000 +0200 @@ -1,113 +1,113 @@ -#! /bin/sh - -# This script is part of the automated Xenofarm testing testing. For -# more information about Xenofarm see http://www.lysator.liu.se/xenofarm/ - -# $Id: xenofarm.sh,v 1.6 2003/11/09 14:02:39 pbortas Exp $ -# This file scripts the xenofarm actions and creates a result package -# to send back. - -#FIXME: snes9x doesn't really need MAKE_FLAGS. Clean out later. - -BUILDDIR=. -#OS=`uname -s -r -m|sed \"s/ /-/g\"|tr \"[A-Z]\" \"[a-z]\"|tr \"/()\" \"___\"` -#BUILDDIR=build/$(OS) -MAKE=${MAKE-make} -PATH=$PATH:/usr/ccs/bin -export PATH - -log() { - echo $1 | tee -a build/xenofarm/mainlog.txt -} - -log_start() { - log "BEGIN $1" - TZ=GMT date >> build/xenofarm/mainlog.txt -} - -log_end() { - LASTERR=$1 - if [ "$1" = "0" ] ; then - log "PASS" - else - log "FAIL" - fi - TZ=GMT date >> build/xenofarm/mainlog.txt -} - -xenofarm_build() { - log_start compile - "`pwd`/configure" >> build/xenofarm/compilelog.txt 2>&1 && - $MAKE $MAKE_FLAGS >> build/xenofarm/compilelog.txt 2>&1 - log_end $? - [ $LASTERR = 0 ] || return 1 -} - -xenofarm_post_build() { - log_start verify - $MAKE $MAKE_FLAGS verify > build/xenofarm/verifylog.txt 2>&1 - log_end $? - [ $LASTERR = 0 ] || return 1 - - log_start binrelease - $MAKE $MAKE_FLAGS bin-release > build/xenofarm/binreleaselog.txt 2>&1 - log_end $? - [ $LASTERR = 0 ] || return 1 -} - -fail_builddir() { - echo "FATAL: Failed to create build directory!" - exit 1 -} - -# main code - -test -d build || mkdir build 2>&1 && -rm -rf build/xenofarm 2>&1 && -mkdir build/xenofarm 2>&1 || fail_builddir - -LC_CTYPE=C -export LC_CTYPE -log "FORMAT 2" - -log_start build -xenofarm_build -log_end $? - -if [ $LASTERR = 0 ]; then - log_start post_build - xenofarm_post_build - log_end $? - else : -fi - -log_start response_assembly - # Basic stuff - cp ../buildid.txt build/xenofarm/ - # Configuration - cp "$BUILDDIR/config.info" build/xenofarm/configinfo.txt 2>/dev/null || /bin/true - ( - cd "$BUILDDIR" - test -f config.log && cat config.log - for f in `find . -name config.log -type f`; do - echo - echo '###################################################' - echo '##' `dirname "$f"` - echo - cat "$f" - done - ) > build/xenofarm/configlogs.txt - cp "$BUILDDIR/config.cache" build/xenofarm/configcache.txt 2>/dev/null || /bin/true; - # Core files - find . -name "core" -exec \ - gdb --batch --nx --command=bin/xenofarm_gdb_cmd "$BUILDDIR/pike" {} >> \ - build/xenofarm/_core.txt ";" - find . -name "*.core" -exec \ - gdb --batch --nx --command=bin/xenofarm_gdb_cmd "$BUILDDIR/pike" {} >> \ - build/xenofarm/_core.txt ";" - find . -name "core.*" -exec \ - gdb --batch --nx --command=bin/xenofarm_gdb_cmd "$BUILDDIR/pike" {} >> \ - build/xenofarm/_core.txt ";" -log_end $? - -log "END" +#! /bin/sh + +# This script is part of the automated Xenofarm testing testing. For +# more information about Xenofarm see http://www.lysator.liu.se/xenofarm/ + +# $Id: xenofarm.sh,v 1.6 2003/11/09 14:02:39 pbortas Exp $ +# This file scripts the xenofarm actions and creates a result package +# to send back. + +#FIXME: snes9x doesn't really need MAKE_FLAGS. Clean out later. + +BUILDDIR=. +#OS=`uname -s -r -m|sed \"s/ /-/g\"|tr \"[A-Z]\" \"[a-z]\"|tr \"/()\" \"___\"` +#BUILDDIR=build/$(OS) +MAKE=${MAKE-make} +PATH=$PATH:/usr/ccs/bin +export PATH + +log() { + echo $1 | tee -a build/xenofarm/mainlog.txt +} + +log_start() { + log "BEGIN $1" + TZ=GMT date >> build/xenofarm/mainlog.txt +} + +log_end() { + LASTERR=$1 + if [ "$1" = "0" ] ; then + log "PASS" + else + log "FAIL" + fi + TZ=GMT date >> build/xenofarm/mainlog.txt +} + +xenofarm_build() { + log_start compile + "`pwd`/configure" >> build/xenofarm/compilelog.txt 2>&1 && + $MAKE $MAKE_FLAGS >> build/xenofarm/compilelog.txt 2>&1 + log_end $? + [ $LASTERR = 0 ] || return 1 +} + +xenofarm_post_build() { + log_start verify + $MAKE $MAKE_FLAGS verify > build/xenofarm/verifylog.txt 2>&1 + log_end $? + [ $LASTERR = 0 ] || return 1 + + log_start binrelease + $MAKE $MAKE_FLAGS bin-release > build/xenofarm/binreleaselog.txt 2>&1 + log_end $? + [ $LASTERR = 0 ] || return 1 +} + +fail_builddir() { + echo "FATAL: Failed to create build directory!" + exit 1 +} + +# main code + +test -d build || mkdir build 2>&1 && +rm -rf build/xenofarm 2>&1 && +mkdir build/xenofarm 2>&1 || fail_builddir + +LC_CTYPE=C +export LC_CTYPE +log "FORMAT 2" + +log_start build +xenofarm_build +log_end $? + +if [ $LASTERR = 0 ]; then + log_start post_build + xenofarm_post_build + log_end $? + else : +fi + +log_start response_assembly + # Basic stuff + cp ../buildid.txt build/xenofarm/ + # Configuration + cp "$BUILDDIR/config.info" build/xenofarm/configinfo.txt 2>/dev/null || /bin/true + ( + cd "$BUILDDIR" + test -f config.log && cat config.log + for f in `find . -name config.log -type f`; do + echo + echo '###################################################' + echo '##' `dirname "$f"` + echo + cat "$f" + done + ) > build/xenofarm/configlogs.txt + cp "$BUILDDIR/config.cache" build/xenofarm/configcache.txt 2>/dev/null || /bin/true; + # Core files + find . -name "core" -exec \ + gdb --batch --nx --command=bin/xenofarm_gdb_cmd "$BUILDDIR/pike" {} >> \ + build/xenofarm/_core.txt ";" + find . -name "*.core" -exec \ + gdb --batch --nx --command=bin/xenofarm_gdb_cmd "$BUILDDIR/pike" {} >> \ + build/xenofarm/_core.txt ";" + find . -name "core.*" -exec \ + gdb --batch --nx --command=bin/xenofarm_gdb_cmd "$BUILDDIR/pike" {} >> \ + build/xenofarm/_core.txt ";" +log_end $? + +log "END" diff -NaHudr snes9x-1.43-src/snes9x/xenofarm_gdb_cmd snes9x-improvement7-src-dehacked/snes9x/xenofarm_gdb_cmd --- snes9x-1.43-src/snes9x/xenofarm_gdb_cmd 2004-12-31 00:15:45.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x/xenofarm_gdb_cmd 2005-03-20 23:46:31.000000000 +0200 @@ -1,14 +1,14 @@ -echo \nActive threads\n -info threads -echo \nBacktrace\n -bt -echo \nSource code for frame 0\n -list -echo \nDisassembly of frame 0\n -disassemble -echo \nSource code for frame 1\n -up -list -echo \nDisassembly of frame 1\n -disassemble -echo \nEnd of core inspection\n\n\n\n +echo \nActive threads\n +info threads +echo \nBacktrace\n +bt +echo \nSource code for frame 0\n +list +echo \nDisassembly of frame 0\n +disassemble +echo \nSource code for frame 1\n +up +list +echo \nDisassembly of frame 1\n +disassemble +echo \nEnd of core inspection\n\n\n\n diff -NaHudr snes9x-1.43-src/snes9x.aps snes9x-improvement7-src-dehacked/snes9x.aps --- snes9x-1.43-src/snes9x.aps 1970-01-01 02:00:00.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x.aps 2005-03-20 23:46:36.000000000 +0200 @@ -0,0 +1,629 @@ + ÿÿÿÿc$HWBÿÿ xc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rcê…$HWBÿÿÈ0 !!resource.hIDR_RT_MANIFEST21IDR_MENU_US101IDC_CURSOR_SCOPE101IDD_SPC7110_CACHE101IDI_ICON1101 IDR_MENU_NL102 +IDC_CURSOR_BLANK102 IDD_SOUND_OPTS102 IDR_SNES9X_ACCELERATORS103 IDD_7110_RTC103IDD_ROM_INFO104IDD_ABOUT105IDD_EMU_SETTINGS106IDD_OPEN_ROM107IDD_GFX_PACK108IDD_NETCONNECT109IDD_NPOPTIONS110IDB_OPENFOLDER111IDD_CHEATER111IDB_CLOSEDFOLDER112IDB_CDDRIVE113IDB_NETDRIVE114IDB_HARDDRIVE115IDD_NEWDISPLAY123IDD_NETPLAYPROGRESS124IDD_INPUTCONFIG125IDB_JOYPAD127IDD_CHEAT_SEARCH129 IDD_DIALOG1130!IDD_CHEAT_FROM_SEARCH131"IDB_PAD133#IDD_OPENMOVIE134$IDD_CREATEMOVIE135%IDD_KEYCUSTOM136&IDC_DRIVER1001'IDC_BUFLEN1002(IDC_RATE1003)IDC_MIX1004*IDC_16BIT1005+IDC_STEREO1006,IDC_REV_STEREO1007-IDC_LINEAR_INTER1008.IDC_SYNC_TO_SOUND_CPU1009/IDC_ENVX10100IDC_ECHO10111IDC_CACHING10122IDC_MASTER_VOL10133IDC_SPC700ON10144IDC_ANTIRES10155IDC_MUTE10166IDC_SKIP_TYPE10177IDC_SCROLLBAR110188IDC_FMUT10189IDC_VRAM_DISPLAY1019:IDC_WIP11019;IDC_ADDRESS1020<IDC_FAMT1020=IDC_SPC7110_ALL1021>IDC_SPC7110_SOME1022?IDC_SPC7110_FILE1023@IDC_RTC_D81024AIDC_RTC_D41025BIDC_RTC_D21026CIDC_RTC_D11027DIDC_RTC_E81028EIDC_RTC_E41029FIDC_RTC_E21030GIDC_RTC_E11031HIDC_RTC_F81032IIDC_RTC_F41033JIDC_RTC_F21034KIDC_RTC_F11035LIDC_DAY1036MIDC_YEAR1037NIDC_MONTH1038OIDC_HOUR1039PIDC_MINUTE1040QIDC_SECOND1041RIDC_LBLMONTH1042SIDC_LBLYEAR1043TIDC_LBLDAY1044UIDC_LBLHOUR1045VIDC_LBLMINUTE1046WIDC_LBLSECOND1047XIDC_CACHE_MB1048YIDC_SPIN_CACHE1049ZIDC_ROM_DATA1051[IDC_WARNINGS1052\IDC_DISCLAIMER1053]IDC_FREEZE_FOLDER1054^IDC_BROWSE1055_IDC_CANCEL1056`IDC_AUTO_SAVE_DELAY1057aIDC_MAX_SKIP1058bIDC_TURBO_SKIP1059cIDC_TOGGLE_TURBO1060dIDC_SRAM_SPIN1061eIDC_SPIN_MAX_SKIP1062fIDC_SPIN_TURBO_SKIP1063gIDC_ROM_DIR1064hIDC_INACTIVE_PAUSE1064iIDC_INTERLEAVE1065jIDC_VIDEO_MODE1066kIDC_HEADER1067lIDC_ROMLIST1068mIDC_MEM_TYPE1069nIDC_STAR_OCEAN1070oIDC_SO_BROWSE1071pIDC_FEOEZ1072qIDC_FEOEZ_BROWSE1073rIDC_MDH1074sIDC_MDH_BROWSE1075tIDC_SPL41076uIDC_SPL4_BROWSE1077vIDC_SJNS1078wIDC_FEOEZ_SJNS_BROWSE1079xIDC_SFA21080yIDC_SFA2_BROWSE1081zIDC_SFA2E1082{IDC_SFA2E_BROWSE1083|IDC_SFZ21084}IDC_SFZ2_BROWSE1085~IDC_HOSTNAME1086IDC_PORTNUMBER1087€IDC_CLEARHISTORY1088IDC_STATIC21089‚IDC_EDIT11090ƒIDC_UP1090„IDC_VALUE_ENTER1090…IDC_MOVIE_METADATA1090†IDC_PAUSEINTERVAL1091‡IDC_UPRIGHT1091ˆIDC_MAXSKIP1092‰IDC_PAUSESPIN1093ŠIDC_DWNRIGHT1093‹IDC_SYNCBYRESET1094ŒIDC_DOWN1094IDC_SENDROM1095ŽIDC_DWNLEFT1095IDC_ACTASSERVER1096IDC_LEFT1096‘IDC_MAXSPIN1097’IDC_UPLEFT1097“IDC_SELECT1098”IDC_PORTNUMBERA1099•IDC_START1099–IDC_TESTMODE1100—IDC_L1100˜IDC_VIDEOLIST1101™IDC_R1101šIDC_SELECT21101›IDC_VIDMODELIST1102œIDC_Y1102IDC_SETDMODE1103žIDC_B1103ŸIDC_A1104 IDC_X1105¡IDC_RIGHT1106¢IDC_SHOWFPS1108£IDC_STRETCH1109¤IDC_FULLSCREEN1110¥IDC_BILINEARMD71111¦IDC_RENDER16BIT1112§IDC_TRANS1113¨IDC_HIRES1114©IDC_CHEAT_CODE1115ªIDC_FILTERBOX1116«IDC_AUTOFRAME1117¬IDC_LIMITFRAMES1118­IDC_FRAMERATESKIPSLIDER1120®IDC_TOGGLE1121¯IDC_DBLBUFFER1122°IDC_CURRMODE1123±IDC_DELETE_CHEAT1124²IDC_NPPROGRESS1124³IDC_VIDEOCARD1124´IDC_UPDATE_CHEAT1125µIDC_JPCOMBO1125¶IDC_CLEAR_CHEATS1126·IDC_JPTOGGLE1126¸IDC_CHEAT_DESCRIPTION1127¹IDC_KEYBOARD1127ºIDC_ALLOWLEFTRIGHT1127»IDC_CHEAT_ADDRESS1128¼IDC_TOGL1128½IDC_CHEAT_BYTE1129¾IDC_ADD_CHEAT1130¿IDC_CHEAT_LIST1131ÀIDC_PICTURE1132ÁIDC_ADDYS1133ÂIDC_OK1134ÃIDC_C_SEARCH1134ÄIDC_RED1135ÅIDC_C_ADD1135ÆIDC_BLUE1136ÇIDC_C_RESET1136ÈIDC_LABEL_BLUE1136ÉIDC_1_BYTE1137ÊIDC_2_BYTE1138ËIDC_3_BYTE1139ÌIDC_4_BYTE1140ÍIDC_LESS_THAN1141ÎIDC_GREATER_THAN1142ÏIDC_LESS_THAN_EQUAL1143ÐIDC_GREATER_THAN_EQUAL1144ÑIDC_EQUAL1145ÒIDC_NOT_EQUAL1146ÓIDC_PREV1147ÔIDC_ENTERED1148ÕIDC_UNSIGNED1149ÖIDC_SIGNED1150×IDC_HEX1151ØIDC_ENTER_LABEL1152ÙIDC_DIAGTOGGLE1153ÚIDC_UNDO1154ÛIDC_COMBO11155ÜIDC_NC_ADDRESS1156ÝIDC_NC_CURRVAL1157ÞIDC_NC_PREVVAL1158ßIDC_NC_NEWVAL1159àIDC_NC_DESC1160áIDC_LABEL_UP1161âIDC_LABEL_LEFT1162ãIDC_LABEL_DOWN1163äIDC_LABEL_RIGHT1164åIDC_LABEL_B1165æIDC_LABEL_A1166çIDC_LABEL_Y1167èIDC_LABEL_RIGHT21167éIDC_LABEL_X1168êIDC_LABEL_START1169ëIDC_LABEL_SELECT1170ìIDC_LABEL_L1171íIDC_LABEL_R1172îIDC_LABEL_UPLEFT1173ïIDC_LABEL_R21173ðIDC_LABEL_UPRIGHT1174ñIDC_LABEL_DOWNRIGHT1175òIDC_LABEL_DOWNLEFT1176óIDC_LABEL_FREEZE1177ôIDC_LABEL_ASRAM1178õIDC_LABEL_SMAX1179öIDC_LABEL_STURBO1180÷IDC_LABEL_ASRAM_TEXT1181øIDC_LABEL_UP21181ùIDC_LABEL_SMAX_TEXT1182úIDC_LABEL_UP31182ûIDC_LABEL_STURBO_TEXT1183üIDC_LABEL_UP41183ýIDC_PORTNUMBLOCK1184þIDC_LABEL_UP51184ÿIDC_CLIENTSETTINGSBLOCK1185IDC_LABEL_UP61185IDC_SERVERSETTINGSBLOCK1186IDC_LABEL_UP71186IDC_LABEL_PORTNUM1187IDC_LABEL_UP81187IDC_LABEL_PAUSEINTERVAL1188IDC_LABEL_UP91188IDC_LABEL_PAUSEINTERVAL_TEXT1189IDC_LABEL_UP101189 IDC_LABEL_MAXSKIP1190 +IDC_LABEL_UP111190 IDC_LABEL_CHEAT_CODE1191 IDC_LABEL_UP121191 IDC_LABEL_CHEAT_DESCRIPTION1192IDC_LABEL_UP131192IDC_LABEL_CHEAT_ADDRESS1193IDC_LABEL_UP141193IDC_LABEL_CHEAT_BYTE1194IDC_LABEL_UP151194IDC_LABEL_SERVERADDY1195IDC_LABEL_UP161195IDC_LABEL_UP171196IDC_LABEL_UP181197IDC_HEIGHT_EXTEND1198IDC_LABEL_UP191198IDC_SPEEDDOWN1199IDC_ASPECT1199IDC_PAUSE1200IDC_RECORD_NOW1201IDC_FRAMEADVANCE1201IDC_RECORD_RESET1202IDC_SKIPUP1202 IDC_JOY11203!IDC_SKIPDOWN1203"IDC_JOY21204#IDC_SPEEDUP1204$IDC_JOY31205%IDC_SCOPETURBO1205&IDC_JOY41206'IDC_SCOPEPAUSE1206(IDC_JOY51207)IDC_FRAMECOUNT1207*IDC_MOVIE_PATH1208+IDC_SAVE11208,IDC_BROWSE_MOVIE1209-IDC_SAVE21209.IDC_MOVIE_DATE1210/IDC_SAVE312100IDC_MOVIE_LENGTH12111IDC_SAVE412112IDC_MOVIE_FRAMES12123IDC_SAVE512124IDC_MOVIE_RERECORD12135IDC_SAVE612136IDC_SAVE712147IDC_SAVE812158IDC_LOADEDFROMMOVIE12159IDC_SAVE91216:IDC_MOVIEROMINFO1216;IDC_SAVE101217<IDC_CURRENTROMINFO1217=IDC_READONLY1218>IDC_SAVE111219BIDC_DISPLAY_INPUT1220CIDC_SAVE121220DIDC_SAVE131221EIDC_SAVE141222FIDC_SAVE151223GIDC_SAVE161224HIDC_SAVE171225IIDC_SAVE181226JIDC_SAVE191227KIDC_SAVE201228LIDC_LABEL_UP201229MIDC_LABEL_UP211230NIDC_FASTFORWARD1231OIDC_SHOWPRESSED1232PID_FILE_EXIT40001QID_LANGUAGE_ENGLISH40002RID_LANGUAGE_NEDERLANDS40003SID_WINDOW_HIDEMENUBAR40004TID_SOUND_8BIT8000HZMONO40005UID_SOUND_8BIT11025HZMONO40006VID_SOUND_8BIT22050HZMONO40007WID_SOUND_8BIT44100HZMONO40008XID_SOUND_16BIT8000HZMONO40009YID_SOUND_16BIT11025HZMONO40010ZID_SOUND_16BIT22050HZMONO40011[ID_SOUND_16BIT44100HZMONO40012\ID_SOUND_8BIT8000HZSTEREO40013]ID_SOUND_8BIT11025HZSTEREO40014^ID_SOUND_8BIT22050HZSTEREO40015_ID_SOUND_8BIT44100HZSTEREO40016`ID_SOUND_16BIT8000HZSTEREO40017aID_SOUND_16BIT11025HZSTEREO40018bID_SOUND_16BIT22050HZSTEREO40019cID_SOUND_16BIT44100HZSTEREO40020dID_SOUND_NOSOUND40021eID_OPTIONS_JOYPAD40022fID_WINDOW_SHOWFPS40023gID_OPTIONS_DISPLAY40024hID_FILE_RESET40025iID_FILE_PAUSE40026jID_SOUND_INTERPOLATED40027kID_SOUND_SYNC40028lID_WINDOW_FULLSCREEN40029mID_SOUND_16BIT40030nID_SOUND_STEREO40031oID_WINDOW_STRETCH40032pID_SOUND_8000HZ40033qID_SOUND_11025HZ40034rID_SOUND_22050HZ40035sID_SOUND_44100HZ40036tID_SOUND_30000HZ40037uID_SOUND_50MS40038vID_SOUND_100MS40039wID_SOUND_200MS40040xID_SOUND_500MS40041yID_SOUND_1S40042zID_SOUND_25MS40043{ID_SOUND_2S40044|ID_FILE_SAVE140045}ID_FILE_SAVE240046~ID_FILE_SAVE340047ID_FILE_SAVE440048€ID_FILE_SAVE540049ID_FILE_SAVE640050‚ID_FILE_SAVE740051ƒID_FILE_SAVE840052„ID_FILE_SAVE940053…ID_FILE_LOAD140054†ID_FILE_LOAD240055‡ID_FILE_LOAD340056ˆID_FILE_LOAD440057‰ID_FILE_LOAD540058ŠID_FILE_LOAD640059‹ID_FILE_LOAD740060ŒID_FILE_LOAD840061ID_FILE_LOAD940062ŽID_CHEAT_ENTER40063ID_CHEAT_SEARCH40064ID_CHEAT_APPLY40065‘ID_FILE_SAVE_SPC_DATA40066’ID_HELP_ABOUT40067“ID_SOUND_OPTIONS40068”ID_OPTIONS_EMULATION40069•ID_OPTIONS_SETTINGS40070–ID_DEBUG_TRACE40071—ID_DEBUG_TRACE_SPC40072˜ID_DEBUG_TRACE_SA140073™ID_DEBUG_TRACE_DSP140074šID_DEBUG_FRAME_ADVANCE40075›ID_DEBUG_SNES_STATUS40076œID_NETPLAY_SERVER40077ID_NETPLAY_CONNECT40078žID_NETPLAY_DISCONNECT40079ŸID_NETPLAY_OPTIONS40080 ID_NETPLAY_ROM40081¡ID_NETPLAY_SYNC40082¢ID_NETPLAY_SEND_ROM_ON_CONNECT40083£ID_NETPLAY_SYNC_BY_RESET40084¤ID_SOUND_48000HZ40085¥ID_SOUND_16000HZ40086¦ID_SOUND_35000HZ40087§ID_SOUND_REVERSE_STEREO40088¨ID_FILE_SAVE_SRAM_DATA40089©ID_RECENT_DUMMY40090ªIDM_LOG_711040091«IDM_7110_RTC40092¬IDM_7110_CACHE40093­IDM_ROM_INFO40094®ID_SOUND_32000HZ40095¯ID_TURBO_START40096°ID_TURBO_SELECT40097±ID_TURBO_L40098²ID_TURBO_R40099³ID_TURBO_Y40100´ID_TURBO_X40101µID_TURBO_B40102¶ID_TURBO_A40103·IDM_ENABLE_MULTITAP40104¸IDM_MOUSE_TOGGLE40105¹IDM_SCOPE_TOGGLE40106ºIDM_CATCH_UP_SOUND40107»IDM_GFX_PACKS40108¼IDM_JUSTIFIER40109½ID_SCREENSHOT40110¾ID_FILE_MOVIE_PLAY40113¿ID_FILE_MOVIE_STOP40114ÀID_FILE_MOVIE_RECORD40115ÁID_FILE_MOVIE_ENABLERECORDING40116ÂID_FILE_WRITE_AVI40116ÃID_FILE_STOP_AVI40117ÄID_OPTIONS_KEYCUSTOM40118Å_APS_NEXT_RESOURCE_VALUE141Ë_APS_NEXT_COMMAND_VALUE40119Ì_APS_NEXT_CONTROL_VALUE1216Í_APS_NEXT_SYMED_VALUE101Î!!afxres.h!winres.hVS_VERSION_INFO1IDC_STATIC(-1))!CBRS_ALIGN_LEFT0x1000L/CBRS_ALIGN_TOP0x2000L0CBRS_ALIGN_RIGHT0x4000L1CBRS_ALIGN_BOTTOM0x8000L2CBRS_ALIGN_ANY0xF000L3CBRS_BORDER_LEFT0x0100L5CBRS_BORDER_TOP0x0200L6CBRS_BORDER_RIGHT0x0400L7CBRS_BORDER_BOTTOM0x0800L8CBRS_BORDER_ANY0x0F00L9CBRS_TOOLTIPS0x0010L;CBRS_FLYBY0x0020L<CBRS_FLOAT_MULTI0x0040L=CBRS_BORDER_3D0x0080L>CBRS_HIDE_INPLACE0x0008L?CBRS_SIZE_DYNAMIC0x0004L@CBRS_SIZE_FIXED0x0002LACBRS_FLOATING0x0001LBCBRS_GRIPPER0x00400000LDCBRS_ORIENT_HORZ(CBRS_ALIGN_TOP|CBRS_ALIGN_BOTTOM)FCBRS_ORIENT_VERT(CBRS_ALIGN_LEFT|CBRS_ALIGN_RIGHT)GCBRS_ORIENT_ANY(CBRS_ORIENT_HORZ|CBRS_ORIENT_VERT)HCBRS_ALL0x0040FFFFLJCBRS_NOALIGN0x00000000LOCBRS_LEFT(CBRS_ALIGN_LEFT|CBRS_BORDER_RIGHT)PCBRS_TOP(CBRS_ALIGN_TOP|CBRS_BORDER_BOTTOM)QCBRS_RIGHT(CBRS_ALIGN_RIGHT|CBRS_BORDER_LEFT)RCBRS_BOTTOM(CBRS_ALIGN_BOTTOM|CBRS_BORDER_TOP)SID_INDICATOR_EXT0xE700YID_INDICATOR_CAPS0xE701ZID_INDICATOR_NUM0xE702[ID_INDICATOR_SCRL0xE703\ID_INDICATOR_OVR0xE704]ID_INDICATOR_REC0xE705^ID_INDICATOR_KANA0xE706_ID_SEPARATOR0aAFX_IDS_APP_TITLE0xE000“AFX_IDS_IDLEMESSAGE0xE001•AFX_IDS_HELPMODEMESSAGE0xE002—AFX_IDS_APP_TITLE_EMBEDDING0xE003™AFX_IDS_COMPANY_NAME0xE004›AFX_IDS_OBJ_TITLE_INPLACE0xE005ID_FILE_NEW0xE100£ID_FILE_OPEN0xE101¤ID_FILE_CLOSE0xE102¥ID_FILE_SAVE0xE103¦ID_FILE_SAVE_AS0xE104§ID_FILE_PAGE_SETUP0xE105¨ID_FILE_PRINT_SETUP0xE106©ID_FILE_PRINT0xE107ªID_FILE_PRINT_DIRECT0xE108«ID_FILE_PRINT_PREVIEW0xE109¬ID_FILE_UPDATE0xE10A­ID_FILE_SAVE_COPY_AS0xE10B®ID_FILE_SEND_MAIL0xE10C¯ID_FILE_NEW_FRAME0xE10D°ID_FILE_MRU_FIRST0xE110²ID_FILE_MRU_FILE10xE110³ID_FILE_MRU_FILE20xE111´ID_FILE_MRU_FILE30xE112µID_FILE_MRU_FILE40xE113¶ID_FILE_MRU_FILE50xE114·ID_FILE_MRU_FILE60xE115¸ID_FILE_MRU_FILE70xE116¹ID_FILE_MRU_FILE80xE117ºID_FILE_MRU_FILE90xE118»ID_FILE_MRU_FILE100xE119¼ID_FILE_MRU_FILE110xE11A½ID_FILE_MRU_FILE120xE11B¾ID_FILE_MRU_FILE130xE11C¿ID_FILE_MRU_FILE140xE11DÀID_FILE_MRU_FILE150xE11EÁID_FILE_MRU_FILE160xE11FÂID_FILE_MRU_LAST0xE11FÃID_EDIT_CLEAR0xE120ÆID_EDIT_CLEAR_ALL0xE121ÇID_EDIT_COPY0xE122ÈID_EDIT_CUT0xE123ÉID_EDIT_FIND0xE124ÊID_EDIT_PASTE0xE125ËID_EDIT_PASTE_LINK0xE126ÌID_EDIT_PASTE_SPECIAL0xE127ÍID_EDIT_REPEAT0xE128ÎID_EDIT_REPLACE0xE129ÏID_EDIT_SELECT_ALL0xE12AÐID_EDIT_UNDO0xE12BÑID_EDIT_REDO0xE12CÒID_WINDOW_NEW0xE130ÕID_WINDOW_ARRANGE0xE131ÖID_WINDOW_CASCADE0xE132×ID_WINDOW_TILE_HORZ0xE133ØID_WINDOW_TILE_VERT0xE134ÙID_WINDOW_SPLIT0xE135ÚID_APP_ABOUT0xE140âID_APP_EXIT0xE141ãID_HELP_INDEX0xE142äID_HELP_FINDER0xE143åID_HELP_USING0xE144æID_CONTEXT_HELP0xE145çID_HELP0xE146éID_DEFAULT_HELP0xE147êID_NEXT_PANE0xE150íID_PREV_PANE0xE151îID_FORMAT_FONT0xE160ñID_OLE_INSERT_NEW0xE200ôID_OLE_EDIT_LINKS0xE201õID_OLE_EDIT_CONVERT0xE202öID_OLE_EDIT_CHANGE_ICON0xE203÷ID_OLE_EDIT_PROPERTIES0xE204øID_OLE_VERB_FIRST0xE210ùAFX_ID_PREVIEW_CLOSE0xE300ÿAFX_ID_PREVIEW_NUMPAGE0xE301AFX_ID_PREVIEW_NEXT0xE302AFX_ID_PREVIEW_PREV0xE303AFX_ID_PREVIEW_PRINT0xE304AFX_ID_PREVIEW_ZOOMIN0xE305AFX_ID_PREVIEW_ZOOMOUT0xE306ID_VIEW_TOOLBAR0xE800ID_VIEW_STATUS_BAR0xE801 ID_VIEW_REBAR0xE804 +ID_VIEW_AUTOARRANGE0xE805 ID_VIEW_SMALLICON0xE810 ID_VIEW_LARGEICON0xE811ID_VIEW_LIST0xE812ID_VIEW_DETAILS0xE813ID_VIEW_LINEUP0xE814ID_VIEW_BYNAME0xE815AFX_ID_VIEW_MINIMUMID_VIEW_SMALLICONAFX_ID_VIEW_MAXIMUMID_VIEW_BYNAMEID_RECORD_FIRST0xE900ID_RECORD_LAST0xE901ID_RECORD_NEXT0xE902ID_RECORD_PREV0xE903IDC_STATIC(-1)#AFX_IDS_SCSIZE0xEF00,AFX_IDS_SCMOVE0xEF01-AFX_IDS_SCMINIMIZE0xEF02.AFX_IDS_SCMAXIMIZE0xEF03/AFX_IDS_SCNEXTWINDOW0xEF040AFX_IDS_SCPREVWINDOW0xEF051AFX_IDS_SCCLOSE0xEF062AFX_IDS_SCRESTORE0xEF123AFX_IDS_SCTASKLIST0xEF134AFX_IDS_MDICHILD0xEF1F6AFX_IDS_DESKACCESSORY0xEFDA8AFX_IDS_OPENFILE0xF000;AFX_IDS_SAVEFILE0xF001<AFX_IDS_ALLFILTER0xF002=AFX_IDS_UNTITLED0xF003>AFX_IDS_SAVEFILECOPY0xF004?AFX_IDS_PREVIEW_CLOSE0xF005@AFX_IDS_UNNAMED_FILE0xF006AAFX_IDS_HIDE0xF011BAFX_IDP_NO_ERROR_AVAILABLE0xF020EAFX_IDS_NOT_SUPPORTED_EXCEPTION0xF021FAFX_IDS_RESOURCE_EXCEPTION0xF022GAFX_IDS_MEMORY_EXCEPTION0xF023HAFX_IDS_USER_EXCEPTION0xF024IAFX_IDS_INVALID_ARG_EXCEPTION0xF025JAFX_IDS_PRINTONPORT0xF040MAFX_IDS_ONEPAGE0xF041NAFX_IDS_TWOPAGE0xF042OAFX_IDS_PRINTPAGENUM0xF043PAFX_IDS_PREVIEWPAGEDESC0xF044QAFX_IDS_PRINTDEFAULTEXT0xF045RAFX_IDS_PRINTDEFAULT0xF046SAFX_IDS_PRINTFILTER0xF047TAFX_IDS_PRINTCAPTION0xF048UAFX_IDS_PRINTTOFILE0xF049VAFX_IDS_OBJECT_MENUITEM0xF080ZAFX_IDS_EDIT_VERB0xF081[AFX_IDS_ACTIVATE_VERB0xF082\AFX_IDS_CHANGE_LINK0xF083]AFX_IDS_AUTO0xF084^AFX_IDS_MANUAL0xF085_AFX_IDS_FROZEN0xF086`AFX_IDS_ALL_FILES0xF087aAFX_IDS_SAVE_MENU0xF088cAFX_IDS_UPDATE_MENU0xF089dAFX_IDS_SAVE_AS_MENU0xF08AeAFX_IDS_SAVE_COPY_AS_MENU0xF08BfAFX_IDS_EXIT_MENU0xF08CgAFX_IDS_UPDATING_ITEMS0xF08DhAFX_IDS_METAFILE_FORMAT0xF08EjAFX_IDS_DIB_FORMAT0xF08FkAFX_IDS_BITMAP_FORMAT0xF090lAFX_IDS_LINKSOURCE_FORMAT0xF091mAFX_IDS_EMBED_FORMAT0xF092nAFX_IDS_PASTELINKEDTYPE0xF094pAFX_IDS_UNKNOWNTYPE0xF095qAFX_IDS_RTF_FORMAT0xF096rAFX_IDS_TEXT_FORMAT0xF097sAFX_IDS_INVALID_CURRENCY0xF098uAFX_IDS_INVALID_DATETIME0xF099vAFX_IDS_INVALID_DATETIMESPAN0xF09AwAFX_IDP_INVALID_FILENAME0xF100zAFX_IDP_FAILED_TO_OPEN_DOC0xF101{AFX_IDP_FAILED_TO_SAVE_DOC0xF102|AFX_IDP_ASK_TO_SAVE0xF103}AFX_IDP_FAILED_TO_CREATE_DOC0xF104~AFX_IDP_FILE_TOO_LARGE0xF105AFX_IDP_FAILED_TO_START_PRINT0xF106€AFX_IDP_FAILED_TO_LAUNCH_HELP0xF107AFX_IDP_INTERNAL_FAILURE0xF108‚AFX_IDP_COMMAND_FAILURE0xF109ƒAFX_IDP_FAILED_MEMORY_ALLOC0xF10A„AFX_IDP_UNREG_DONE0xF10B…AFX_IDP_UNREG_FAILURE0xF10C†AFX_IDP_DLL_LOAD_FAILED0xF10D‡AFX_IDP_DLL_BAD_VERSION0xF10EˆAFX_IDP_PARSE_INT0xF110‹AFX_IDP_PARSE_REAL0xF111ŒAFX_IDP_PARSE_INT_RANGE0xF112AFX_IDP_PARSE_REAL_RANGE0xF113ŽAFX_IDP_PARSE_STRING_SIZE0xF114AFX_IDP_PARSE_RADIO_BUTTON0xF115AFX_IDP_PARSE_BYTE0xF116‘AFX_IDP_PARSE_UINT0xF117’AFX_IDP_PARSE_DATETIME0xF118“AFX_IDP_PARSE_CURRENCY0xF119”AFX_IDP_PARSE_GUID0xF11A•AFX_IDP_PARSE_TIME0xF11B–AFX_IDP_PARSE_DATE0xF11C—AFX_IDP_FAILED_INVALID_FORMAT0xF120šAFX_IDP_FAILED_INVALID_PATH0xF121›AFX_IDP_FAILED_DISK_FULL0xF122œAFX_IDP_FAILED_ACCESS_READ0xF123AFX_IDP_FAILED_ACCESS_WRITE0xF124žAFX_IDP_FAILED_IO_ERROR_READ0xF125ŸAFX_IDP_FAILED_IO_ERROR_WRITE0xF126 AFX_IDP_SCRIPT_ERROR0xF130£AFX_IDP_SCRIPT_DISPATCH_EXCEPTION0xF131¤AFX_IDP_STATIC_OBJECT0xF180§AFX_IDP_FAILED_TO_CONNECT0xF181¨AFX_IDP_SERVER_BUSY0xF182©AFX_IDP_BAD_VERB0xF183ªAFX_IDS_NOT_DOCOBJECT0xF184«AFX_IDP_FAILED_TO_NOTIFY0xF185¬AFX_IDP_FAILED_TO_LAUNCH0xF186­AFX_IDP_ASK_TO_UPDATE0xF187®AFX_IDP_FAILED_TO_UPDATE0xF188¯AFX_IDP_FAILED_TO_REGISTER0xF189°AFX_IDP_FAILED_TO_AUTO_REGISTER0xF18A±AFX_IDP_FAILED_TO_CONVERT0xF18B²AFX_IDP_GET_NOT_SUPPORTED0xF18C³AFX_IDP_SET_NOT_SUPPORTED0xF18D´AFX_IDP_ASK_TO_DISCARD0xF18EµAFX_IDP_FAILED_TO_CREATE0xF18F¶AFX_IDP_FAILED_MAPI_LOAD0xF190¹AFX_IDP_INVALID_MAPI_DLL0xF191ºAFX_IDP_FAILED_MAPI_SEND0xF192»AFX_IDP_FILE_NONE0xF1A0½AFX_IDP_FILE_GENERIC0xF1A1¾AFX_IDP_FILE_NOT_FOUND0xF1A2¿AFX_IDP_FILE_BAD_PATH0xF1A3ÀAFX_IDP_FILE_TOO_MANY_OPEN0xF1A4ÁAFX_IDP_FILE_ACCESS_DENIED0xF1A5ÂAFX_IDP_FILE_INVALID_FILE0xF1A6ÃAFX_IDP_FILE_REMOVE_CURRENT0xF1A7ÄAFX_IDP_FILE_DIR_FULL0xF1A8ÅAFX_IDP_FILE_BAD_SEEK0xF1A9ÆAFX_IDP_FILE_HARD_IO0xF1AAÇAFX_IDP_FILE_SHARING0xF1ABÈAFX_IDP_FILE_LOCKING0xF1ACÉAFX_IDP_FILE_DISKFULL0xF1ADÊAFX_IDP_FILE_EOF0xF1AEËAFX_IDP_ARCH_NONE0xF1B0ÍAFX_IDP_ARCH_GENERIC0xF1B1ÎAFX_IDP_ARCH_READONLY0xF1B2ÏAFX_IDP_ARCH_ENDOFFILE0xF1B3ÐAFX_IDP_ARCH_WRITEONLY0xF1B4ÑAFX_IDP_ARCH_BADINDEX0xF1B5ÒAFX_IDP_ARCH_BADCLASS0xF1B6ÓAFX_IDP_ARCH_BADSCHEMA0xF1B7ÔAFX_IDS_OCC_SCALEUNITS_PIXELS0xF1C0ÖAFX_IDS_STATUS_FONT0xF230ÛAFX_IDS_TOOLTIP_FONT0xF231ÜAFX_IDS_UNICODE_FONT0xF232ÝAFX_IDS_MINI_FONT0xF233ÞAFX_IDP_SQL_CONNECT_FAIL0xF281äAFX_IDP_SQL_RECORDSET_FORWARD_ONLY0xF282åAFX_IDP_SQL_EMPTY_COLUMN_LIST0xF283æAFX_IDP_SQL_FIELD_SCHEMA_MISMATCH0xF284çAFX_IDP_SQL_ILLEGAL_MODE0xF285èAFX_IDP_SQL_MULTIPLE_ROWS_AFFECTED0xF286éAFX_IDP_SQL_NO_CURRENT_RECORD0xF287êAFX_IDP_SQL_NO_ROWS_AFFECTED0xF288ëAFX_IDP_SQL_RECORDSET_READONLY0xF289ìAFX_IDP_SQL_SQL_NO_TOTAL0xF28AíAFX_IDP_SQL_ODBC_LOAD_FAILED0xF28BîAFX_IDP_SQL_DYNASET_NOT_SUPPORTED0xF28CïAFX_IDP_SQL_SNAPSHOT_NOT_SUPPORTED0xF28DðAFX_IDP_SQL_API_CONFORMANCE0xF28EñAFX_IDP_SQL_SQL_CONFORMANCE0xF28FòAFX_IDP_SQL_NO_DATA_FOUND0xF290óAFX_IDP_SQL_ROW_UPDATE_NOT_SUPPORTED0xF291ôAFX_IDP_SQL_ODBC_V2_REQUIRED0xF292õAFX_IDP_SQL_NO_POSITIONED_UPDATES0xF293öAFX_IDP_SQL_LOCK_MODE_NOT_SUPPORTED0xF294÷AFX_IDP_SQL_DATA_TRUNCATED0xF295øAFX_IDP_SQL_ROW_FETCH0xF296ùAFX_IDP_SQL_INCORRECT_ODBC0xF297úAFX_IDP_SQL_UPDATE_DELETE_FAILED0xF298ûAFX_IDP_SQL_DYNAMIC_CURSOR_NOT_SUPPORTED0xF299üAFX_IDP_SQL_FIELD_NOT_FOUND0xF29AýAFX_IDP_SQL_BOOKMARKS_NOT_SUPPORTED0xF29BþAFX_IDP_SQL_BOOKMARKS_NOT_ENABLED0xF29CÿAFX_IDS_DELETED0xF29DAFX_IDP_DAO_ENGINE_INITIALIZATION0xF2B0AFX_IDP_DAO_DFX_BIND0xF2B1 AFX_IDP_DAO_OBJECT_NOT_OPEN0xF2B2 +AFX_IDP_DAO_ROWTOOSHORT0xF2B3AFX_IDP_DAO_BADBINDINFO0xF2B4AFX_IDP_DAO_COLUMNUNAVAILABLE0xF2B5AFX_IDS_HTTP_TITLE0xF2D1AFX_IDS_HTTP_NO_TEXT0xF2D2AFX_IDS_HTTP_BAD_REQUEST0xF2D3AFX_IDS_HTTP_AUTH_REQUIRED0xF2D4AFX_IDS_HTTP_FORBIDDEN0xF2D5AFX_IDS_HTTP_NOT_FOUND0xF2D6AFX_IDS_HTTP_SERVER_ERROR0xF2D7AFX_IDS_HTTP_NOT_IMPLEMENTED0xF2D8AFX_IDS_CHECKLISTBOX_UNCHECK0xF2E1!AFX_IDS_CHECKLISTBOX_CHECK0xF2E2"AFX_IDS_CHECKLISTBOX_MIXED0xF2E3#AFX_IDC_LISTBOX100)AFX_IDC_CHANGE101*AFX_IDC_BROWSER102+AFX_IDC_PRINT_DOCNAME201.AFX_IDC_PRINT_PRINTERNAME202/AFX_IDC_PRINT_PORTNAME2030AFX_IDC_PRINT_PAGENUM2041ID_APPLY_NOW0x30214ID_WIZBACK0x30235ID_WIZNEXT0x30246ID_WIZFINISH0x30257AFX_IDC_TAB_CONTROL0x30208AFX_IDD_NEWTYPEDLG30721KAFX_IDD_PRINTDLG30722LAFX_IDD_PREVIEW_TOOLBAR30723MAFX_IDD_INSERTOBJECT30724PAFX_IDD_CHANGEICON30725QAFX_IDD_CONVERT30726RAFX_IDD_PASTESPECIAL30727SAFX_IDD_EDITLINKS30728TAFX_IDD_FILEBROWSE30729UAFX_IDD_BUSY30730VAFX_IDD_OBJECTPROPERTIES30732XAFX_IDD_CHANGESOURCE30733YAFX_IDC_CONTEXTHELP30977]AFX_IDC_MAGNIFY30978^AFX_IDC_SMALLARROWS30979_AFX_IDC_HSPLITBAR30980`AFX_IDC_VSPLITBAR30981aAFX_IDC_NODROPCRSR30982bAFX_IDC_TRACKNWSE30983cAFX_IDC_TRACKNESW30984dAFX_IDC_TRACKNS30985eAFX_IDC_TRACKWE30986fAFX_IDC_TRACK4WAY30987gAFX_IDC_MOVE4WAY30988hAFX_IDC_MOUSE_PAN_NW30998lAFX_IDC_MOUSE_PAN_N30999mAFX_IDC_MOUSE_PAN_NE31000nAFX_IDC_MOUSE_PAN_W31001oAFX_IDC_MOUSE_PAN_HV31002pAFX_IDC_MOUSE_PAN_E31003qAFX_IDC_MOUSE_PAN_SW31004rAFX_IDC_MOUSE_PAN_S31005sAFX_IDC_MOUSE_PAN_SE31006tAFX_IDC_MOUSE_PAN_HORZ31007uAFX_IDC_MOUSE_PAN_VERT31008vAFX_IDC_MOUSE_ORG_HORZ31009yAFX_IDC_MOUSE_ORG_VERT31010zAFX_IDC_MOUSE_ORG_HV31011{AFX_IDC_MOUSE_MASK31012|AFX_IDB_MINIFRAME_MENU30994AFX_IDB_CHECKLISTBOX_9530996‚AFX_IDR_PREVIEW_ACCEL30997…AFX_IDI_STD_MDIFRAME31233ˆAFX_IDI_STD_FRAME31234‰AFX_IDC_FONTPROP1000AFX_IDC_FONTNAMES1001AFX_IDC_FONTSTYLES1002‘AFX_IDC_FONTSIZES1003’AFX_IDC_STRIKEOUT1004“AFX_IDC_UNDERLINE1005”AFX_IDC_SAMPLEBOX1006•AFX_IDC_COLOR_BLACK1100˜AFX_IDC_COLOR_WHITE1101™AFX_IDC_COLOR_RED1102šAFX_IDC_COLOR_GREEN1103›AFX_IDC_COLOR_BLUE1104œAFX_IDC_COLOR_YELLOW1105AFX_IDC_COLOR_MAGENTA1106žAFX_IDC_COLOR_CYAN1107ŸAFX_IDC_COLOR_GRAY1108 AFX_IDC_COLOR_LIGHTGRAY1109¡AFX_IDC_COLOR_DARKRED1110¢AFX_IDC_COLOR_DARKGREEN1111£AFX_IDC_COLOR_DARKBLUE1112¤AFX_IDC_COLOR_LIGHTBROWN1113¥AFX_IDC_COLOR_DARKMAGENTA1114¦AFX_IDC_COLOR_DARKCYAN1115§AFX_IDC_COLORPROP1116¨AFX_IDC_SYSTEMCOLORS1117©AFX_IDC_PROPNAME1201¬AFX_IDC_PICTURE1202­AFX_IDC_BROWSE1203®AFX_IDC_CLEAR1204¯AFX_IDD_PROPPAGE_COLOR32257µAFX_IDD_PROPPAGE_FONT32258¶AFX_IDD_PROPPAGE_PICTURE32259·AFX_IDB_TRUETYPE32384¹AFX_IDS_PROPPAGE_UNKNOWN0xFE01¿AFX_IDS_COLOR_DESKTOP0xFE04ÀAFX_IDS_COLOR_APPWORKSPACE0xFE05ÁAFX_IDS_COLOR_WNDBACKGND0xFE06ÂAFX_IDS_COLOR_WNDTEXT0xFE07ÃAFX_IDS_COLOR_MENUBAR0xFE08ÄAFX_IDS_COLOR_MENUTEXT0xFE09ÅAFX_IDS_COLOR_ACTIVEBAR0xFE0AÆAFX_IDS_COLOR_INACTIVEBAR0xFE0BÇAFX_IDS_COLOR_ACTIVETEXT0xFE0CÈAFX_IDS_COLOR_INACTIVETEXT0xFE0DÉAFX_IDS_COLOR_ACTIVEBORDER0xFE0EÊAFX_IDS_COLOR_INACTIVEBORDER0xFE0FËAFX_IDS_COLOR_WNDFRAME0xFE10ÌAFX_IDS_COLOR_SCROLLBARS0xFE11ÍAFX_IDS_COLOR_BTNFACE0xFE12ÎAFX_IDS_COLOR_BTNSHADOW0xFE13ÏAFX_IDS_COLOR_BTNTEXT0xFE14ÐAFX_IDS_COLOR_BTNHIGHLIGHT0xFE15ÑAFX_IDS_COLOR_DISABLEDTEXT0xFE16ÒAFX_IDS_COLOR_HIGHLIGHT0xFE17ÓAFX_IDS_COLOR_HIGHLIGHTTEXT0xFE18ÔAFX_IDS_REGULAR0xFE19ÕAFX_IDS_BOLD0xFE1AÖAFX_IDS_ITALIC0xFE1B×AFX_IDS_BOLDITALIC0xFE1CØAFX_IDS_SAMPLETEXT0xFE1DÙAFX_IDS_DISPLAYSTRING_FONT0xFE1EÚAFX_IDS_DISPLAYSTRING_COLOR0xFE1FÛAFX_IDS_DISPLAYSTRING_PICTURE0xFE20ÜAFX_IDS_PICTUREFILTER0xFE21ÝAFX_IDS_PICTYPE_UNKNOWN0xFE22ÞAFX_IDS_PICTYPE_NONE0xFE23ßAFX_IDS_PICTYPE_BITMAP0xFE24àAFX_IDS_PICTYPE_METAFILE0xFE25áAFX_IDS_PICTYPE_ICON0xFE26âAFX_IDS_COLOR_PPG0xFE28ãAFX_IDS_COLOR_PPG_CAPTION0xFE29äAFX_IDS_FONT_PPG0xFE2AåAFX_IDS_FONT_PPG_CAPTION0xFE2BæAFX_IDS_PICTURE_PPG0xFE2CçAFX_IDS_PICTURE_PPG_CAPTION0xFE2DèAFX_IDS_PICTUREBROWSETITLE0xFE30éAFX_IDS_BORDERSTYLE_00xFE31êAFX_IDS_BORDERSTYLE_10xFE32ëAFX_IDS_VERB_EDIT0xFE40îAFX_IDS_VERB_PROPERTIES0xFE41ïAFX_IDP_PICTURECANTOPEN0xFE83òAFX_IDP_PICTURECANTLOAD0xFE84óAFX_IDP_PICTURETOOLARGE0xFE85ôAFX_IDP_PICTUREREADFAILED0xFE86õAFX_IDP_E_ILLEGALFUNCTIONCALL0xFEA0øAFX_IDP_E_OVERFLOW0xFEA1ùAFX_IDP_E_OUTOFMEMORY0xFEA2úAFX_IDP_E_DIVISIONBYZERO0xFEA3ûAFX_IDP_E_OUTOFSTRINGSPACE0xFEA4üAFX_IDP_E_OUTOFSTACKSPACE0xFEA5ýAFX_IDP_E_BADFILENAMEORNUMBER0xFEA6þAFX_IDP_E_FILENOTFOUND0xFEA7ÿAFX_IDP_E_BADFILEMODE0xFEA8AFX_IDP_E_FILEALREADYOPEN0xFEA9AFX_IDP_E_DEVICEIOERROR0xFEAAAFX_IDP_E_FILEALREADYEXISTS0xFEABAFX_IDP_E_BADRECORDLENGTH0xFEACAFX_IDP_E_DISKFULL0xFEADAFX_IDP_E_BADRECORDNUMBER0xFEAEAFX_IDP_E_BADFILENAME0xFEAFAFX_IDP_E_TOOMANYFILES0xFEB0AFX_IDP_E_DEVICEUNAVAILABLE0xFEB1 AFX_IDP_E_PERMISSIONDENIED0xFEB2 +AFX_IDP_E_DISKNOTREADY0xFEB3 AFX_IDP_E_PATHFILEACCESSERROR0xFEB4 AFX_IDP_E_PATHNOTFOUND0xFEB5 AFX_IDP_E_INVALIDPATTERNSTRING0xFEB6AFX_IDP_E_INVALIDUSEOFNULL0xFEB7AFX_IDP_E_INVALIDFILEFORMAT0xFEB8AFX_IDP_E_INVALIDPROPERTYVALUE0xFEB9AFX_IDP_E_INVALIDPROPERTYARRAYINDEX0xFEBAAFX_IDP_E_SETNOTSUPPORTEDATRUNTIME0xFEBBAFX_IDP_E_SETNOTSUPPORTED0xFEBCAFX_IDP_E_NEEDPROPERTYARRAYINDEX0xFEBDAFX_IDP_E_SETNOTPERMITTED0xFEBEAFX_IDP_E_GETNOTSUPPORTEDATRUNTIME0xFEBFAFX_IDP_E_GETNOTSUPPORTED0xFEC0AFX_IDP_E_PROPERTYNOTFOUND0xFEC1AFX_IDP_E_INVALIDCLIPBOARDFORMAT0xFEC2AFX_IDP_E_INVALIDPICTURE0xFEC3AFX_IDP_E_PRINTERERROR0xFEC4AFX_IDP_E_CANTSAVEFILETOTEMP0xFEC5AFX_IDP_E_SEARCHTEXTNOTFOUND0xFEC6AFX_IDP_E_REPLACEMENTSTOOLONG0xFEC7!!language.hWINDOW_TITLE"Snes9X v%s for Windows"\MY_REG_KEY"Software\\Emulators\\Snes9X"^REG_KEY_VER"1.31"`s, zones.\r\n\r\n" "Snes9X is a Super Nintendo Entertainment System\r\n" "emulator that allows you to play most games designed\r\n" "for the SNES on your PC.\r\n\r\n" "Please visit http://www.snes9x.com for\r\n" "up-to-the-minute information and hekAPP_NAME"Snes9x"nSNES9X_INFO"Snes9x: Information"pSNES9X_WARN"Snes9x: WARNING!"qSNES9X_DXS"Snes9X: DirectSound"rSNES9X_SNDQ"Snes9X: Sound CPU Question"sSNES9X_NP_ERROR"Snes9X: NetPlay Error"tBUTTON_OK"&OK"uBUTTON_CANCEL"&Cancel"vINPUTCONFIG_TITLE"Input Configuration"yINPUTCONFIG_JPTOGGLE"Enabled"zINPUTCONFIG_DIAGTOGGLE"Toggle Diagonals"{INPUTCONFIG_JPCOMBO"Joypad #%d"~INPUTCONFIG_LABEL_UP"Up"INPUTCONFIG_LABEL_DOWN"Down"€INPUTCONFIG_LABEL_LEFT"Left"INPUTCONFIG_LABEL_RIGHT"Right"‚INPUTCONFIG_LABEL_A"A"ƒINPUTCONFIG_LABEL_B"B"„INPUTCONFIG_LABEL_X"X"…INPUTCONFIG_LABEL_Y"Y"†INPUTCONFIG_LABEL_L"L"‡INPUTCONFIG_LABEL_R"R"ˆINPUTCONFIG_LABEL_START"Start"‰INPUTCONFIG_LABEL_SELECT"Select"ŠINPUTCONFIG_LABEL_UPLEFT"Up Left"‹INPUTCONFIG_LABEL_UPRIGHT"Up Right"ŒINPUTCONFIG_LABEL_DOWNRIGHT"Dn Right"INPUTCONFIG_LABEL_DOWNLEFT"Dn Left"ŽINPUTCONFIG_LABEL_BLUE"Blue means the button is already mapped;\nRed means it's used by windows or Snes9x"GAMEDEVICE_JOYNUMPREFIX"(J%d)"’GAMEDEVICE_JOYBUTPREFIX"#[%d]"“GAMEDEVICE_XNEG"Left"”GAMEDEVICE_XPOS"Right"•GAMEDEVICE_YPOS"Up"–GAMEDEVICE_YNEG"Down"—GAMEDEVICE_POVLEFT"POV Left"˜GAMEDEVICE_POVRIGHT"POV Right"™GAMEDEVICE_POVUP"POV Up"šGAMEDEVICE_POVDOWN"POV Down"›GAMEDEVICE_POVDNLEFT"POV Dn Left"œGAMEDEVICE_POVDNRIGHT"POV Dn Right"GAMEDEVICE_POVUPLEFT"POV Up Left"žGAMEDEVICE_POVUPRIGHT"POV Up Right"ŸGAMEDEVICE_ZPOS"Z Up" GAMEDEVICE_ZNEG"Z Down"¡GAMEDEVICE_RPOS"R Up"¢GAMEDEVICE_RNEG"R Down"£GAMEDEVICE_UPOS"U Up"¤GAMEDEVICE_UNEG"U Down"¥GAMEDEVICE_VPOS"V Up"¦GAMEDEVICE_VNEG"V Down"§GAMEDEVICE_BUTTON"Button %d"¨GAMEDEVICE_DISABLED"Disabled"«GAMEDEVICE_KEY"#%d"®GAMEDEVICE_NUMPADPREFIX"Numpad-%c"¯GAMEDEVICE_VK_TAB"Tab"°GAMEDEVICE_VK_BACK"Backspace"±GAMEDEVICE_VK_CLEAR"Delete"²GAMEDEVICE_VK_RETURN"Enter"³GAMEDEVICE_VK_LSHIFT"LShift"´GAMEDEVICE_VK_RSHIFT"RShift"µGAMEDEVICE_VK_LCONTROL"LCTRL"¶GAMEDEVICE_VK_RCONTROL"RCTRL"·GAMEDEVICE_VK_LMENU"LAlt"¸GAMEDEVICE_VK_RMENU"RAlt"¹GAMEDEVICE_VK_PAUSE"Pause"ºGAMEDEVICE_VK_CAPITAL"Capslock"»GAMEDEVICE_VK_ESCAPE"Disabled"¼GAMEDEVICE_VK_SPACE"Space"½GAMEDEVICE_VK_PRIOR"PgUp"¾GAMEDEVICE_VK_NEXT"PgDn"¿GAMEDEVICE_VK_HOME"Home"ÀGAMEDEVICE_VK_END"End"ÁGAMEDEVICE_VK_LEFT"Left"ÂGAMEDEVICE_VK_RIGHT"Right"ÃGAMEDEVICE_VK_UP"Up"ÄGAMEDEVICE_VK_DOWN"Down"ÅGAMEDEVICE_VK_SELECT"Select"ÆGAMEDEVICE_VK_PRINT"Print"ÇGAMEDEVICE_VK_EXECUTE"Execute"ÈGAMEDEVICE_VK_SNAPSHOT"SnapShot"ÉGAMEDEVICE_VK_INSERT"Insert"ÊGAMEDEVICE_VK_DELETE"Delete"ËGAMEDEVICE_VK_HELP"Help"ÌGAMEDEVICE_VK_LWIN"LWinKey"ÍGAMEDEVICE_VK_RWIN"RWinKey"ÎGAMEDEVICE_VK_APPS"AppKey"ÏGAMEDEVICE_VK_MULTIPLY"Numpad *"ÐGAMEDEVICE_VK_ADD"Numpad +"ÑGAMEDEVICE_VK_SEPARATOR"\\"ÒGAMEDEVICE_VK_OEM_1"Semi-Colon"ÓGAMEDEVICE_VK_OEM_7"Apostrophe"ÔGAMEDEVICE_VK_OEM_COMMA"Comma"ÕGAMEDEVICE_VK_OEM_PERIOD"Period"ÖGAMEDEVICE_VK_SUBTRACT"Numpad -"×GAMEDEVICE_VK_DECIMAL"Numpad ."ØGAMEDEVICE_VK_DIVIDE"Numpad /"ÙGAMEDEVICE_VK_NUMLOCK"Num-lock"ÚGAMEDEVICE_VK_SCROLL"Scroll-lock"ÛWINPROC_TURBOMODE_ON"Fast-Forward Activated"ßWINPROC_TURBOMODE_OFF"Fast-Forward Deactivated"àWINPROC_TURBOMODE_TEXT"Fast-Forward"áWINPROC_HDMA_TEXT"HDMA emulation"âWINPROC_BG1"BG#1"ãWINPROC_BG2"BG#2"äWINPROC_BG3"BG#3"åWINPROC_BG4"BG#4"æWINPROC_SPRITES"Sprites"çWINPROC_PADSWAP"Joypad swapping"èWINPROC_CONTROLERS0"Multiplayer 5 on #0"éWINPROC_CONTROLERS1"Joypad on #0"êWINPROC_CONTROLERS2"Mouse on #1"ëWINPROC_CONTROLERS3"Mouse on #0"ìWINPROC_CONTROLERS4"Superscope on #1"íWINPROC_CONTROLERS5"Justifier 1 on #1"îWINPROC_CONTROLERS6"Justifier 2 on #1"ïWINPROC_BGHACK"Background layering hack"ðWINPROC_MODE7INTER"Mode 7 Interpolation"ñWINPROC_TRANSPARENCY"Transparency effects"òWINPROC_CLIPWIN"Graphic clip windows"óWINPROC_PAUSE"Pause"ôWINPROC_EMUFRAMETIME"Emulated frame time: %dms"õWINPROC_AUTOSKIP"Auto Frame Skip"öWINPROC_FRAMESKIP"Frame skip: %d"÷WINPROC_TURBO_R_ON"Turbo R Activated"øWINPROC_TURBO_R_OFF"Turbo R Deactivated"ùWINPROC_TURBO_L_ON"Turbo L Activated"úWINPROC_TURBO_L_OFF"Turbo L Deactivated"ûWINPROC_TURBO_X_ON"Turbo X Activated"üWINPROC_TURBO_X_OFF"Turbo X Deactivated"ýWINPROC_TURBO_Y_ON"Turbo Y Activated"þWINPROC_TURBO_Y_OFF"Turbo Y Deactivated"ÿWINPROC_TURBO_A_ON"Turbo A Activated"WINPROC_TURBO_A_OFF"Turbo A Deactivated"WINPROC_TURBO_B_ON"Turbo B Activated"WINPROC_TURBO_B_OFF"Turbo B Deactivated"WINPROC_TURBO_SEL_ON"Turbo Select Activated"WINPROC_TURBO_SEL_OFF"Turbo Select Deactivated"WINPROC_TURBO_START_ON"Turbo Start Activated"WINPROC_TURBO_START_OFF"Turbo Start Deactivated"WINPROC_FILTER_RESTART"You will need to restart Snes9x before the output image\nprocessing option change will take effect."WINPROC_DISCONNECT"Disconnect from the NetPlay server first." WINPROC_NET_RESTART"Your game will be reset after the ROM has been sent due to\nyour 'Sync Using Reset Game' setting.\n\n" +WINPROC_INTERPOLATED_SND"Interpolated sound" WINPROC_SYNC_SND"Sync sound" is is what you want?" WINPROC_SND_RESTART"You will need to reset your game or load another one\nbefore enabling the sound CPU will take effect."EMUSET_TITLE"Emulation Settings"EMUSET_LABEL_FREEZE"Freeze Folder Directory"EMUSET_BROWSE"&Browse..."EMUSET_LABEL_ASRAM"Auto-Save S-RAM"EMUSET_LABEL_ASRAM_TEXT"seconds after last change (0 disables auto-save)"EMUSET_LABEL_SMAX"Skip at most"EMUSET_LABEL_SMAX_TEXT"frames in auto-frame rate mode"EMUSET_LABEL_STURBO"Skip Rendering"EMUSET_LABEL_STURBO_TEXT"frames in fast-forward mode"EMUSET_TOGGLE_TURBO"Toggled fast-forward mode"NPOPT_TITLE"Netplay Options"NPOPT_LABEL_PORTNUM"Socket Port Number" NPOPT_LABEL_PAUSEINTERVAL"Ask Server to Pause when"!NPOPT_LABEL_PAUSEINTERVAL_TEXT"frames behind""NPOPT_LABEL_MAXSKIP"Maximum Frame Rate Skip"#NPOPT_SYNCBYRESET"Sync By Reset"$NPOPT_SENDROM"Send ROM Image to Client on Connect"%NPOPT_ACTASSERVER"Act As Server"&NPOPT_PORTNUMBLOCK"Port Settings"'NPOPT_CLIENTSETTINGSBLOCK"Client Settings"(NPOPT_SERVERSETTINGSBLOCK"Server Settings")NPCON_TITLE"Connect to Server".NPCON_LABEL_SERVERADDY"Server Address"/NPCON_LABEL_PORTNUM"Port Number"0NPCON_CLEARHISTORY"Clear History"1MOVIE_INFO_REPLAY"Movie replay"6MOVIE_INFO_RECORD"Movie record"7MOVIE_INFO_RERECORD"Movie re-record"8MOVIE_INFO_REWIND"Movie rewind"9MOVIE_INFO_STOP"Movie stop":MOVIE_INFO_END"Movie end";MOVIE_INFO_RECORDING_ENABLED"Recording enabled"<MOVIE_INFO_RECORDING_DISABLED"Recording disabled"=MOVIE_ERR_SNAPSHOT_WRONG_MOVIE"Snapshot not from this movie">MOVIE_ERR_SNAPSHOT_NOT_MOVIE"Not a movie snapshot"?MOVIE_ERR_COULD_NOT_OPEN"Could not open movie file."@MOVIE_ERR_NOT_FOUND"File not found."AMOVIE_ERR_WRONG_FORMAT"File is wrong format."BMOVIE_ERR_WRONG_VERSION"File is wrong version."CAVI_CONFIGURATION_CHANGED"AVI recording stopped (configuration settings changed)."H!!ãÿ$HWBÿÿÉ0 ÿÿ ÿÿe nodrop.curÿÿÿÿe icon1.icoÿÿÿÿo openfold.bmpÿÿÿÿp closedfold.bmpÿÿÿÿq cdd.bmpÿÿÿÿr nd.bmpÿÿÿÿs hd.bmpÿÿÿÿ… pad.bmpÿÿÿÿ rt_manif.bin 3$HWBÿÿÊ0 12101IDC_CURSOR_SCOPEc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rc$ÿÿ9103IDR_SNES9X_ACCELERATORSc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rc$ID_SOUND_NOSOUNDUœID_SOUND_8000HZaœID_SOUND_11025HZbœID_SOUND_16000HZ–œID_SOUND_22050HZcœID_SOUND_30000HZeœID_SOUND_32000HZŸœID_SOUND_35000HZ—œID_SOUND_44100HZdœID_SOUND_48000HZ•œID_CHEAT_SEARCH€œID_CHEAT_ENTERœID_FILE_OPENáID_SOUND_REVERSE_STEREO˜œID_SOUND_OPTIONS„œID_WINDOW_STRETCH`œID_TURBO_R£œID_TURBO_B¦œID_SCREENSHOT®œID_OPTIONS_DISPLAYXœID_OPTIONS_JOYPADVœID_OPTIONS_SETTINGS†œID_TURBO_Y¤œID_TURBO_L¢œID_TURBO_A§œID_TURBO_X¥œID_WINDOW_FULLSCREEN]œID_SOUND_INTERPOLATED[œID_SOUND_SYNC\œID_TURBO_SELECT¡œID_TURBO_START œ$ÿÿ5102IDD_SOUND_OPTSc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rcMIDC_STATICÿÿIDC_STATICÿÿIDOKIDC_DRIVERéIDC_STATICÿÿIDC_BUFLENêIDC_STATICÿÿIDC_RATEëIDC_STATICÿÿIDC_MIXìIDC_STATICÿÿIDC_16BITíIDC_STEREOîIDC_REV_STEREOïIDC_LINEAR_INTERðIDC_SYNC_TO_SOUND_CPUñIDC_ENVXòIDC_ECHOóIDC_CACHINGôIDC_MASTER_VOLõIDC_SPC700ONöIDC_ANTIRES÷IDC_MUTEøIDC_SKIP_TYPEùIDC_STATICÿÿIDCANCELIDC_FMUTúIDC_WIP1ûIDC_FAMTü$ÿÿ5101IDD_SPC7110_CACHEc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rc‹IDOKIDCANCELIDC_SPC7110_ALLýIDC_SPC7110_SOMEþIDC_SPC7110_FILEÿIDC_CACHE_MBIDC_SPIN_CACHE$ÿÿ5103IDD_7110_RTCc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rcŸIDOKIDCANCELIDC_STATICÿÿIDC_RTC_D8IDC_RTC_D4IDC_RTC_D2IDC_RTC_D1IDC_RTC_E8IDC_RTC_E4IDC_RTC_E2IDC_RTC_E1IDC_RTC_F8IDC_RTC_F4 IDC_RTC_F2 +IDC_RTC_F1 IDC_STATICÿÿIDC_STATICÿÿIDC_STATICÿÿIDC_DAY IDC_YEAR IDC_LBLDAYIDC_MONTHIDC_HOURIDC_MINUTEIDC_SECONDIDC_LBLMONTHIDC_LBLYEARIDC_STATICÿÿIDC_STATICÿÿIDC_STATICÿÿIDC_STATICÿÿIDC_STATICÿÿIDC_STATICÿÿIDC_LBLHOURIDC_LBLMINUTEIDC_LBLSECOND$ÿÿ5104IDD_ROM_INFOc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rcÝIDOKIDC_ROM_DATAIDC_WARNINGS$ÿÿ5105IDD_ABOUTc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rcèIDOKIDC_DISCLAIMER$ÿÿ5106IDD_EMU_SETTINGSc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rcóIDC_FREEZE_FOLDERIDC_BROWSEIDC_AUTO_SAVE_DELAY!IDC_SRAM_SPIN%IDC_MAX_SKIP"IDC_SPIN_MAX_SKIP&IDC_TURBO_SKIP#IDC_SPIN_TURBO_SKIP'IDC_TOGGLE_TURBO$IDOKIDCANCELIDC_LABEL_FREEZE™IDC_LABEL_ASRAMšIDC_LABEL_SMAX›IDC_LABEL_STURBOœIDC_LABEL_ASRAM_TEXTIDC_LABEL_SMAX_TEXTžIDC_LABEL_STURBO_TEXTŸIDC_INACTIVE_PAUSE($ÿÿ5107IDD_OPEN_ROMc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rcIDC_ROM_DIR(IDC_ROMLIST,IDC_MEM_TYPE-IDC_INTERLEAVE)IDC_VIDEO_MODE*IDC_HEADER+IDOKIDCANCELIDC_STATICÿÿIDC_STATICÿÿIDC_STATICÿÿIDC_STATICÿÿ$ÿÿ5108IDD_GFX_PACKc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rc8IDC_STAR_OCEAN.IDC_STATICÿÿIDC_SO_BROWSE/IDC_FEOEZ0IDC_STATICÿÿIDC_FEOEZ_BROWSE1IDC_MDH2IDC_STATICÿÿIDC_MDH_BROWSE3IDC_SPL44IDC_STATICÿÿIDC_SPL4_BROWSE5IDC_SJNS6IDC_STATICÿÿIDC_FEOEZ_SJNS_BROWSE7IDC_SFA28IDC_STATICÿÿIDC_SFA2_BROWSE9IDC_SFA2E:IDC_STATICÿÿIDC_SFA2E_BROWSE;IDC_SFZ2<IDC_STATICÿÿIDC_SFZ2_BROWSE=IDOKIDCANCEL$ÿÿ5110IDD_NPOPTIONSc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rc[IDC_PORTNUMBLOCK IDC_LABEL_PORTNUM£IDC_PORTNUMBERAKIDC_CLIENTSETTINGSBLOCK¡IDC_LABEL_PAUSEINTERVAL¤IDC_PAUSEINTERVALCIDC_PAUSESPINEIDC_LABEL_PAUSEINTERVAL_TEXT¥IDC_LABEL_MAXSKIP¦IDC_MAXSKIPDIDC_MAXSPINIIDC_SERVERSETTINGSBLOCK¢IDC_SENDROMGIDC_ACTASSERVERHIDOKIDCANCELIDC_SYNCBYRESETF$ÿÿ5123IDD_NEWDISPLAYc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rcƒIDOKIDCANCELIDC_TESTMODELIDC_SETDMODEOIDC_VIDMODELISTNIDC_STATICÿÿIDC_SHOWFPSTIDC_STRETCHUIDC_FULLSCREENVIDC_BILINEARMD7WIDC_STATICÿÿIDC_RENDER16BITXIDC_TRANSYIDC_HIRESZIDC_STATICÿÿIDC_FILTERBOX\IDC_AUTOFRAME]IDC_LIMITFRAMES^IDC_STATICÿÿIDC_FRAMERATESKIPSLIDER`IDC_STATICÿÿIDC_DBLBUFFERbIDC_CURRMODEcIDC_STATICÿÿIDC_STATICÿÿIDC_HEIGHT_EXTEND®IDC_VIDEOCARDdIDC_ASPECT¯$ÿÿ5111IDD_CHEATERc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rcºIDC_CHEAT_LISTkIDC_ADD_CHEATjIDC_DELETE_CHEATdIDC_UPDATE_CHEATeIDC_CLEAR_CHEATSfIDC_CHEAT_CODE[IDC_CHEAT_DESCRIPTIONgIDC_CHEAT_ADDRESShIDC_CHEAT_BYTEiIDOKIDCANCELIDC_LABEL_CHEAT_CODE§IDC_LABEL_CHEAT_DESCRIPTION¨IDC_LABEL_CHEAT_ADDRESS©IDC_LABEL_CHEAT_BYTEª$ÿÿ5124IDD_NETPLAYPROGRESSc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rcÛIDC_STATICÿÿIDC_NPPROGRESSd$ÿÿ5125IDD_INPUTCONFIGc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rcåIDC_JPCOMBOeIDC_JPTOGGLEfIDC_UPBIDC_LEFTHIDC_DOWNFIDC_RIGHTRIDC_BOIDC_APIDC_YNIDC_XQIDC_STARTKIDC_SELECTJIDC_LLIDC_RMIDC_UPLEFTIIDC_UPRIGHTCIDC_DWNRIGHTEIDC_DWNLEFTGIDCANCELIDOKIDC_LABEL_BLUEpIDC_LABEL_UP‰IDC_LABEL_RIGHTŒIDC_LABEL_LEFTŠIDC_LABEL_DOWN‹IDC_LABEL_AŽIDC_LABEL_XIDC_LABEL_BIDC_LABEL_YIDC_LABEL_L“IDC_LABEL_START‘IDC_LABEL_R”IDC_LABEL_SELECT’IDC_LABEL_UPLEFT•IDC_LABEL_DOWNRIGHT—IDC_LABEL_UPRIGHT–IDC_LABEL_DOWNLEFT˜lIDC_STATICÿÿIDC_ALLOWLEFTRIGHTgIDC_TOGLh$ÿÿ5129IDD_CHEAT_SEARCHc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rc*IDOKIDCANCELIDC_ADDYSmIDC_C_SEARCHnIDC_C_ADDoIDC_C_RESETpIDC_1_BYTEqIDC_2_BYTErIDC_3_BYTEsIDC_4_BYTEtIDC_STATICÿÿIDC_STATICÿÿIDC_LESS_THANuIDC_GREATER_THANvIDC_LESS_THAN_EQUALwIDC_GREATER_THAN_EQUALxIDC_EQUALyIDC_NOT_EQUALzIDC_STATICÿÿIDC_STATICÿÿIDC_PREV{IDC_ENTERED|IDC_UNSIGNED}IDC_SIGNED~IDC_HEXIDC_VALUE_ENTERBIDC_ENTER_LABEL€$ÿÿ5130IDD_DIALOG1c:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rcbIDOKIDCANCELIDC_COMBO1ƒ$ÿÿ5131IDD_CHEAT_FROM_SEARCHc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rcmIDOKIDCANCELIDC_NC_ADDRESS„IDC_NC_CURRVAL…IDC_NC_PREVVAL†IDC_NC_NEWVAL‡IDC_NC_DESCˆIDC_STATICÿÿIDC_STATICÿÿIDC_STATICÿÿIDC_STATICÿÿIDC_STATICÿÿ$ÿÿ5134IDD_OPENMOVIEc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rc‚IDOKIDCANCELIDC_MOVIE_PATH¸IDC_STATICÿÿIDC_BROWSE_MOVIE¹IDC_STATICÿÿIDC_STATICÿÿIDC_STATICÿÿIDC_STATICÿÿIDC_MOVIE_DATEºIDC_MOVIE_LENGTH»IDC_MOVIE_FRAMES¼IDC_MOVIE_RERECORD½IDC_STATICÿÿIDC_READONLYÂIDC_MOVIE_METADATABIDC_STATICÿÿIDC_RECORD_NOW±IDC_RECORD_RESET²IDC_JOY1³IDC_JOY3µIDC_JOY2´IDC_JOY4¶IDC_JOY5·IDC_STATICÿÿIDC_WIP1ûIDC_ENVXòIDC_FMUTúIDC_STATICÿÿIDC_ALLOWLEFTRIGHTgIDC_STATICÿÿIDC_SYNC_TO_SOUND_CPUñIDC_LOADEDFROMMOVIE¿IDC_MOVIEROMINFOÀIDC_CURRENTROMINFOÁ$ÿÿ5135IDD_CREATEMOVIEc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rc¿IDOKIDCANCELIDC_MOVIE_PATH¸IDC_STATICÿÿIDC_BROWSE_MOVIE¹IDC_STATICÿÿIDC_RECORD_NOW±IDC_RECORD_RESET²IDC_JOY1³IDC_JOY3µIDC_JOY2´IDC_JOY4¶IDC_JOY5·IDC_STATICÿÿIDC_MOVIE_METADATABIDC_STATICÿÿIDC_WIP1ûIDC_ENVXòIDC_STATICÿÿIDC_ALLOWLEFTRIGHTgIDC_FMUTúIDC_SYNC_TO_SOUND_CPUñ$ÿÿ5136IDD_KEYCUSTOMc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rcèIDCANCELIDOKIDC_LABEL_UP‰IDC_LABEL_RIGHTŒIDC_LABEL_LEFTŠIDC_LABEL_DOWN‹IDC_LABEL_BIDC_LABEL_L“IDC_LABEL_START‘IDC_LABEL_R”IDC_LABEL_SELECT’IDC_LABEL_AŽIDC_SPEEDUP´IDC_SPEEDDOWN¯IDC_PAUSE°IDC_FRAMEADVANCE±IDC_SKIPUP²IDC_SKIPDOWN³IDC_SCOPETURBOµIDC_SCOPEPAUSE¶IDC_FRAMECOUNT·IDC_READONLYÂIDC_SAVE1¸IDC_LABEL_UP2IDC_SAVE2¹IDC_LABEL_UP3žIDC_SAVE3ºIDC_LABEL_UP4ŸIDC_SAVE4»IDC_LABEL_UP5 IDC_SAVE5¼IDC_LABEL_UP6¡IDC_SAVE6½IDC_LABEL_UP7¢IDC_SAVE7¾IDC_LABEL_UP8£IDC_SAVE8¿IDC_LABEL_UP9¤IDC_SAVE9ÀIDC_LABEL_UP10¥IDC_SAVE10ÁIDC_LABEL_UP11¦IDC_SAVE11ÃIDC_LABEL_UP12§IDC_SAVE12ÄIDC_LABEL_UP13¨IDC_SAVE13ÅIDC_LABEL_UP14©IDC_SAVE14ÆIDC_LABEL_UP15ªIDC_SAVE15ÇIDC_LABEL_UP16«IDC_SAVE16ÈIDC_LABEL_UP17¬IDC_SAVE17ÉIDC_LABEL_UP18­IDC_SAVE18ÊIDC_LABEL_UP19®IDC_SAVE19ËIDC_LABEL_UP20ÍIDC_SAVE20ÌIDC_LABEL_UP21ÎIDC_LABEL_RIGHT2IDC_FASTFORWARDÏIDC_LABEL_R2•IDC_SHOWPRESSEDÐ$ÿÿ240102IDD_SOUND_OPTSc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rcX$ÿÿ240125IDD_INPUTCONFIGc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rc¯$ÿÿDESIGNINFOGUIDELINES$ÿÿ14101IDI_ICON1c:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rca$ÿÿ2111IDB_OPENFOLDERc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rch$ÿÿ2112IDB_CLOSEDFOLDERc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rci$ÿÿ2113IDB_CDDRIVEc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rcj$ÿÿ2114IDB_NETDRIVEc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rck$ÿÿ2115IDB_HARDDRIVEc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rcl$ÿÿ2133IDB_PADc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rcm$ÿÿ241IDR_RT_MANIFEST2c:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rct$ÿÿ161VS_VERSION_INFOc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rc‡$ÿÿTEXTINCLUDE1$ÿÿTEXTINCLUDE2$ÿÿTEXTINCLUDE3$ÿÿ4102IDR_MENU_NLc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rcÈID_FILE_OPENáID_FILE_EXITAœID_OPTIONS_JOYPADVœID_SOUND_8BIT8000HZMONOEœID_SOUND_8BIT8000HZSTEREOMœID_SOUND_8BIT11025HZMONOFœID_SOUND_8BIT11025HZSTEREONœID_SOUND_8BIT22050HZMONOGœID_SOUND_8BIT22050HZSTEREOOœID_SOUND_8BIT44100HZMONOHœID_SOUND_8BIT44100HZSTEREOPœID_SOUND_16BIT8000HZMONOIœID_SOUND_16BIT8000HZSTEREOQœID_SOUND_16BIT11025HZMONOJœID_SOUND_16BIT11025HZSTEREORœID_SOUND_16BIT22050HZMONOKœID_SOUND_16BIT22050HZSTEREOSœID_SOUND_16BIT44100HZMONOLœID_SOUND_16BIT44100HZSTEREOTœID_SOUND_NOSOUNDUœID_LANGUAGE_ENGLISHBœID_LANGUAGE_NEDERLANDSCœID_WINDOW_HIDEMENUBARDœ$ÿÿ5109IDD_NETCONNECTc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rcIDOKIDCANCELIDC_LABEL_SERVERADDY«IDC_CLEARHISTORY@IDC_LABEL_PORTNUM£IDC_PORTNUMBER?IDC_HOSTNAME>$ÿÿ4101IDR_MENU_USc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x.rc1ID_FILE_OPENáID_RECENT_DUMMYšœID_FILE_SAVE1mœID_FILE_SAVE2nœID_FILE_SAVE3oœID_FILE_SAVE4pœID_FILE_SAVE5qœID_FILE_SAVE6rœID_FILE_SAVE7sœID_FILE_SAVE8tœID_FILE_SAVE9uœID_FILE_LOAD1vœID_FILE_LOAD2wœID_FILE_LOAD3xœID_FILE_LOAD4yœID_FILE_LOAD5zœID_FILE_LOAD6{œID_FILE_LOAD7|œID_FILE_LOAD8}œID_FILE_LOAD9~œID_FILE_SAVE_SPC_DATA‚œID_FILE_SAVE_SRAM_DATA™œIDM_LOG_7110›œIDM_ROM_INFOžœID_FILE_MOVIE_PLAY±œID_FILE_MOVIE_RECORD³œID_FILE_MOVIE_STOP²œID_FILE_WRITE_AVI´œID_FILE_STOP_AVIµœID_FILE_RESETYœID_FILE_PAUSEZœID_FILE_EXITAœID_OPTIONS_DISPLAYXœID_OPTIONS_SETTINGS†œIDM_7110_CACHEœIDM_GFX_PACKS¬œVœID_OPTIONS_KEYCUSTOM¶œIDM_ENABLE_MULTITAP¨œIDM_MOUSE_TOGGLE©œIDM_SCOPE_TOGGLEªœIDM_JUSTIFIER­œID_SOUND_NOSOUNDUœID_SOUND_8000HZaœID_SOUND_11025HZbœID_SOUND_16000HZ–œID_SOUND_22050HZcœID_SOUND_30000HZeœID_SOUND_32000HZŸœID_SOUND_35000HZ—œID_SOUND_44100HZdœID_SOUND_48000HZ•œID_SOUND_25MSkœID_SOUND_50MSfœID_SOUND_100MSgœID_SOUND_200MShœID_SOUND_500MSiœID_SOUND_1SjœID_SOUND_2SlœID_SOUND_16BIT^œID_SOUND_STEREO_œID_SOUND_REVERSE_STEREO˜œIDM_CATCH_UP_SOUND«œID_SOUND_INTERPOLATED[œID_SOUND_SYNC\œID_SOUND_OPTIONS„œID_LANGUAGE_ENGLISHBœID_LANGUAGE_NEDERLANDSCœID_WINDOW_HIDEMENUBARDœID_WINDOW_FULLSCREEN]œID_WINDOW_STRETCH`œID_CHEAT_ENTERœID_CHEAT_SEARCH€œID_CHEAT_APPLYœIDM_7110_RTCœœID_NETPLAY_CONNECTŽœID_NETPLAY_DISCONNECTœID_NETPLAY_SERVERœID_NETPLAY_SYNC’œID_NETPLAY_ROM‘œID_NETPLAY_SEND_ROM_ON_CONNECT“œID_NETPLAY_SYNC_BY_RESET”œID_NETPLAY_OPTIONSœID_HELP_ABOUTƒœ$ÿÿ$ÿÿ7$HWBÿÿ/0 c:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\resource.hc:\Program Files\Visual Studio\Vc7\atlmfc\include/afxres.hc:\Program Files\Visual Studio\Vc7\atlmfc\include/winres.hc:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\language.h$HWBÿÿ-0 12101IDC_CURSOR_SCOPE9103IDR_SNES9X_ACCELERATORS5102IDD_SOUND_OPTS5101IDD_SPC7110_CACHE5103IDD_7110_RTC5104IDD_ROM_INFO5105IDD_ABOUT5106IDD_EMU_SETTINGS5107IDD_OPEN_ROM5108IDD_GFX_PACK5110IDD_NPOPTIONS5123IDD_NEWDISPLAY5111IDD_CHEATER5124IDD_NETPLAYPROGRESS5125IDD_INPUTCONFIG5129IDD_CHEAT_SEARCH5130IDD_DIALOG15131IDD_CHEAT_FROM_SEARCH5134IDD_OPENMOVIE5135IDD_CREATEMOVIE5136IDD_KEYCUSTOM5109IDD_NETCONNECT240102IDD_SOUND_OPTS240125IDD_INPUTCONFIGDESIGNINFOGUIDELINES14101IDI_ICON12111IDB_OPENFOLDER2112IDB_CLOSEDFOLDER2113IDB_CDDRIVE2114IDB_NETDRIVE2115IDB_HARDDRIVE2133IDB_PAD241IDR_RT_MANIFEST2161VS_VERSION_INFOTEXTINCLUDE1TEXTINCLUDE2TEXTINCLUDE34102IDR_MENU_NL4101IDR_MENU_USm$HWBÿÿ.0 ²ID_SEPARATOR0IDOK1  +   IDR_RT_MANIFEST21!VS_VERSION_INFO1"IDCANCEL2  +   IDABORT3IDRETRY4IDIGNORE5IDYES6IDNO7IDCLOSE8IDHELP9AFX_IDC_LISTBOX100IDR_MENU_US101'IDC_CURSOR_SCOPE101IDD_SPC7110_CACHE101IDI_ICON1101AFX_IDC_CHANGE101_APS_NEXT_SYMED_VALUE101IDR_MENU_NL102&IDC_CURSOR_BLANK102IDD_SOUND_OPTS102AFX_IDC_BROWSER102IDR_SNES9X_ACCELERATORS103IDD_7110_RTC103IDD_ROM_INFO104IDD_ABOUT105IDD_EMU_SETTINGS106IDD_OPEN_ROM107 IDD_GFX_PACK108 +IDD_NETCONNECT109IDD_NPOPTIONS110 IDB_OPENFOLDER111IDD_CHEATER111 IDB_CLOSEDFOLDER112IDB_CDDRIVE113IDB_NETDRIVE114IDB_HARDDRIVE115IDD_NEWDISPLAY123 IDD_NETPLAYPROGRESS124IDD_INPUTCONFIG125IDB_JOYPAD127IDD_CHEAT_SEARCH129IDD_DIALOG1130IDD_CHEAT_FROM_SEARCH131IDB_PAD133 IDD_OPENMOVIE134IDD_CREATEMOVIE135IDD_KEYCUSTOM136_APS_NEXT_RESOURCE_VALUE141AFX_IDC_PRINT_DOCNAME201AFX_IDC_PRINT_PRINTERNAME202AFX_IDC_PRINT_PORTNAME203AFX_IDC_PRINT_PAGENUM204AFX_IDC_FONTPROP1000IDC_DRIVER1001AFX_IDC_FONTNAMES1001IDC_BUFLEN1002AFX_IDC_FONTSTYLES1002IDC_RATE1003AFX_IDC_FONTSIZES1003IDC_MIX1004AFX_IDC_STRIKEOUT1004IDC_16BIT1005AFX_IDC_UNDERLINE1005IDC_STEREO1006AFX_IDC_SAMPLEBOX1006IDC_REV_STEREO1007IDC_LINEAR_INTER1008IDC_SYNC_TO_SOUND_CPU1009IDC_ENVX1010IDC_ECHO1011IDC_CLEARSRAM1011IDC_CACHING1012IDC_MASTER_VOL1013IDC_SPC700ON1014IDC_ANTIRES1015IDC_MUTE1016IDC_SKIP_TYPE1017IDC_SCROLLBAR11018IDC_FMUT1018IDC_VRAM_DISPLAY1019IDC_WIP11019IDC_ADDRESS1020IDC_FAMT1020IDC_SPC7110_ALL1021IDC_SPC7110_SOME1022IDC_SPC7110_FILE1023IDC_RTC_D81024IDC_RTC_D41025IDC_RTC_D21026IDC_RTC_D11027IDC_RTC_E81028IDC_RTC_E41029IDC_RTC_E21030IDC_RTC_E11031IDC_RTC_F81032IDC_RTC_F41033IDC_RTC_F21034IDC_RTC_F11035IDC_DAY1036IDC_YEAR1037IDC_MONTH1038IDC_HOUR1039IDC_MINUTE1040IDC_SECOND1041IDC_LBLMONTH1042IDC_LBLYEAR1043IDC_LBLDAY1044IDC_LBLHOUR1045IDC_LBLMINUTE1046IDC_LBLSECOND1047IDC_CACHE_MB1048IDC_SPIN_CACHE1049IDC_ROM_DATA1051IDC_WARNINGS1052IDC_DISCLAIMER1053IDC_FREEZE_FOLDER1054IDC_BROWSE1055IDC_CANCEL1056IDC_AUTO_SAVE_DELAY1057IDC_MAX_SKIP1058IDC_TURBO_SKIP1059IDC_TOGGLE_TURBO1060IDC_SRAM_SPIN1061IDC_SPIN_MAX_SKIP1062IDC_SPIN_TURBO_SKIP1063IDC_ROM_DIR1064 IDC_INACTIVE_PAUSE1064IDC_INTERLEAVE1065 IDC_VIDEO_MODE1066 IDC_HEADER1067 IDC_ROMLIST1068 IDC_MEM_TYPE1069 IDC_STAR_OCEAN1070 +IDC_SO_BROWSE1071 +IDC_FEOEZ1072 +IDC_FEOEZ_BROWSE1073 +IDC_MDH1074 +IDC_MDH_BROWSE1075 +IDC_SPL41076 +IDC_SPL4_BROWSE1077 +IDC_SJNS1078 +IDC_FEOEZ_SJNS_BROWSE1079 +IDC_SFA21080 +IDC_SFA2_BROWSE1081 +IDC_SFA2E1082 +IDC_SFA2E_BROWSE1083 +IDC_SFZ21084 +IDC_SFZ2_BROWSE1085 +IDC_HOSTNAME1086IDC_PORTNUMBER1087IDC_CLEARHISTORY1088IDC_STATIC21089IDC_EDIT11090IDC_UP1090IDC_VALUE_ENTER1090IDC_MOVIE_METADATA1090IDC_PAUSEINTERVAL1091 IDC_UPRIGHT1091IDC_MAXSKIP1092 IDC_PAUSESPIN1093 IDC_DWNRIGHT1093IDC_SYNCBYRESET1094 IDC_DOWN1094IDC_SENDROM1095 IDC_DWNLEFT1095IDC_ACTASSERVER1096 IDC_LEFT1096IDC_MAXSPIN1097 IDC_UPLEFT1097IDC_SELECT1098IDC_PORTNUMBERA1099 IDC_START1099IDC_TESTMODE1100 IDC_L1100AFX_IDC_COLOR_BLACK1100IDC_VIDEOLIST1101IDC_R1101IDC_SELECT21101AFX_IDC_COLOR_WHITE1101IDC_VIDMODELIST1102 IDC_Y1102AFX_IDC_COLOR_RED1102IDC_SETDMODE1103 IDC_B1103AFX_IDC_COLOR_GREEN1103IDC_A1104AFX_IDC_COLOR_BLUE1104IDC_X1105AFX_IDC_COLOR_YELLOW1105IDC_RIGHT1106AFX_IDC_COLOR_MAGENTA1106AFX_IDC_COLOR_CYAN1107IDC_SHOWFPS1108 AFX_IDC_COLOR_GRAY1108IDC_STRETCH1109 AFX_IDC_COLOR_LIGHTGRAY1109IDC_FULLSCREEN1110 AFX_IDC_COLOR_DARKRED1110IDC_BILINEARMD71111 AFX_IDC_COLOR_DARKGREEN1111IDC_RENDER16BIT1112 AFX_IDC_COLOR_DARKBLUE1112IDC_TRANS1113 AFX_IDC_COLOR_LIGHTBROWN1113IDC_HIRES1114 AFX_IDC_COLOR_DARKMAGENTA1114IDC_CHEAT_CODE1115 AFX_IDC_COLOR_DARKCYAN1115IDC_FILTERBOX1116 AFX_IDC_COLORPROP1116IDC_AUTOFRAME1117 AFX_IDC_SYSTEMCOLORS1117IDC_LIMITFRAMES1118 IDC_FRAMERATESKIPSLIDER1120 IDC_TOGGLE1121IDC_DBLBUFFER1122 IDC_CURRMODE1123 IDC_DELETE_CHEAT1124 IDC_NPPROGRESS1124IDC_VIDEOCARD1124 IDC_UPDATE_CHEAT1125 IDC_JPCOMBO1125IDC_CLEAR_CHEATS1126 IDC_JPTOGGLE1126IDC_CHEAT_DESCRIPTION1127 IDC_KEYBOARD1127IDC_ALLOWLEFTRIGHT1127IDC_CHEAT_ADDRESS1128 IDC_TOGL1128IDC_CHEAT_BYTE1129 IDC_ADD_CHEAT1130 IDC_CHEAT_LIST1131 IDC_PICTURE1132IDC_ADDYS1133IDC_OK1134IDC_C_SEARCH1134IDC_RED1135IDC_C_ADD1135IDC_BLUE1136IDC_C_RESET1136IDC_LABEL_BLUE1136IDC_1_BYTE1137IDC_2_BYTE1138IDC_3_BYTE1139IDC_4_BYTE1140IDC_LESS_THAN1141IDC_GREATER_THAN1142IDC_LESS_THAN_EQUAL1143IDC_GREATER_THAN_EQUAL1144IDC_EQUAL1145IDC_NOT_EQUAL1146IDC_PREV1147IDC_ENTERED1148IDC_UNSIGNED1149IDC_SIGNED1150IDC_HEX1151IDC_ENTER_LABEL1152IDC_DIAGTOGGLE1153IDC_UNDO1154IDC_COMBO11155IDC_NC_ADDRESS1156IDC_NC_CURRVAL1157IDC_NC_PREVVAL1158IDC_NC_NEWVAL1159IDC_NC_DESC1160IDC_LABEL_UP1161IDC_LABEL_LEFT1162IDC_LABEL_DOWN1163IDC_LABEL_RIGHT1164IDC_LABEL_B1165IDC_LABEL_A1166IDC_LABEL_Y1167IDC_LABEL_RIGHT21167IDC_LABEL_X1168IDC_LABEL_START1169IDC_LABEL_SELECT1170IDC_LABEL_L1171IDC_LABEL_R1172IDC_LABEL_UPLEFT1173IDC_LABEL_R21173IDC_LABEL_UPRIGHT1174IDC_LABEL_R31174IDC_LABEL_DOWNRIGHT1175IDC_LABEL_DOWNLEFT1176IDC_LABEL_FREEZE1177IDC_LABEL_ASRAM1178IDC_LABEL_SMAX1179IDC_LABEL_STURBO1180IDC_LABEL_ASRAM_TEXT1181IDC_LABEL_UP21181IDC_LABEL_SMAX_TEXT1182IDC_LABEL_UP31182IDC_LABEL_STURBO_TEXT1183IDC_LABEL_UP41183IDC_PORTNUMBLOCK1184 IDC_LABEL_UP51184IDC_CLIENTSETTINGSBLOCK1185 IDC_LABEL_UP61185IDC_SERVERSETTINGSBLOCK1186 IDC_LABEL_UP71186IDC_LABEL_PORTNUM1187 IDC_LABEL_UP81187IDC_LABEL_PAUSEINTERVAL1188 IDC_LABEL_UP91188IDC_LABEL_PAUSEINTERVAL_TEXT1189 IDC_LABEL_UP101189IDC_LABEL_MAXSKIP1190 IDC_LABEL_UP111190IDC_LABEL_CHEAT_CODE1191 IDC_LABEL_UP121191IDC_LABEL_CHEAT_DESCRIPTION1192 IDC_LABEL_UP131192IDC_LABEL_CHEAT_ADDRESS1193 IDC_LABEL_UP141193IDC_LABEL_CHEAT_BYTE1194 IDC_LABEL_UP151194IDC_LABEL_SERVERADDY1195IDC_LABEL_UP161195IDC_LABEL_UP171196IDC_LABEL_UP181197IDC_HEIGHT_EXTEND1198 IDC_LABEL_UP191198IDC_SPEEDDOWN1199IDC_ASPECT1199 IDC_PAUSE1200IDC_RECORD_NOW1201IDC_FRAMEADVANCE1201AFX_IDC_PROPNAME1201IDC_RECORD_RESET1202IDC_SKIPUP1202AFX_IDC_PICTURE1202IDC_JOY11203IDC_SKIPDOWN1203AFX_IDC_BROWSE1203IDC_JOY21204IDC_SPEEDUP1204AFX_IDC_CLEAR1204IDC_JOY31205IDC_SCOPETURBO1205IDC_JOY41206IDC_SCOPEPAUSE1206IDC_JOY51207IDC_FRAMECOUNT1207IDC_MOVIE_PATH1208IDC_SAVE11208IDC_BROWSE_MOVIE1209IDC_SAVE21209IDC_MOVIE_DATE1210IDC_SAVE31210IDC_MOVIE_LENGTH1211IDC_SAVE41211IDC_MOVIE_FRAMES1212IDC_SAVE51212IDC_MOVIE_RERECORD1213IDC_SAVE61213IDC_SAVE71214IDC_SAVE81215IDC_LOADEDFROMMOVIE1215IDC_SAVE91216IDC_MOVIEROMINFO1216_APS_NEXT_CONTROL_VALUE1216IDC_SAVE101217IDC_CURRENTROMINFO1217IDC_READONLY1218IDC_SAVE111219IDC_DISPLAY_INPUT1220IDC_SAVE121220IDC_SAVE131221IDC_SAVE141222IDC_SAVE151223IDC_SAVE161224IDC_SAVE171225IDC_SAVE181226IDC_SAVE191227IDC_SAVE201228IDC_LABEL_UP201229IDC_LABEL_UP211230IDC_FASTFORWARD1231IDC_SHOWPRESSED1232IDC_SCREENSHOT1233IDC_LABEL_UP221234IDC_SLOTMINUS1235IDC_LABEL_UP231236IDC_SLOTPLUS1237IDC_LABEL_UP241238IDC_SLOTSAVE1239IDC_LABEL_UP251240IDC_SLOTLOAD1241AFX_IDC_TAB_CONTROL0x3020ID_APPLY_NOW0x3021ID_WIZBACK0x3023ID_WIZNEXT0x3024ID_WIZFINISH0x3025AFX_IDD_NEWTYPEDLG30721AFX_IDD_PRINTDLG30722AFX_IDD_PREVIEW_TOOLBAR30723AFX_IDD_INSERTOBJECT30724AFX_IDD_CHANGEICON30725AFX_IDD_CONVERT30726AFX_IDD_PASTESPECIAL30727AFX_IDD_EDITLINKS30728AFX_IDD_FILEBROWSE30729AFX_IDD_BUSY30730AFX_IDD_OBJECTPROPERTIES30732AFX_IDD_CHANGESOURCE30733AFX_IDC_CONTEXTHELP30977AFX_IDC_MAGNIFY30978AFX_IDC_SMALLARROWS30979AFX_IDC_HSPLITBAR30980AFX_IDC_VSPLITBAR30981AFX_IDC_NODROPCRSR30982AFX_IDC_TRACKNWSE30983AFX_IDC_TRACKNESW30984AFX_IDC_TRACKNS30985AFX_IDC_TRACKWE30986AFX_IDC_TRACK4WAY30987AFX_IDC_MOVE4WAY30988AFX_IDB_MINIFRAME_MENU30994AFX_IDB_CHECKLISTBOX_9530996AFX_IDR_PREVIEW_ACCEL30997AFX_IDC_MOUSE_PAN_NW30998AFX_IDC_MOUSE_PAN_N30999AFX_IDC_MOUSE_PAN_NE31000AFX_IDC_MOUSE_PAN_W31001AFX_IDC_MOUSE_PAN_HV31002AFX_IDC_MOUSE_PAN_E31003AFX_IDC_MOUSE_PAN_SW31004AFX_IDC_MOUSE_PAN_S31005AFX_IDC_MOUSE_PAN_SE31006AFX_IDC_MOUSE_PAN_HORZ31007AFX_IDC_MOUSE_PAN_VERT31008AFX_IDC_MOUSE_ORG_HORZ31009AFX_IDC_MOUSE_ORG_VERT31010AFX_IDC_MOUSE_ORG_HV31011AFX_IDC_MOUSE_MASK31012AFX_IDI_STD_MDIFRAME31233AFX_IDI_STD_FRAME31234AFX_IDD_PROPPAGE_COLOR32257AFX_IDD_PROPPAGE_FONT32258AFX_IDD_PROPPAGE_PICTURE32259AFX_IDB_TRUETYPE32384ID_FILE_EXIT40001&'ID_LANGUAGE_ENGLISH40002&'ID_LANGUAGE_NEDERLANDS40003&'ID_WINDOW_HIDEMENUBAR40004&'ID_SOUND_8BIT8000HZMONO40005&ID_SOUND_8BIT11025HZMONO40006&ID_SOUND_8BIT22050HZMONO40007&ID_SOUND_8BIT44100HZMONO40008&ID_SOUND_16BIT8000HZMONO40009&ID_SOUND_16BIT11025HZMONO40010&ID_SOUND_16BIT22050HZMONO40011&ID_SOUND_16BIT44100HZMONO40012&ID_SOUND_8BIT8000HZSTEREO40013&ID_SOUND_8BIT11025HZSTEREO40014&ID_SOUND_8BIT22050HZSTEREO40015&ID_SOUND_8BIT44100HZSTEREO40016&ID_SOUND_16BIT8000HZSTEREO40017&ID_SOUND_16BIT11025HZSTEREO40018&ID_SOUND_16BIT22050HZSTEREO40019&ID_SOUND_16BIT44100HZSTEREO40020&ID_SOUND_NOSOUND40021&'ID_OPTIONS_JOYPAD40022&ID_WINDOW_SHOWFPS40023ID_OPTIONS_DISPLAY40024'ID_FILE_RESET40025'ID_FILE_PAUSE40026'ID_SOUND_INTERPOLATED40027'ID_SOUND_SYNC40028'ID_WINDOW_FULLSCREEN40029'ID_SOUND_16BIT40030'ID_SOUND_STEREO40031'ID_WINDOW_STRETCH40032'ID_SOUND_8000HZ40033'ID_SOUND_11025HZ40034'ID_SOUND_22050HZ40035'ID_SOUND_44100HZ40036'ID_SOUND_30000HZ40037'ID_SOUND_50MS40038'ID_SOUND_100MS40039'ID_SOUND_200MS40040'ID_SOUND_500MS40041'ID_SOUND_1S40042'ID_SOUND_25MS40043'ID_SOUND_2S40044'ID_FILE_SAVE140045'ID_FILE_SAVE240046'ID_FILE_SAVE340047'ID_FILE_SAVE440048'ID_FILE_SAVE540049'ID_FILE_SAVE640050'ID_FILE_SAVE740051'ID_FILE_SAVE840052'ID_FILE_SAVE940053'ID_FILE_LOAD140054'ID_FILE_LOAD240055'ID_FILE_LOAD340056'ID_FILE_LOAD440057'ID_FILE_LOAD540058'ID_FILE_LOAD640059'ID_FILE_LOAD740060'ID_FILE_LOAD840061'ID_FILE_LOAD940062'ID_CHEAT_ENTER40063'ID_CHEAT_SEARCH40064'ID_CHEAT_APPLY40065'ID_FILE_SAVE_SPC_DATA40066'ID_HELP_ABOUT40067'ID_SOUND_OPTIONS40068'ID_OPTIONS_EMULATION40069ID_OPTIONS_SETTINGS40070'ID_DEBUG_TRACE40071ID_DEBUG_TRACE_SPC40072ID_DEBUG_TRACE_SA140073ID_DEBUG_TRACE_DSP140074ID_DEBUG_FRAME_ADVANCE40075ID_DEBUG_SNES_STATUS40076ID_NETPLAY_SERVER40077'ID_NETPLAY_CONNECT40078'ID_NETPLAY_DISCONNECT40079'ID_NETPLAY_OPTIONS40080'ID_NETPLAY_ROM40081'ID_NETPLAY_SYNC40082'ID_NETPLAY_SEND_ROM_ON_CONNECT40083'ID_NETPLAY_SYNC_BY_RESET40084'ID_SOUND_48000HZ40085'ID_SOUND_16000HZ40086'ID_SOUND_35000HZ40087'ID_SOUND_REVERSE_STEREO40088'ID_FILE_SAVE_SRAM_DATA40089'ID_RECENT_DUMMY40090'IDM_LOG_711040091'IDM_7110_RTC40092'IDM_7110_CACHE40093'IDM_ROM_INFO40094'ID_SOUND_32000HZ40095'ID_TURBO_START40096ID_TURBO_SELECT40097ID_TURBO_L40098ID_TURBO_R40099ID_TURBO_Y40100ID_TURBO_X40101ID_TURBO_B40102ID_TURBO_A40103IDM_ENABLE_MULTITAP40104'IDM_MOUSE_TOGGLE40105'IDM_SCOPE_TOGGLE40106'IDM_CATCH_UP_SOUND40107'IDM_GFX_PACKS40108'IDM_JUSTIFIER40109'ID_SCREENSHOT40110ID_FILE_MOVIE_PLAY40113'ID_FILE_MOVIE_STOP40114'ID_FILE_MOVIE_RECORD40115'ID_FILE_MOVIE_ENABLERECORDING40116ID_FILE_WRITE_AVI40116'ID_FILE_STOP_AVI40117'ID_OPTIONS_KEYCUSTOM40118'_APS_NEXT_COMMAND_VALUE40119AFX_IDS_APP_TITLE0xE000AFX_IDS_IDLEMESSAGE0xE001AFX_IDS_HELPMODEMESSAGE0xE002AFX_IDS_APP_TITLE_EMBEDDING0xE003AFX_IDS_COMPANY_NAME0xE004AFX_IDS_OBJ_TITLE_INPLACE0xE005ID_FILE_NEW0xE100ID_FILE_OPEN0xE101&'ID_FILE_CLOSE0xE102ID_FILE_SAVE0xE103ID_FILE_SAVE_AS0xE104ID_FILE_PAGE_SETUP0xE105ID_FILE_PRINT_SETUP0xE106ID_FILE_PRINT0xE107ID_FILE_PRINT_DIRECT0xE108ID_FILE_PRINT_PREVIEW0xE109ID_FILE_UPDATE0xE10AID_FILE_SAVE_COPY_AS0xE10BID_FILE_SEND_MAIL0xE10CID_FILE_NEW_FRAME0xE10DID_FILE_MRU_FIRST0xE110ID_FILE_MRU_FILE10xE110ID_FILE_MRU_FILE20xE111ID_FILE_MRU_FILE30xE112ID_FILE_MRU_FILE40xE113ID_FILE_MRU_FILE50xE114ID_FILE_MRU_FILE60xE115ID_FILE_MRU_FILE70xE116ID_FILE_MRU_FILE80xE117ID_FILE_MRU_FILE90xE118ID_FILE_MRU_FILE100xE119ID_FILE_MRU_FILE110xE11AID_FILE_MRU_FILE120xE11BID_FILE_MRU_FILE130xE11CID_FILE_MRU_FILE140xE11DID_FILE_MRU_FILE150xE11EID_FILE_MRU_FILE160xE11FID_FILE_MRU_LAST0xE11FID_EDIT_CLEAR0xE120ID_EDIT_CLEAR_ALL0xE121ID_EDIT_COPY0xE122ID_EDIT_CUT0xE123ID_EDIT_FIND0xE124ID_EDIT_PASTE0xE125ID_EDIT_PASTE_LINK0xE126ID_EDIT_PASTE_SPECIAL0xE127ID_EDIT_REPEAT0xE128ID_EDIT_REPLACE0xE129ID_EDIT_SELECT_ALL0xE12AID_EDIT_UNDO0xE12BID_EDIT_REDO0xE12CID_WINDOW_NEW0xE130ID_WINDOW_ARRANGE0xE131ID_WINDOW_CASCADE0xE132ID_WINDOW_TILE_HORZ0xE133ID_WINDOW_TILE_VERT0xE134ID_WINDOW_SPLIT0xE135ID_APP_ABOUT0xE140ID_APP_EXIT0xE141ID_HELP_INDEX0xE142ID_HELP_FINDER0xE143ID_HELP_USING0xE144ID_CONTEXT_HELP0xE145ID_HELP0xE146ID_DEFAULT_HELP0xE147ID_NEXT_PANE0xE150ID_PREV_PANE0xE151ID_FORMAT_FONT0xE160ID_OLE_INSERT_NEW0xE200ID_OLE_EDIT_LINKS0xE201ID_OLE_EDIT_CONVERT0xE202ID_OLE_EDIT_CHANGE_ICON0xE203ID_OLE_EDIT_PROPERTIES0xE204ID_OLE_VERB_FIRST0xE210AFX_ID_PREVIEW_CLOSE0xE300AFX_ID_PREVIEW_NUMPAGE0xE301AFX_ID_PREVIEW_NEXT0xE302AFX_ID_PREVIEW_PREV0xE303AFX_ID_PREVIEW_PRINT0xE304AFX_ID_PREVIEW_ZOOMIN0xE305AFX_ID_PREVIEW_ZOOMOUT0xE306ID_INDICATOR_EXT0xE700ID_INDICATOR_CAPS0xE701ID_INDICATOR_NUM0xE702ID_INDICATOR_SCRL0xE703ID_INDICATOR_OVR0xE704ID_INDICATOR_REC0xE705ID_INDICATOR_KANA0xE706ID_VIEW_TOOLBAR0xE800ID_VIEW_STATUS_BAR0xE801ID_VIEW_REBAR0xE804ID_VIEW_AUTOARRANGE0xE805ID_VIEW_SMALLICON0xE810ID_VIEW_LARGEICON0xE811ID_VIEW_LIST0xE812ID_VIEW_DETAILS0xE813ID_VIEW_LINEUP0xE814ID_VIEW_BYNAME0xE815ID_RECORD_FIRST0xE900ID_RECORD_LAST0xE901ID_RECORD_NEXT0xE902ID_RECORD_PREV0xE903AFX_IDS_SCSIZE0xEF00AFX_IDS_SCMOVE0xEF01AFX_IDS_SCMINIMIZE0xEF02AFX_IDS_SCMAXIMIZE0xEF03AFX_IDS_SCNEXTWINDOW0xEF04AFX_IDS_SCPREVWINDOW0xEF05AFX_IDS_SCCLOSE0xEF06AFX_IDS_SCRESTORE0xEF12AFX_IDS_SCTASKLIST0xEF13AFX_IDS_MDICHILD0xEF1FAFX_IDS_DESKACCESSORY0xEFDAAFX_IDS_OPENFILE0xF000AFX_IDS_SAVEFILE0xF001AFX_IDS_ALLFILTER0xF002AFX_IDS_UNTITLED0xF003AFX_IDS_SAVEFILECOPY0xF004AFX_IDS_PREVIEW_CLOSE0xF005AFX_IDS_UNNAMED_FILE0xF006AFX_IDS_HIDE0xF011AFX_IDP_NO_ERROR_AVAILABLE0xF020AFX_IDS_NOT_SUPPORTED_EXCEPTION0xF021AFX_IDS_RESOURCE_EXCEPTION0xF022AFX_IDS_MEMORY_EXCEPTION0xF023AFX_IDS_USER_EXCEPTION0xF024AFX_IDS_INVALID_ARG_EXCEPTION0xF025AFX_IDS_PRINTONPORT0xF040AFX_IDS_ONEPAGE0xF041AFX_IDS_TWOPAGE0xF042AFX_IDS_PRINTPAGENUM0xF043AFX_IDS_PREVIEWPAGEDESC0xF044AFX_IDS_PRINTDEFAULTEXT0xF045AFX_IDS_PRINTDEFAULT0xF046AFX_IDS_PRINTFILTER0xF047AFX_IDS_PRINTCAPTION0xF048AFX_IDS_PRINTTOFILE0xF049AFX_IDS_OBJECT_MENUITEM0xF080AFX_IDS_EDIT_VERB0xF081AFX_IDS_ACTIVATE_VERB0xF082AFX_IDS_CHANGE_LINK0xF083AFX_IDS_AUTO0xF084AFX_IDS_MANUAL0xF085AFX_IDS_FROZEN0xF086AFX_IDS_ALL_FILES0xF087AFX_IDS_SAVE_MENU0xF088AFX_IDS_UPDATE_MENU0xF089AFX_IDS_SAVE_AS_MENU0xF08AAFX_IDS_SAVE_COPY_AS_MENU0xF08BAFX_IDS_EXIT_MENU0xF08CAFX_IDS_UPDATING_ITEMS0xF08DAFX_IDS_METAFILE_FORMAT0xF08EAFX_IDS_DIB_FORMAT0xF08FAFX_IDS_BITMAP_FORMAT0xF090AFX_IDS_LINKSOURCE_FORMAT0xF091AFX_IDS_EMBED_FORMAT0xF092AFX_IDS_PASTELINKEDTYPE0xF094AFX_IDS_UNKNOWNTYPE0xF095AFX_IDS_RTF_FORMAT0xF096AFX_IDS_TEXT_FORMAT0xF097AFX_IDS_INVALID_CURRENCY0xF098AFX_IDS_INVALID_DATETIME0xF099AFX_IDS_INVALID_DATETIMESPAN0xF09AAFX_IDP_INVALID_FILENAME0xF100AFX_IDP_FAILED_TO_OPEN_DOC0xF101AFX_IDP_FAILED_TO_SAVE_DOC0xF102AFX_IDP_ASK_TO_SAVE0xF103AFX_IDP_FAILED_TO_CREATE_DOC0xF104AFX_IDP_FILE_TOO_LARGE0xF105AFX_IDP_FAILED_TO_START_PRINT0xF106AFX_IDP_FAILED_TO_LAUNCH_HELP0xF107AFX_IDP_INTERNAL_FAILURE0xF108AFX_IDP_COMMAND_FAILURE0xF109AFX_IDP_FAILED_MEMORY_ALLOC0xF10AAFX_IDP_UNREG_DONE0xF10BAFX_IDP_UNREG_FAILURE0xF10CAFX_IDP_DLL_LOAD_FAILED0xF10DAFX_IDP_DLL_BAD_VERSION0xF10EAFX_IDP_PARSE_INT0xF110AFX_IDP_PARSE_REAL0xF111AFX_IDP_PARSE_INT_RANGE0xF112AFX_IDP_PARSE_REAL_RANGE0xF113AFX_IDP_PARSE_STRING_SIZE0xF114AFX_IDP_PARSE_RADIO_BUTTON0xF115AFX_IDP_PARSE_BYTE0xF116AFX_IDP_PARSE_UINT0xF117AFX_IDP_PARSE_DATETIME0xF118AFX_IDP_PARSE_CURRENCY0xF119AFX_IDP_PARSE_GUID0xF11AAFX_IDP_PARSE_TIME0xF11BAFX_IDP_PARSE_DATE0xF11CAFX_IDP_FAILED_INVALID_FORMAT0xF120AFX_IDP_FAILED_INVALID_PATH0xF121AFX_IDP_FAILED_DISK_FULL0xF122AFX_IDP_FAILED_ACCESS_READ0xF123AFX_IDP_FAILED_ACCESS_WRITE0xF124AFX_IDP_FAILED_IO_ERROR_READ0xF125AFX_IDP_FAILED_IO_ERROR_WRITE0xF126AFX_IDP_SCRIPT_ERROR0xF130AFX_IDP_SCRIPT_DISPATCH_EXCEPTION0xF131AFX_IDP_STATIC_OBJECT0xF180AFX_IDP_FAILED_TO_CONNECT0xF181AFX_IDP_SERVER_BUSY0xF182AFX_IDP_BAD_VERB0xF183AFX_IDS_NOT_DOCOBJECT0xF184AFX_IDP_FAILED_TO_NOTIFY0xF185AFX_IDP_FAILED_TO_LAUNCH0xF186AFX_IDP_ASK_TO_UPDATE0xF187AFX_IDP_FAILED_TO_UPDATE0xF188AFX_IDP_FAILED_TO_REGISTER0xF189AFX_IDP_FAILED_TO_AUTO_REGISTER0xF18AAFX_IDP_FAILED_TO_CONVERT0xF18BAFX_IDP_GET_NOT_SUPPORTED0xF18CAFX_IDP_SET_NOT_SUPPORTED0xF18DAFX_IDP_ASK_TO_DISCARD0xF18EAFX_IDP_FAILED_TO_CREATE0xF18FAFX_IDP_FAILED_MAPI_LOAD0xF190AFX_IDP_INVALID_MAPI_DLL0xF191AFX_IDP_FAILED_MAPI_SEND0xF192AFX_IDP_FILE_NONE0xF1A0AFX_IDP_FILE_GENERIC0xF1A1AFX_IDP_FILE_NOT_FOUND0xF1A2AFX_IDP_FILE_BAD_PATH0xF1A3AFX_IDP_FILE_TOO_MANY_OPEN0xF1A4AFX_IDP_FILE_ACCESS_DENIED0xF1A5AFX_IDP_FILE_INVALID_FILE0xF1A6AFX_IDP_FILE_REMOVE_CURRENT0xF1A7AFX_IDP_FILE_DIR_FULL0xF1A8AFX_IDP_FILE_BAD_SEEK0xF1A9AFX_IDP_FILE_HARD_IO0xF1AAAFX_IDP_FILE_SHARING0xF1ABAFX_IDP_FILE_LOCKING0xF1ACAFX_IDP_FILE_DISKFULL0xF1ADAFX_IDP_FILE_EOF0xF1AEAFX_IDP_ARCH_NONE0xF1B0AFX_IDP_ARCH_GENERIC0xF1B1AFX_IDP_ARCH_READONLY0xF1B2AFX_IDP_ARCH_ENDOFFILE0xF1B3AFX_IDP_ARCH_WRITEONLY0xF1B4AFX_IDP_ARCH_BADINDEX0xF1B5AFX_IDP_ARCH_BADCLASS0xF1B6AFX_IDP_ARCH_BADSCHEMA0xF1B7AFX_IDS_OCC_SCALEUNITS_PIXELS0xF1C0AFX_IDS_STATUS_FONT0xF230AFX_IDS_TOOLTIP_FONT0xF231AFX_IDS_UNICODE_FONT0xF232AFX_IDS_MINI_FONT0xF233AFX_IDP_SQL_CONNECT_FAIL0xF281AFX_IDP_SQL_RECORDSET_FORWARD_ONLY0xF282AFX_IDP_SQL_EMPTY_COLUMN_LIST0xF283AFX_IDP_SQL_FIELD_SCHEMA_MISMATCH0xF284AFX_IDP_SQL_ILLEGAL_MODE0xF285AFX_IDP_SQL_MULTIPLE_ROWS_AFFECTED0xF286AFX_IDP_SQL_NO_CURRENT_RECORD0xF287AFX_IDP_SQL_NO_ROWS_AFFECTED0xF288AFX_IDP_SQL_RECORDSET_READONLY0xF289AFX_IDP_SQL_SQL_NO_TOTAL0xF28AAFX_IDP_SQL_ODBC_LOAD_FAILED0xF28BAFX_IDP_SQL_DYNASET_NOT_SUPPORTED0xF28CAFX_IDP_SQL_SNAPSHOT_NOT_SUPPORTED0xF28DAFX_IDP_SQL_API_CONFORMANCE0xF28EAFX_IDP_SQL_SQL_CONFORMANCE0xF28FAFX_IDP_SQL_NO_DATA_FOUND0xF290AFX_IDP_SQL_ROW_UPDATE_NOT_SUPPORTED0xF291AFX_IDP_SQL_ODBC_V2_REQUIRED0xF292AFX_IDP_SQL_NO_POSITIONED_UPDATES0xF293AFX_IDP_SQL_LOCK_MODE_NOT_SUPPORTED0xF294AFX_IDP_SQL_DATA_TRUNCATED0xF295AFX_IDP_SQL_ROW_FETCH0xF296AFX_IDP_SQL_INCORRECT_ODBC0xF297AFX_IDP_SQL_UPDATE_DELETE_FAILED0xF298AFX_IDP_SQL_DYNAMIC_CURSOR_NOT_SUPPORTED0xF299AFX_IDP_SQL_FIELD_NOT_FOUND0xF29AAFX_IDP_SQL_BOOKMARKS_NOT_SUPPORTED0xF29BAFX_IDP_SQL_BOOKMARKS_NOT_ENABLED0xF29CAFX_IDS_DELETED0xF29DAFX_IDP_DAO_ENGINE_INITIALIZATION0xF2B0AFX_IDP_DAO_DFX_BIND0xF2B1AFX_IDP_DAO_OBJECT_NOT_OPEN0xF2B2AFX_IDP_DAO_ROWTOOSHORT0xF2B3AFX_IDP_DAO_BADBINDINFO0xF2B4AFX_IDP_DAO_COLUMNUNAVAILABLE0xF2B5AFX_IDS_HTTP_TITLE0xF2D1AFX_IDS_HTTP_NO_TEXT0xF2D2AFX_IDS_HTTP_BAD_REQUEST0xF2D3AFX_IDS_HTTP_AUTH_REQUIRED0xF2D4AFX_IDS_HTTP_FORBIDDEN0xF2D5AFX_IDS_HTTP_NOT_FOUND0xF2D6AFX_IDS_HTTP_SERVER_ERROR0xF2D7AFX_IDS_HTTP_NOT_IMPLEMENTED0xF2D8AFX_IDS_CHECKLISTBOX_UNCHECK0xF2E1AFX_IDS_CHECKLISTBOX_CHECK0xF2E2AFX_IDS_CHECKLISTBOX_MIXED0xF2E3AFX_IDS_PROPPAGE_UNKNOWN0xFE01AFX_IDS_COLOR_DESKTOP0xFE04AFX_IDS_COLOR_APPWORKSPACE0xFE05AFX_IDS_COLOR_WNDBACKGND0xFE06AFX_IDS_COLOR_WNDTEXT0xFE07AFX_IDS_COLOR_MENUBAR0xFE08AFX_IDS_COLOR_MENUTEXT0xFE09AFX_IDS_COLOR_ACTIVEBAR0xFE0AAFX_IDS_COLOR_INACTIVEBAR0xFE0BAFX_IDS_COLOR_ACTIVETEXT0xFE0CAFX_IDS_COLOR_INACTIVETEXT0xFE0DAFX_IDS_COLOR_ACTIVEBORDER0xFE0EAFX_IDS_COLOR_INACTIVEBORDER0xFE0FAFX_IDS_COLOR_WNDFRAME0xFE10AFX_IDS_COLOR_SCROLLBARS0xFE11AFX_IDS_COLOR_BTNFACE0xFE12AFX_IDS_COLOR_BTNSHADOW0xFE13AFX_IDS_COLOR_BTNTEXT0xFE14AFX_IDS_COLOR_BTNHIGHLIGHT0xFE15AFX_IDS_COLOR_DISABLEDTEXT0xFE16AFX_IDS_COLOR_HIGHLIGHT0xFE17AFX_IDS_COLOR_HIGHLIGHTTEXT0xFE18AFX_IDS_REGULAR0xFE19AFX_IDS_BOLD0xFE1AAFX_IDS_ITALIC0xFE1BAFX_IDS_BOLDITALIC0xFE1CAFX_IDS_SAMPLETEXT0xFE1DAFX_IDS_DISPLAYSTRING_FONT0xFE1EAFX_IDS_DISPLAYSTRING_COLOR0xFE1FAFX_IDS_DISPLAYSTRING_PICTURE0xFE20AFX_IDS_PICTUREFILTER0xFE21AFX_IDS_PICTYPE_UNKNOWN0xFE22AFX_IDS_PICTYPE_NONE0xFE23AFX_IDS_PICTYPE_BITMAP0xFE24AFX_IDS_PICTYPE_METAFILE0xFE25AFX_IDS_PICTYPE_ICON0xFE26AFX_IDS_COLOR_PPG0xFE28AFX_IDS_COLOR_PPG_CAPTION0xFE29AFX_IDS_FONT_PPG0xFE2AAFX_IDS_FONT_PPG_CAPTION0xFE2BAFX_IDS_PICTURE_PPG0xFE2CAFX_IDS_PICTURE_PPG_CAPTION0xFE2DAFX_IDS_PICTUREBROWSETITLE0xFE30AFX_IDS_BORDERSTYLE_00xFE31AFX_IDS_BORDERSTYLE_10xFE32AFX_IDS_VERB_EDIT0xFE40AFX_IDS_VERB_PROPERTIES0xFE41AFX_IDP_PICTURECANTOPEN0xFE83AFX_IDP_PICTURECANTLOAD0xFE84AFX_IDP_PICTURETOOLARGE0xFE85AFX_IDP_PICTUREREADFAILED0xFE86AFX_IDP_E_ILLEGALFUNCTIONCALL0xFEA0AFX_IDP_E_OVERFLOW0xFEA1AFX_IDP_E_OUTOFMEMORY0xFEA2AFX_IDP_E_DIVISIONBYZERO0xFEA3AFX_IDP_E_OUTOFSTRINGSPACE0xFEA4AFX_IDP_E_OUTOFSTACKSPACE0xFEA5AFX_IDP_E_BADFILENAMEORNUMBER0xFEA6AFX_IDP_E_FILENOTFOUND0xFEA7AFX_IDP_E_BADFILEMODE0xFEA8AFX_IDP_E_FILEALREADYOPEN0xFEA9AFX_IDP_E_DEVICEIOERROR0xFEAAAFX_IDP_E_FILEALREADYEXISTS0xFEABAFX_IDP_E_BADRECORDLENGTH0xFEACAFX_IDP_E_DISKFULL0xFEADAFX_IDP_E_BADRECORDNUMBER0xFEAEAFX_IDP_E_BADFILENAME0xFEAFAFX_IDP_E_TOOMANYFILES0xFEB0AFX_IDP_E_DEVICEUNAVAILABLE0xFEB1AFX_IDP_E_PERMISSIONDENIED0xFEB2AFX_IDP_E_DISKNOTREADY0xFEB3AFX_IDP_E_PATHFILEACCESSERROR0xFEB4AFX_IDP_E_PATHNOTFOUND0xFEB5AFX_IDP_E_INVALIDPATTERNSTRING0xFEB6AFX_IDP_E_INVALIDUSEOFNULL0xFEB7AFX_IDP_E_INVALIDFILEFORMAT0xFEB8AFX_IDP_E_INVALIDPROPERTYVALUE0xFEB9AFX_IDP_E_INVALIDPROPERTYARRAYINDEX0xFEBAAFX_IDP_E_SETNOTSUPPORTEDATRUNTIME0xFEBBAFX_IDP_E_SETNOTSUPPORTED0xFEBCAFX_IDP_E_NEEDPROPERTYARRAYINDEX0xFEBDAFX_IDP_E_SETNOTPERMITTED0xFEBEAFX_IDP_E_GETNOTSUPPORTEDATRUNTIME0xFEBFAFX_IDP_E_GETNOTSUPPORTED0xFEC0AFX_IDP_E_PROPERTYNOTFOUND0xFEC1AFX_IDP_E_INVALIDCLIPBOARDFORMAT0xFEC2AFX_IDP_E_INVALIDPICTURE0xFEC3AFX_IDP_E_PRINTERERROR0xFEC4AFX_IDP_E_CANTSAVEFILETOTEMP0xFEC5AFX_IDP_E_SEARCHTEXTNOTFOUND0xFEC6AFX_IDP_E_REPLACEMENTSTOOLONG0xFEC7IDC_STATIC-1  +  +  +4 ÿÿÿÿ ( @€ÿÿÿÀ@@pL'r]]±F€aC@ÁA @ @Ð@P?ÿþ ?ÿþ@P@Ð@ ÁA aC@±F€]]'rLp@@Àÿÿÿÿÿÿÿÿÿþ?ÿÿþ?ÿÿþ?ÿÿøÿÿàÿÿÀÿÿ‚ ÿÿ8þ>ü~?ø~?øþ?À€ÀÀÀ€øþ?ø~?ü~?ü>>þ5 +ÿÿ€30 ADJX>5 +ÿÿ€IRQ-FX¸>5 +ÿÿ€CAL / HWPò>- +ÿÿ€HOLDXFP +ÿÿ€T1XP +ÿÿ€T0X¸P3 +ÿÿ€INT/STNDXòP$ +ÿÿ€MASKXFb# +ÿÿ€TESTXb# + ÿÿ€24/12P¸b# + +ÿÿ€STOPPòb( + ÿÿ€RESETP >+ÿÿÿÿ‚Register 0xDP P)ÿÿÿÿ‚Register 0xEP b*ÿÿÿÿ‚Register 0xFP;- msctls_trackbar32Slider1Pj* msctls_trackbar32Slider2PJÿÿ‚1P3msctls_trackbar32Slider1P *msctls_trackbar32Slider2PË*msctls_trackbar32Slider2Pö*msctls_trackbar32Slider2Pÿÿ‚1Ptÿÿ‚1995Pÿÿÿÿ‚MonthPGÿÿÿÿ‚DayPuÿÿÿÿ‚YearP¬ÿÿÿÿ‚HourPÒÿÿÿÿ‚MinutePüÿÿÿÿ‚SecondP­ÿÿ‚0PÛÿÿ‚0Pÿÿ‚0ž ÿÿÿÿh0 ÄÈ‚é¹Rom InfoMS Sans SerifPU¤2ÿÿ€OKPÛ’ÿÿP‘Ûÿÿ‚¬ ÿÿÿÿi0 ÿÿÄÈ‚èµAPP - About DialogMS Sans SerifPZ 2ÿÿ€OK PÚ”ÿÿ ÿÿÿÿj0 ÿÿÄÈ‚@qAPP - Emulator SettingsMS Sans Serif€P[£ÿÿP0ÿÿ€&Browse...€ P[1!ÿÿ6P. %msctls_updown32Spin2e€ P[,1"ÿÿ6P*0 &msctls_updown32Spin3Š€ P[?1#ÿÿ6P(H 'msctls_updown32Spin4ŠP[Q{ $ÿÿ€Toggled Turbo ModeP×\.ÿÿ€&OKP \.ÿÿ€&CancelPL™ÿÿ‚Save Folder DirectoryP@šÿÿ‚Auto-Save S-RAMP&,-›ÿÿ‚Skip at mostP ?3œÿÿ‚Skip renderingP’¡ÿÿ‚seconds after last change (0 disables auto-save)P’,Šžÿÿ‚frames in auto-frame rate modeP’?\Ÿÿÿ‚frames in Turbo modeP[^d (ÿÿ€Pause When Inactive¢ ÿÿÿÿk0 ÿÿÄ +Ë’  ßOpen ROMMS Sans Serif·P¤À(SysTreeView32Tree1P«ïÀ,SysListView32List1PÐB9-ÿÿ…PUÐY@)ÿÿ…P¶Ð:=*ÿÿ…PöÐI,+ÿÿ…PEÍ,ÿÿ€&Open ROMPrÍ,ÿÿ€&CancelPUÄEÿÿÿÿÿÿ‚Interleave Mode:PÄ: ÿÿÿÿÿÿ‚Memory Type:PµÄ6ÿÿÿÿÿÿ‚Video System:PöÄ6ÿÿÿÿÿÿ‚Header:J ÿÿÿÿl0 D +ÌÛGraphics Pack ConfigurationMS Sans Serif€Pª .ÿÿPP ÿÿÿÿ‚Star OceanP­-/ÿÿ€Browse...€P1« 0ÿÿP$P ÿÿÿÿ‚Far East of Eden ZeroP­/-1ÿÿ€Browse...€PNª 2ÿÿPAr ÿÿÿÿ‚Momotaro Densetsu HappyP­L-3ÿÿ€Browse...€Pjª 4ÿÿP^P ÿÿÿÿ‚Super Power League 4P­i-5ÿÿ€Browse...€P‡ª 6ÿÿPz¦ ÿÿÿÿ‚Far East of Eden Zero - Shounen Jump no ShouP­†-7ÿÿ€Browse...€P¤ª 8ÿÿP—h ÿÿÿÿ‚Street Fighter Alpha 2 (US)P­¤-9ÿÿ€Browse...€PÁª :ÿÿP´P ÿÿÿÿ‚Street Fighter Alpha 2 (E)P­Á-;ÿÿ€Browse...€P᪠<ÿÿPÔP ÿÿÿÿ‚Street Fighter Zero 2P­á-=ÿÿ€Browse...P…ô(ÿÿ€OKP²ô(ÿÿ€CancelZ ÿÿÿÿn0 ÿÿÄÀ‚»¡Netplay OptionsMS Sans Serif P´ ÿÿ€Port SettingsP +U +£ÿÿ‚Socket Port Number‚Pd Kÿÿ P#´(¡ÿÿ€Client SettingsP +-U +¤ÿÿ‚Ask Server to Pause when‚Pd- Cÿÿ¶Px- + Emsctls_updown32Spin1P‡-- ¥ÿÿ‚frames behindP +<U +¦ÿÿ‚Maximum Frame Rate Skip‚Pd< Dÿÿ¶Px< + Imsctls_updown32Spin2 PP´<¢ÿÿ€Server Settings P +i­Gÿÿ€Send ROM Image to Client on Connect P +x®Hÿÿ€Act as ServerPP‘2ÿÿ€OKP‡‘2ÿÿ€CancelP +Z®Fÿÿ€Sync By Resetö ÿÿÿÿ{0 ÿÿÄÀ‚QÍDisplay SettingsMS Sans SerifP³2ÿÿ€OKP<³2ÿÿ€CancelP"Œ'Lÿÿ€Test ModeP" 'Oÿÿ€Set ModeP¹‘xNSysListView32List1 PXAÿÿÿÿÿÿ€GeneralP9I +Tÿÿ€Show Frame RateP< +Uÿÿ€Stretch ImageP3 +Vÿÿ€Full ScreenPd-E +Wÿÿ€Bi-Linear Mode 7 P_KAÿÿÿÿÿÿ€SNES ImagePd; +Xÿÿ€Render 16-bitPd; +Yÿÿ€TransparencyPd#% +Zÿÿ€Hi Res PMªÿÿÿÿÿÿ€Output Image Processing!PW Z\ÿÿ…Prb +]ÿÿ€Automatic Frame SkippingX|Y +^ÿÿ€Use Frame Rate Limiter P†ª(ÿÿÿÿÿÿ€Fixed Frame Skipping RateP™ `msctls_trackbar32Slider2 P´›ªÿÿÿÿÿÿ€Display SettingsP¹Œ] +bÿÿ€Enable Double BufferingP¹›^cÿÿ‚Current Mode: 1024x1024x16P‘ ÿÿÿÿÿÿ‚0P”‘ ÿÿÿÿÿÿ‚9Pd8= +®ÿÿ€Extend HeightP$K +dÿÿ€Use Video MemoryP/Q +¯ÿÿ€Maintain Aspect Ratio\ ÿÿÿÿo0 ÿÿÄ +Ê’ÚCheat Entry and EditorMS Sans Serif €PÈ}kSysListView32List1X×(jÿÿ€&AddX×(dÿÿ€&DeleteX×-(eÿÿ€&UpdateP×A(fÿÿ€C&learˆPV†v[ÿÿ€PUšwgÿÿˆPU¯,hÿÿˆPׯiÿÿP]Ä2ÿÿ€&OKP—Ä2ÿÿ€&CancelP†;§ÿÿ‚Enter Cheat Code:Pš=¨ÿÿ‚Cheat DescriptionP¯@©ÿÿ‚Cheat Address (hex)P†¯Jªÿÿ‚New Value (dec or hex)¸ ÿÿÿÿ|0 ÀÈ€º=DialogMS Sans SerifP ÿÿÿÿ‚Static€P dmsctls_progress32Progress1Z ÿÿÿÿ}0 ÿÿÄÀ‚(,Input ConfigMS Sans Serif!PM<eÿÿ…PO* +fÿÿ€EnabledPG BInputCustomWOG!P#G HInputCustomP0G FInputCustomP=G RInputCustomPJG OInputCustomPWG PInputCustomPdG NInputCustomPqG QInputCustomPŽG KInputCustom PŽ#G JInputCustom PŽ0G LInputCustom PŽ=G MInputCustom XŽJG IInputCustom XŽWG CInputCustom XŽdG EInputCustom XŽqG GInputCustom PØo'ÿÿ€CancelPo(ÿÿ€OKPŽpÿÿ‚Blue means the button is already mapped; +Red means it's used by windows or Snes9xP‰ÿÿ‚UPP@Œÿÿ‚DILDOP&Šÿÿ‚LEFTP3‹ÿÿ‚DOWNPYŽÿÿ‚APtÿÿ‚XPMÿÿ‚BPgÿÿ‚YPs2“ÿÿ‚LPs‘ÿÿ‚STARTPs?”ÿÿ‚RPo%’ÿÿ‚SELECTPmM•ÿÿ‚UP LEFTPgg$—ÿÿ‚DN RIGHTPgZ$–ÿÿ‚UP RIGHTPlt˜ÿÿ‚DN LEFTPØPJÿÿÿÿÿÿ‚ÿÿ…PØcT +gÿÿ€Allow Left+Rt/Up+DnPO : +hÿÿ€Toggle ModeH ÿÿÿÿ0 ÿÿÄ +ÈCheat SearchMS Sans SerifP¡ú2ÿÿ€&OKPØú2ÿÿ€&Cancel PɘmSysListView32List1PÖ4nÿÿ€&SearchXÖ4oÿÿ€&Add CheatPÖ34pÿÿ€&Reset PÓ¬* qÿÿ€1 byte PÓ¹* rÿÿ€2 bytes PÓÆ* sÿÿ€3 bytes PÓÓ* tÿÿ€4 bytes PÌ¢6Bÿÿÿÿÿÿ€Data Size P¢rNÿÿÿÿÿÿ€Comparison Type P ªZ uÿÿ€< (Less Than) P µZ vÿÿ€> (Greater Than) P Àj wÿÿ€<= (Less Than or Equal to) P Ëi xÿÿ€>= (Greater than or Equal To) P ÖZ yÿÿ€= (Equal To) P áZ zÿÿ€!= (Not Equal To) P}ÅK+ÿÿÿÿÿÿ€Data Type P}¢K ÿÿÿÿÿÿ€Compare To P«C +{ÿÿ€Previous Value P¶C +|ÿÿ€Entered Value PÏC +}ÿÿ€Unsigned (>=0) PÙC +~ÿÿ€Signed (+/-) PãC +ÿÿ€HexadecimalˆXHúS BÿÿXú6 €ÿÿ‚Enter a Value:¦ ÿÿÿÿ‚0 ÀÈ€DDialogMS Sans SerifPÝ42ÿÿ€OKP©42ÿÿ€Cancel!P¼ ƒÿÿ… ÿÿÿÿƒ0 Ä +Ê’ »Cheat DetailsMS Sans SerifPU{- ÿÿ€&OKP‡{- ÿÿ€&Cancel€POe „ÿÿ€POe …ÿÿ€PO7e †ÿÿ€POOe ‡ÿÿ€POge ˆÿÿPF ÿÿÿÿ‚AddressPF ÿÿÿÿ‚Current ValueP7F ÿÿÿÿ‚Previous ValuePOF ÿÿÿÿ‚New ValuePgF ÿÿÿÿ‚Descriptionˆ ÿÿÿÿ†0 ÿÿÀÈ€#/ßPlay MovieMS Sans SerifP»È2ÿÿ€OKPöÈ2ÿÿ€Cancel€Pæ ¸ÿÿP!ÿÿÿÿÿÿ‚Movie FilePø0¹ÿÿ€&Browse...P75ÿÿÿÿÿÿ‚Recording Date:P+@ÿÿÿÿÿÿ‚Length:P+Iÿÿÿÿÿÿ‚Frames:P R7ÿÿÿÿÿÿ‚Re-record Count:PG7Qºÿÿ‚DATEPG@Q»ÿÿ‚LENGTHPGIQ¼ÿÿ‚FRAMESPGRQ½ÿÿ‚RERECORDPc&ÿÿÿÿÿÿ‚Author Info:P¬E +Âÿÿ€Open Read-Only‚PFcâBÿÿ‚StaticP…M=ÿÿÿÿÿÿ€Record Options X ©F +±ÿÿ€Record from now X šH +²ÿÿ€Record from resetXbŽ- +³ÿÿ€Joypad 1Xb¢- +µÿÿ€Joypad 3Xb˜- +´ÿÿ€Joypad 2Xb¬- +¶ÿÿ€Joypad 4Xb·- +·ÿÿ€Joypad 5PY…E=ÿÿÿÿÿÿ€Record ControllersP¬ŽG +ûÿÿ€Use WIP1 TimingP¬¢{ +òÿÿ€Volume Envelope Height ReadingP¬­r +úÿÿ€Fake Mute desync workaroundP£……=ÿÿÿÿÿÿ€Emulator Sync SettingsP¬—v gÿÿ€Allow Left+Right / Up+DownP +ɤÿÿÿÿÿÿ‚Press OK to start playing the movie. +Don't forget to let the game run for 10 seconds first!P¬·u +ñÿÿ€Sync samples with sound CPUP©|q¿ÿÿ‚ P# Àÿÿ‚Movie's ROM: CRC32=Unknown, Name=UnknownP + Áÿÿ‚Current ROM: CRC32=Unknown, Name=Unknown  ÿÿÿÿ‡0 ÿÿÀÈ€/–Record MovieMS Sans SerifP»2ÿÿ€OKPö2ÿÿ€Cancel€Pæ ¸ÿÿP!ÿÿÿÿ‚Movie FilePø0¹ÿÿ€&Browse...P&M=ÿÿÿÿ€Record Options P AF +±ÿÿ€Record from now P 4H +²ÿÿ€Record from resetPb/- +³ÿÿ€Joypad 1PbC- +µÿÿ€Joypad 3Pb9- +´ÿÿ€Joypad 2PbM- +¶ÿÿ€Joypad 4PbW- +·ÿÿ€Joypad 5PY&E=ÿÿÿÿ€Record Controllers€PCiåBÿÿPl+ÿÿÿÿ‚Author Info:P¬/G +ûÿÿ€Use WIP1 TimingP¬C{ +òÿÿ€Volume Envelope Height ReadingP£&…=ÿÿÿÿ€Emulator Sync SettingsP¬9v +gÿÿ€Allow Left+Right / Up+DownP¬Mr +úÿÿ€Fake Mute desync workaroundP¬Wu +ñÿÿ€Sync samples with sound CPUP SF +óÿÿ€Clear SRAMj ÿÿÿÿˆ0 ÿÿÄÀ‚L_»Customize Special KeysMS Sans SerifFXP§'ÿÿ€CancelP0§(ÿÿ€OKP &‰ÿÿ‚speed +CP 01Œÿÿ‚frame advanceNGP8Šÿÿ‚speed -FEP#(‹ÿÿ‚pausePJ<ÿÿ‚skip +PŠ>“ÿÿ‚movie frame countTYPc>‘ÿÿ‚superscope turboP—;”ÿÿ‚movie read-onlyR_Pp<’ÿÿ‚superscope pausePV;Žÿÿ‚skip -PCb ´InputCustomHotEBPCb ¯InputCustomHotDSPC b °InputCustomHotDSPC-b ±InputCustomHotPCGb ²InputCustomHot0PCTb ³InputCustomHotEGPCab µInputCustomHotIDPCnb ¶InputCustomHotPCˆb ·InputCustomHotSPPC•b ÂInputCustomHotIDPÄ< ¸InputCustomHotAP­ÿÿ‚save1_EPÄ< ¹InputCustomHotBP­#žÿÿ‚save2_IPÄ < ºInputCustomHotP­0Ÿÿÿ‚save3TOPÄ-< »InputCustomHotAP­< ÿÿ‚save4P_PÄ:< ¼InputCustomHotEBP­I¡ÿÿ‚save5IDPÄG< ½InputCustomHotULP­V¢ÿÿ‚save6FEPÄT< ¾InputCustomHotNVP­d£ÿÿ‚save7_SPÄa< ¿InputCustomHotDP­q¤ÿÿ‚save80PÄn< ÀInputCustomHotNOP­~¥ÿÿ‚save9TNPÄ{< ÁInputCustomHotAP­ ¦ÿÿ‚save0AFP< ÃInputCustomHotFEP§ÿÿ‚load1P< ÄInputCustomHotENP#¨ÿÿ‚load2P < ÅInputCustomHotEPP1©ÿÿ‚load3P-< ÆInputCustomHotRTP=ªÿÿ‚load4"P:< ÇInputCustomHotPI«ÿÿ‚load5YPG< ÈInputCustomHotPPV¬ÿÿ‚load61PT< ÉInputCustomHotPd­ÿÿ‚load71Pa< ÊInputCustomHot_CPp®ÿÿ‚load8Pn< ËInputCustomHotIP}Íÿÿ‚load9P{< ÌInputCustomHotENP Îÿÿ‚load0D_P =1ÿÿ‚fast forwardPC:b ÏInputCustomHot12P}=•ÿÿ‚show pressed keysVEPC{b ÐInputCustomHot12P¤;–ÿÿ‚save screenshotT_PC¢b ÑInputCustomHotARP­ŠÒÿÿ‚slot-OVPĈ< ÓInputCustomHotPŠÔÿÿ‚slot+IDPˆ< ÕInputCustomHotX_Pª—Öÿÿ‚save#GEPÄ•< ×InputCustomHotAP—Øÿÿ‚load#P•< ÙInputCustomHotr ÿÿÿÿm0 ÄÀ‚ã=Connect to ServerMS Sans SerifPx-2ÿÿ€&OKP¯-2ÿÿ€CanccelP2«ÿÿ‚Server AddressP¯2@ÿÿ€Clear HistoryP2£ÿÿ‚Port Number€P<?ÿÿ!P<n(>ÿÿ…£ ÿÿðÿÿf0 éSnes9x DirectSoundéFMOD DirectSoundéFMOD Windows Multimediaé FMOD A3Dê10 msê20 msê40 msê80 msê160 msê320 msê640 msë ë8 KHzë11 KHzë16 KHzë22 KHzë30 KHzë35 KHzë44 KHzë48 KHzì10 msì20 msì30 msì40 msì50 msì60 msì70 msì80 msì90 msì100 msì110 msì120 msì130 msì140 msì150 msùSkip method #1ùSkip method #2ùSkip method #3ùSkip method #4ùSkip method #5\ ÿÿðÿÿ}0 e +Joypad #1e +Joypad #2e +Joypad #3e +Joypad #4e +Joypad #5èDDESIGNINFOGUIDELINES0 ÿÿÿÿf X0ÿÿÿÿe ˆ0ÿÿÿÿh ¸0ÿÿÿÿi è0ÿÿÿÿj $ÿÿÿÿk <0ÿÿÿÿl l0ÿÿÿÿ{ œ0ÿÿÿÿo Ì0ÿÿÿÿ| ü0ÿÿÿÿ} ,<ÿÿÿÿ h0ÿÿÿÿ‚ ˜0ÿÿÿÿƒ È0ÿÿÿÿ† ølÿÿÿÿ‡ dTÿÿÿÿˆ ¸0EGYÂEG²UEGâ²EGá®EG9jEGšÝEGÔýEGJÆEGÿÓEG³6G+AMA\€zEG +EG=EG´ˆEG(Û7x…¿EG(&cG\AHA\µè ÿÿÿÿ ( @€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÁÿß^Ý€__}ÿ__±ÿ__·ÿ_C·ÿ_]¯ÿ_A§ÿ_»ÿ^ýà@ÿÿÏÿÿÿßÿÿÿßÿÿÿßÿÿÿßÿÿÿÎ?ÿÿáÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¨ ÿÿÿÿ ( @€€€€€€€€€ÀÀÀÀÜÀðʦ """)))UUUMMMBBB999€|ÿPPÿ“ÖÿìÌÆÖïÖçç©­3f™Ì3333f3™3Ì3ÿff3fff™fÌfÿ™™3™f™™™Ì™ÿÌÌ3ÌfÌ™ÌÌÌÿÿfÿ™ÿÌ3333f3™3Ì3ÿ3333333f33™33Ì33ÿ3f3f33ff3f™3fÌ3fÿ3™3™33™f3™™3™Ì3™ÿ3Ì3Ì33Ìf3Ì™3ÌÌ3Ìÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf3f33f3ff3™f3Ìf3ÿffff3fffff™ffÌf™f™3f™ff™™f™Ìf™ÿfÌfÌ3fÌ™fÌÌfÌÿfÿfÿ3fÿ™fÿÌÌÿÿÌ™™™3™™™™Ì™™33™f™3Ì™ÿ™f™f3™3f™f™™fÌ™3ÿ™™3™™f™™™™™Ì™™ÿ™Ì™Ì3fÌf™Ì™™ÌÌ™Ìÿ™ÿ™ÿ3™Ìf™ÿ™™ÿÌ™ÿÿÌ™3ÌfÌ™ÌÌ™3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌfÌf3™ffÌf™ÌfÌ™fÿ̙̙3Ì™fÌ™™Ì™ÌÌ™ÿÌÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÿÌÿ3™ÿfÌÿ™ÌÿÌÌÿÿÌ3ÿfÿ™Ì3ÿ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿfÿf3Ìffÿf™ÿfÌÌfÿÿ™ÿ™3ÿ™fÿ™™ÿ™Ìÿ™ÿÿÌÿÌ3ÿÌfÿÌ™ÿÌÌÿÌÿÿÿ3Ìÿfÿÿ™ÿÿÌffÿfÿffÿÿÿffÿfÿÿÿf!¥___www†††–––ËË˲²²×××ÝÝÝãããêêêñññøøøðûÿ¤  €€€ÿÿÿÿÿÿÿÿÿÿÿÿ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +µ¼ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +µÏ¼ + + + +µ¼ + + + + + + + + + + + + + + + + + + + + + + + +µÏ¼ + + +µµ¼ + + + + + + + + + + + + + + + + + + + + + + + +ϵ¼ + +µ¼ + + + + + + + + + + + + + + + + + + + + + + + + + +µ¼ + +µ¼ + + + + + + + + + + + + + + + + + + +øøøøøø + + + + + + + + + + + + +øøøø + + +µ¼ + + +øøøððððøøøøøøøøøøøøøððððøø +µ¼ + +øøððððððððððððððððððððððððø + + + + +øðððð¼¼ððððððððððððððð¼¼ðððø + + + +øðð¼øø¼ðððøððøðððððŒŒ¼¼ðøø + + +øð¼¼¼øø¼¼ððððøðÿøð𼌌¼ŒŒ¼ðø + + +øð¼øøøøøøððððððÿððð¼¼¼ŒŒ¼ðø + + +øð¼øøøøøøððððÿðððð𼶶¼¼¼¼ðø + + +øÿ¼¼øø¼ðð¼¼ð¼ð𼶶¼¶¶¼¼ðø + + +øÿð¼øø¼¼ðð¼¼¼¼ðð¼¼¼¶¶¼ððø + + +øÿÿð¼¼¼ððððððððððÿðð¼¼ðððø + + + +øÿÿÿððððððððððððððððððððððø + + + + + +øøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼øø + + + + +µϵøøøøøøøøøøøøøøøøøøøøø + +µ¼ + + +µϵ +µ + + + + + + +µµµ¼ + + +ϼ + + + +¼µµ¼¼ + + + + + + +ϼ + + + +ϼ + + + +µµ¼µÏϼ + + + + + +µÏµ¼ + + + +µ¼ + + + + +ϼ +µϼ + + + + +µÏµ¼ + + +ϼ + + + + +µµ¼ +µÏ + + + + +µµµ¼ + + +µ¼ + + + + +ϵ¼µµ¼ + + + +µϼ +Ïϼ + +ϼ + + + + + +µϵÏϼ + + + + +µµ¼ +µÏµ¼ +µ¼ + + + + + +µµÏϼ + + + + + +Ïϼ + + +µµÏ¼ + + + + + + + +µÏ¼ + + + + + + + + + + + + + + + +µÏ + + + + + + + + + + + + + + + + + + + + + + + + + + + +µµ¼ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +ÿÿÿÿÿÿÿÿùÿÿÿøóÿÿüqÿÿþ1ÿÿøü?à À€€€€€€€€€Àà€3€‡ðsÀðóÀàóâÀsáÀqð‚3ð‚øÇüÿƒÿÿÿÇÿÿÿÿ" ÿÿÿÿe0  è ¨( ÿÿÿÿo0 (ÿÿÿ¸³³ÿýý¸´³åâᾺ¸¹µ³¸µ³¸¶³ÛñðÛðï76ED-trXÒÐgÝÜ~ôó}Ì˳øö³÷ö£ÙØ ]] YY‚ƒ‚‚FÌÌWÈÈU¿¿bÎÎa¸¸iÇÇtÐÐŒ÷÷”ÿÿ•ÿÿ˜ÿÿyËË™þÿ™ÿÿ›ÿÿ|ÉÉžÿÿ¡ÿÿ¢ÿÿ†ÐÐ¥ÿÿŠÒÒˆÏÏ‹ÏЭÿÿ®ÿÿ¨öö¯ÿÿ‘ÓÓ¥íí•ÑÑ®óó²÷÷˜ÒÒ´öö½ûû­ÞÞ¸ááÈèèÛððßóóéööéõõèóóøûûMOKMcf€ƒTU#mpWÊÍaÊÎbÊÎbËÎxÏÑ~ØÛ•ýÿ˜üÿ™üÿüÿžýÿ¡üÿ¤üÿˆÏÑžÓÕ½öø OS~ƒbÈÎúÿ•ùÿ™ùÿ™úÿ™ûÿžùÿžúÿ¡úÿ¡ûÿÂňÍÑ®ûÿ³óöw€|ƒaÇÎbÅÎbÇÎbÄÍP—œ•öÿ•÷ÿ™øÿšøÿ¡øÿ¨øÿ³ñö}‰yƒzƒ•õÿ—ôÿ˜ôÿ™õÿ™öÿœõÿ®øÿ¯÷ÿ¯¹ºvƒlÀÌ•óÿ™òÿ™óÿœòÿ³îösƒ_µÃ™ðÿ™ñÿ²ôÿlÇØ•îÿ™íÿ™ïÿŸðÿ¡ïÿ¡ðÿF”§•êÿ™ëÿ™ìÿšëÿ¡ìÿ³éö™êÿ›éÿœéÿ„Üø™æÿ£êÿˆÓî™äÿ™åÿ”ßÿ™Üÿ™Þÿ Þÿ¡Üÿ¥ÕÿÿÿÿÌ™3Ì™fÌ™™Ì™ÌÌ™ÿÌÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÿÌÿ3™ÿfÌÿ™ÌÿÌÌÿÿÌ3ÿfÿ™Ì3ÿ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿfÿf3Ìffÿf™ÿfÌÌfÿÿ™ÿ™3ÿ™fÿ™™ÿ™Ìÿ™ÿÿÌÿÌ3ÿÌfÿÌ™ÿÌÌÿÌÿÿÿ3Ìÿfÿÿ™ÿÿÌffÿfÿffÿÿÿffÿfÿÿÿf!¥___www†††–––ËË˲²²×××ÝÝÝãããêêêñññøøøðûÿ¤  €€€ÿÿÿÿÿÿÿÿÿÿÿÿò]oSììììììììììììFìû¼û¼û¼û¼ûìBìû¼û¼û¼û¼û¼ì/ì¼û¼û¼û¼û¼ììì¼û¼û¼û¼û¼ûìììì¼ììììììììììììììûìAì¼û¼û¼û¼û¼û¼ììû¼û¼û¼ìì¼û¼û¼ììììììˆFììDDDDDFììììì@( ÿÿÿÿp0 (ÿÿÿàäã¸Å¸Ä¸¿¾±¹¸·¿¾¸ÃÂÛðïI ŸvËÉ€ËɉÓÒ‹ÔÓ¬éè#‡‡-PÏÏOÎÎUÒÒ2stIžŸY¾¾aÊÊU«¬‹úú–ÿÿvÈÉvÉÉ—ÿÿ˜ÿÿ™þÿ™ÿÿƒØÙzÊÊšþþ¡ÿÿŸüü£ÿÿ€ÄʼnÑÒ¯ÿÿ°ÿÿ¸þÿºÿÿ¯çç°çç´èè¬ÝÝ»îî¿â☮®Ûððßóóãç穬¬6€ƒ6ƒIœŸMž J…†—ýÿ2~‚6ƒIšŸtǢùÿ™úÿ‰ÏÒ¨úÿ°ûÿ5„H™ŸI™ŸP—œ˜÷ÿ™÷ÿ™øÿ øÿ¤ùÿ¨øÿ©ùÿ°ùÿI—Ÿ˜õÿ™ôÿ™õÿ™öÿžöÿ õÿ¨÷ÿ©öÿ—òÿ™òÿ™óÿôÿ óÿ¨ôÿ—ñÿ˜ðÿ™ðÿ™ñÿðÿ™íÿ™îÿ™ïÿšíÿšîÿîÿ îÿ ðÿ¨ñÿ™ëÿ™ìÿìÿ ìÿ˜èÿ™êÿ™æÿ™çÿ™åÿåÿ æÿ™ãÿšâÿâÿ¤æÿ™ßÿ™àÿšßÿšáÿ áÿ™Üÿ™ÚÿÝÿšÖÿ¡×ÿÿÿÿ™f3™3f™f™™fÌ™3ÿ™™3™™f™™™™™Ì™™ÿ™Ì™Ì3fÌf™Ì™™ÌÌ™Ìÿ™ÿ™ÿ3™Ìf™ÿ™™ÿÌ™ÿÿÌ™3ÌfÌ™ÌÌ™3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌfÌf3™ffÌf™ÌfÌ™fÿ̙̙3Ì™fÌ™™Ì™ÌÌ™ÿÌÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÿÌÿ3™ÿfÌÿ™ÌÿÌÌÿÿÌ3ÿfÿ™Ì3ÿ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿfÿf3Ìffÿf™ÿfÌÌfÿÿ™ÿ™3ÿ™fÿ™™ÿ™Ìÿ™ÿÿÌÿÌ3ÿÌfÿÌ™ÿÌÌÿÌÿÿÿ3Ìÿfÿÿ™ÿÿÌffÿfÿffÿÿÿffÿfÿÿÿf!¥___www†††–––ËË˲²²×××ÝÝÝãããêêêñññøøøðûÿ¤  €€€ÿÿÿÿÿÿÿÿÿÿÿÿòò=ììììììììììììììHìû¼û¼û¼û¼û¼ûìHì¼û¼û¼û¼û¼û¼ì:ìû¼û¼û¼û¼û¼ûì:ì¼û¼û¼û¼û¼û¼ì:ìû¼û¼û¼û¼û¼ûì:ì¼û¼û¼û¼û¼û¼ì:ìû¼û¼û¼û¼û¼ûìHìììû¼û¼û¼ûìììììì(1ìû¼û¼ûì46666 63ììììì8( ÿÿÿÿq0 (ÿÿÿ±°µpnvrpvçå뼺¿ÕÓØõòøÒÑÓüúýsdsE@Ec^cÑËÑÈÆÈÚÙÚÅÄŲ±²G=F¿¹¾ÜØÛŸœéâä–Žº±±ÍÇǪ¦¦¨¤¤|yy»··¿¼¼º··®««¤¡¡mkk?>>ÆÃã¡¡¡ŸŸ–””BAA»¹¹³±±¯­­|{{rqqnmmfeeXWWÂÁÁ´³³²±±®­­ª©©£¢¢¢¡¡œ››—––€€ynk·¶µ¾‘9½–:Â<¶¦DojFϾ'ž‘·&“‘mÑÍH²±zÊÊ5wwoÎÎÍ™ž]ÇÙBÈÜI¦³S˜¢rx†K»á^Õñ•¨ÀsèÿÕÀ^¹Å«¨¹–ÛÝÙÑü°•´€äóÚÙöÇÒæÆ—Ð}Ÿ{\¢Z„¦ƒa×a‘º‘ÙàÙîðîxyx_`_šú«¿ÂÀžûÍ\a_“íˉŒ‹¿ÿë–ÿìœÿï¡ìâ‚òï–íë`ÃÃdÁÁyÅÅžôõ¸¸›··®ÁÁV__¶ÇljÀÇÇÁÇǾ¿¿­®®ŒgÓ×zæép¾Ác—˜”Þâ·ÇÈ­¸¹w~kœ¤ÇÌÍbefÆÉÊ‹‹“ÐÐØììîääåÜÜÝ’’“ŠŠ‹üüüùùùøøøöööõõõîîîìììèèèåååßßßÜÜÜÛÛÛÚÚÚÖÖÖÕÕÕÔÔÔÓÓÓÎÎÎÊÊÊÇÇÇÅÅÅÃÃý½½¼¼¼ººº¹¹¹¸¸¸···µµµ±±±°°°¯¯¯¨¨¨¢¢¢›››–––“““’’’ŒŒŒ‹‹‹}}}zzzlllXXXLLLCCCAAA@@@???===ÿÿÿÿ3ÿÿfÿf3Ìffÿf™ÿfÌÌfÿÿ™ÿ™3ÿ™fÿ™™ÿ™Ìÿ™ÿÿÌÿÌ3ÿÌfÿÌ™ÿÌÌÿÌÿÿÿ3Ìÿfÿÿ™ÿÿÌffÿfÿffÿÿÿffÿfÿÿÿf!¥___www†††–––ËË˲²²×××ÝÝÝãããêêêñññøøøðûÿ¤  €€€ÿÿÿÿÿÿÿÿÿÿÿÿ¦ÆÆÊÊÊÆÆÆÆÊů——-3—.ììììììììììììì—ì—úÊ——ÊÊÊ.¾—ì—ÊÊÊÊììî{XÊʾ—ì—.73î{XEE¾¡ì———.773¦{V@â3ʼ—ìììì7377ìA¡“—Ê-——.“›“3ìì3›îÊ——.33îì›ìîîîÊ——¡.¼7LRìì73îîÊ———Wì@HVRì3¦3ʯ———¡.VVAV{3¡3Ê—————¡.AVXu3Ê——————¡..Xu..————————...¯›———( ÿÿÿÿr0 (ÿÿÿ¥ ¥‹ÌÊÌÒÑÒ¡ ¡ŸžŸ³®±RHHkddZUU’ŽŽäßßÙÔÔ‘ŽŽˆ††…ƒƒƒµ³³âááÊÉÉÉÈÈÇÆÆ‹ŠŠˆ‡‡ZTS±°¯ÑÒЦšÏÓÎÆÞŸŒŒ‹Œ‹„¦†£§¤¶¼»(kic¬¬¹ØØßàà¿ÀÀŽŒeˆ‰ÉÔŠ–—BX’’•þþþüüüùùùøøø÷÷÷öööõõõôôôòòòïïïîîîéééèèèçççæææåååãããáááàààßßßÞÞÞÝÝÝÚÚÚÖÖÖÕÕÕÔÔÔÓÓÓÑÑÑÍÍÍËËËÊÊÊÉÉÉÈÈÈÆÆÆÃÃÿ¿¿¾¾¾½½½´´´³³³¤¤¤žžž‘‘‘ŽŽŽŒŒŒ‹‹‹ŠŠŠ‰‰‰vvvgggeeecccaaa```KKKJJJGGGBBBÿÿÿf™3f™ff™™f™Ìf™ÿfÌfÌ3fÌ™fÌÌfÌÿfÿfÿ3fÿ™fÿÌÌÿÿÌ™™™3™™™™Ì™™33™f™3Ì™ÿ™f™f3™3f™f™™fÌ™3ÿ™™3™™f™™™™™Ì™™ÿ™Ì™Ì3fÌf™Ì™™ÌÌ™Ìÿ™ÿ™ÿ3™Ìf™ÿ™™ÿÌ™ÿÿÌ™3ÌfÌ™ÌÌ™3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌfÌf3™ffÌf™ÌfÌ™fÿ̙̙3Ì™fÌ™™Ì™ÌÌ™ÿÌÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÿÌÿ3™ÿfÌÿ™ÌÿÌÌÿÿÌ3ÿfÿ™Ì3ÿ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿfÿf3Ìffÿf™ÿfÌÌfÿÿ™ÿ™3ÿ™fÿ™™ÿ™Ìÿ™ÿÿÌÿÌ3ÿÌfÿÌ™ÿÌÌÿÌÿÿÿ3Ìÿfÿÿ™ÿÿÌffÿfÿffÿÿÿffÿfÿÿÿf!¥___www†††–––ËË˲²²×××ÝÝÝãããêêêñññøøøðûÿ¤  €€€ÿÿÿÿÿÿÿÿÿÿÿÿ4444444444444444444444444444û4'UUUUUU'''UUUUUU=Zfhh +'Uhhhh^¼4=BHH )HHHLB=444L4444444444U4LffffffffffUfLL¼¼¼¼¼¼UUUUfLLL¼¼¼¼¼¼ú!Uf444444444444f4fLLUUUZZZZZZZf44444444444444444444444444444444444( ÿÿÿÿs0 (ÿÿÿœ˜ž˜˜•Ž•ÂÁ›š›ÛÕÚ°¢­ šž“’§¥¥RQQPOOÂÀÀÀ¾¾¿½½ÛÚÚËÊÊÁÀÀ±°°¯®®¥¤¤£¢¢Ÿžž’‘‘¡ ŸTªP­â­¿è¿‘“#ÁÂÂÀÁÁ¿ÀÀ—˜˜¿¿ÀýýýõõõèèèæææäääãããâââáááàààÞÞÞÝÝÝÜÜÜÛÛÛØØØÖÖÖÔÔÔÓÓÓÒÒÒÑÑÑÏÏÏÎÎÎÊÊÊÆÆÆÂÂÂÁÁÁÀÀÀ¿¿¿½½½¸¸¸···¯¯¯®®®«««ªªª§§§¥¥¥“““ŽŽŽ‹‹‹‰‰‰yyyggg^^^XXXVVVRRR===777666ÿÿÿ3ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf3f33f3ff3™f3Ìf3ÿffff3fffff™ffÌf™f™3f™ff™™f™Ìf™ÿfÌfÌ3fÌ™fÌÌfÌÿfÿfÿ3fÿ™fÿÌÌÿÿÌ™™™3™™™™Ì™™33™f™3Ì™ÿ™f™f3™3f™f™™fÌ™3ÿ™™3™™f™™™™™Ì™™ÿ™Ì™Ì3fÌf™Ì™™ÌÌ™Ìÿ™ÿ™ÿ3™Ìf™ÿ™™ÿÌ™ÿÿÌ™3ÌfÌ™ÌÌ™3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌfÌf3™ffÌf™ÌfÌ™fÿ̙̙3Ì™fÌ™™Ì™ÌÌ™ÿÌÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÿÌÿ3™ÿfÌÿ™ÌÿÌÌÿÿÌ3ÿfÿ™Ì3ÿ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿfÿf3Ìffÿf™ÿfÌÌfÿÿ™ÿ™3ÿ™fÿ™™ÿ™Ìÿ™ÿÿÌÿÌ3ÿÌfÿÌ™ÿÌÌÿÌÿÿÿ3Ìÿfÿÿ™ÿÿÌffÿfÿffÿÿÿffÿfÿÿÿf!¥___www†††–––ËË˲²²×××ÝÝÝãããêêêñññøøøðûÿ¤  €€€ÿÿÿÿÿÿÿÿÿÿÿÿ&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&ìììììììììììììì&ì<&&&&&&&&&&<ììì<ìììììììììì<ììì<<<<<<<<<<<<ììì<<<<<<<<<< <ììì&&&&&&&&&&&&ìì5ì<<<<<<<<<<<<ì&<ìììììììììììììS&&5555555555555ó&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&h< ÿÿÿÿ…0 (xx@8•“ó®ù²¬ã‘„»|o ´™ë§…Þ‹s²pYŽ pÎ8*CP:`š^ÂdA|‹\«B.OƒLŸw>±¿[,n•A³»iÙt/‰ˆ7 Ø‹ðh(z‡&Sabp!‘´LÈ!'+ƒ–v†ÊXß„“mz~ŽELÜ`íèfú€Œ€Œ~‹|‰{‡z†x„‹{ˆ|ˆ{‡Œ}Š}‰…’„†“Ž‰–‡”…’ƒQYˆ •‹ +˜‰ +–Š — +Œ| +‰‹ ˜x …š œ’Ÿ•£ðjþ‚ŒŠ‰|‡{†z…yƒpyjs‡„ƒŽwt~Ya‚z…cl„ƒŽ„Œ|††’†‘…‘ˆ”Š •.1-/ñdþDG79îeöõkþ34ûlÿúýúüøµú&&88ÿiÿýoÿþtÿþçþ±°±¯®¯®­®<;54.-@>?=97 ­«ªŸÄÛ›ÀÖÂØ™»Ó¢ÆÞ˜ºÑ–·Î›½Ô²×ñÇèÿœ¿ØžÀÚ¡ÃÝ ÃÜ¥Èá ÁÚž¿Ø­Ñë§Êãž¼Ó¡Á֛ܽºÔ¤ÅߣÃݤÃÝ ¾×¢ÀØ¡ºÏ¢ÂÞŸ¾Úš¸Óž¼Ø¦Åá»Õ”°ÉªÉæ¨Çã¥ÃߤÂÞž»Õ´Ôò±Ñî°Ïì­Ì陵ιÙ÷¾ßý·×ô™³Ë¢»Ò¶Ìž¶ÌªÃÚ—´ÐŸ½Ú»Ø£ÁÞ ½Úž»ØºÖ™µÑ–²Í£ÀÝ¡¾Ûž»×¹Õ’¬Æ¤ÁÞ¤ÁÝ ¼Ø¸Ò¦Á۶ϭ½¹Ö£¿Ü¢¾Ûž¹Õœ·Ó§ÁŒ£¼¤¾Ûœ¶Ñ‡œ¶£½Û¢»Ú ¹×GP[ª¾Õ™¦µ§¿ßm{al{“—žµÖ“®x‰¢®°³¢¹ß¤ºÜœ±Ò¬Âå=DOƒ†Œ¤´Ú¡°ÖSZj«Ñ™§Ì©µÞ–žÇ¢¦×ŸŸ¡®®°¬¬­««¬¦¦§ÿÿÿüüüüüüüüüüüüüúæðáôæåêÌ¢­­¢èÇÇ¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿ÇÌééå @@@@@@ åéÝÇ¿¿¿¿¿¿Ç¿¿¿ÇÇ¿¿ÌÙÚÚÝÝéêåæáôú}üüüüüüüüüüüüüüüüüüüüüüüüüüü}úôðáôæåÝïµïÀ¼ÇÇè¿¿¿¿¿¿¿¿¿¿¿¿Ùé'@@]]]``WW\\0\\\W`]]]@@ ÝÇ¿¿Ç¿¿¿¿¿¿¿¿è¿ÌÙÚÝÝééåæááçüüüüüüüüüüüüüüüüüüüüüüüüüü}çáðôôæêÚ¢­¢Þ¼ÇǼ¼¼¼¼¼¿¿¿¿¿èÇÚê @]W\0eee,,,,,,e,,,,,eee00\W]@åéÌ¿¿¿¿¿¿¿Ç¿èÇÌÙÚÝÝéêæááñüüüüüüüüüüüüüüüüüüüüüüüüüñððôôåê̪µªèÌǼ¼¼¼¼¼¼¼¼¼èèÇÝ @@`\ee,,eeeeeeeeeeeeeeeeeeeee,,,0W]]@êÚ¿Ç¿¿¿¿Ç¿¿¿ÇÌÚÝÝéêåôáæüüüüüüüüüüüüüüüüüüüüüüüåððôæåéÇï­¢Ç̼¼¼¼¼¼¼èè¼¼Çê @]`\e,eeeeeeeeee0eeeeeeeeeeeeeeeeeeee,e\`]@Ú¿¿¿¿¿¿¿¿¿¿ÌÙÚÝééåôðæþ}üüüüüüüüüüüüüüüüü}úæðáôæåé­ï»Ç̼¼¼¼è¼è¼è¼èê @]W0e,eeeeeeeeeeeeeeeeeeeeeeee0eeeeeeeeeeeeee\`@ÚŠ¿¿¿¿¿¿¿¿¿ÇÙÚÝéêåæááç}üüüüüüüüüüþüüüü}çôðáôæêÝ»­ïÌǼ¼¼¼è¼¼è¼èÝ @@We,,eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0eeee,,0W]Ç¿¿¿¿¿¿¿¿¿ÇÙÚÝÝéêæááñüüüüüüüüüüææææææáðáææêÚÞÌǼ¼¼¼¼¼¼è¼Ý @We,eeeeeee0eeeeeeeeee0eeeeeeeeee0eeeeeeeeeeeeeeeee,e`@êÇè¿¿¿¿¿¿è¿ÌÚÚééêåôáñüüüüüüüüüðððððððáææêÌ¢ïÞÇÙ¼¼¼¼¼¼è¼¼Ù@We,eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0eee0eeeee,0`@êÇè¿¿¿¿¿è¿ÌÙÚÝéêåôáñ}üüüüüüüôæææææææåêÌ¢¢Ì̼¼¼¼¼¼è¼èÌ@`e,eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0eeeeeeeeeeeeeeeeeeeee,,\]@ é輿¿¿¿¿¿ÇÙÚÝééåôáçüüüüüüüååååååêåéÇ¢Þ¼ÙǼ¼¼¼¼¼èèè»Ù @`\eeeeeeeee00eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0eeeeeeeee,\]¼¿¿¿¿¿èÇÙÚÚéêåáôúüüüüüüÚÚÚÙÙÌÌÌÌ»¥¼ÙǼ¼¼¼¼è¼¼é@\,,eeeeeeee& Jeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0eeeeeeeeeeee,,W@Ǽ¼¿¿¿¿¿ÇÙÙÝééæáæþüüüüü¥¥»»»»»»ÇÇÌÙ¼¼¼¼èè¼èèèèê]\,eeeeeeeeee! Jeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee,\@ Ù¼¼¿¿¿¿¿¿ÙÚÝéêæáåüüüüüÚÚÚÚÙÌÙÌÚÝÙ¼¼¼èè¼è¼èÇ@`0,eeeeeeeeee0! JH&0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0eee0]ݼ¿è¿¿èÇÙÚÝéêæáñüüüüÚÚÚÚÚÙÙÙÌ̼¼¼¼¼¼èèèÞö @`e,eeeeeeeeeee0!HeJ0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee,e]éèèèè¿¿¿ÇÙÚÝéåôáçüüü¼¼¼¼¼¼¼¼¼¼¼¼¼¼è¼¼¼Ú @\eeeeeeeeeeeeee0!  Jeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee,e`Çèèèè¿èÇÚÚÝéåáôú}ü¼¼¼¼¼¼¼¼¼¼¼¼¼¼èèÞé]\eeeeeeeeeeeeeee0! \eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeW@Çèèèè¿¿ÇÙÝéêåáôþü¼¼¼¼¼¼¼¼¼¼è¼è¼èè»é]0,eeeeeeeeeeeeeee0 \\"Jeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee,\@Çèèèè¿¿ÌÚÚÝêæáæü¼¼¼¼¼¼¼¼è¼¼è¼è¼ÀÚ]e,eeeeeeeeeeeeeeee0!  HeeeeeeeeeJ!J\0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee,\]èèèèèè¿¿ÌÚÝÝêæáå¼¼¼¼¼¼¼¼è¼èèèè»ø@\,eeeeeeeeeeeeeeeeee! !0eeeeee&øøöøe0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee,W@êèèèèè¿¿ÙÚÝéêôá¼¼¼¼¼¼è¼èèè¼èÇ@\,eeeeeeeeeeeeeeeeeee,&!Jeeeeee&ø¿öeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeWéèèèè¿¿ÇÙÚÝéåá¼¼¼¼¼¼¼è¼èè@WeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeÀèè&0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee]Ùèèè¿èèÌÙÚÝêæ¼¼¼¼¼è¼èÞ@`eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeÌèèèèÀÀÀÞÞ¢ÞÀ0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee] Ìèèèèè¿ÌÚÚéå¼¼¼¼¼è¼èèèÀÝ`eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0èèè¢èÚêåææåé¿ÀÀŠøeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee,0]ÇèèèèèÇÚÚÝê¼¼¼¼èè»Ù]\eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeÇèÀèêôow†††† ðå¿ÀÇ,eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee,\@èèèèè¿ÌÚÝé¼¼¼èèèÇ ]\,eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeÙèèÀéá †w‚kk‚kw†wáÝÞ¼J0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\éèèèèè¿ÙÚݼè¼è@\eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\èÀæ †wx€€€r€rkkw† +éÞ!eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee,`ÙèèèèèÌÚÚ¼¼èèèÀø`,eeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0Ùèæ†kƒ''€€€€€krr‚† +Úeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee]èèèè¿ÙÚèèèèè»@\eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee%ÀèèÀ净€'ƒƒ€€€rrr‚wôöeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee,WÚÀèèè¿ÇÚèèèèWeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"Ú‰Ý +‡‚ƒƒ'nƒ€€€€€€‚ êÞè¿,eeeeeeeeeeeeeeeeeeeeeeeeeeeeeee]èèèèè¿Ìèè]\,eeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0ÇÀÀ懆ƒ€ƒ'n€ƒƒƒ€€€xxwôèèè&eeeeeeeeeeeeeeeeeeeeeeeeeeeee,WÝ»èèèè¿Çèè¢Weeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0ÀÌ +‡‚€ƒƒ€ƒnƒƒƒƒƒƒƒ€€€€w +ÚÞèèŠeeeeeeeeeeeeeeeeeeeeeeeeeeeeee`èèèèè¿À]0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\ŠèÀ݆kƒƒƒƒƒ€ƒƒƒƒƒƒƒƒ€€‚ké¢èøeeeeeeeeeeeeeeeeeeeeeeeeeeee,\݉èèèèè¢Weeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee,eeÀÀꆆ€ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒxxwê¢èèèöJeeeeeeeeeeeeeeeeeeeeeeeeeeee`èèèèÇ ]0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\‰è¢å‡w€ƒƒƒƒƒ€€€ƒƒƒƒƒƒƒ€€x‚êÞèè¿J0eeeeeeeeeeeeeeeeeeeeeeeeee\@éÞèèèè]\,eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee,0‰Þå‡w€ƒƒƒƒƒƒnƒƒƒƒƒƒƒƒ€€x êÞèèŠeeeeeeeeeeeeeeeeeeeeeeeeee,` ¿èèèèè ]eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0èÀꆆ€ƒƒƒƒƒ'ƒƒƒƒƒƒƒ€ +ÚÞèèèè‰øeeeeeeeeeeeeeeeeeeeeeeeeee0]êÀèèøW,eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeÇÞÚ †‚ƒƒƒ€'n€ƒƒƒƒƒƒ‚ ÇÀèèèèöeeeeeeeeeeeeeeeeeeeeeeeeee`è‰]0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee%éÀÀèᇂƒƒƒ€' nƒƒƒƒƒƒ€‚åÞèèèèÀè,eeeeeeeeeeeeeeeeeeeeeee,WÌÀèèè `eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\¢ê†xƒƒ€nƒƒƒƒƒƒƒ ÌÀèèèèèè$0eeeeeeeeeeeeeeeeeeeeee0é¢èèÀÌ`,eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeÙ¢Àèá‡wxƒƒƒn@@ƒ€ƒƒƒƒƒƒoêÞèèèèèÀeeeeeeeeeeeeeeeeeeeeeee`è¢]\,eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0ÞÙ†w€ƒ€€€€ƒƒƒƒƒƒoå»èèÀøeeeeeeeeeeeeeeeeeeeee,WÇèÀ]eeeeeeeeeeeeeeeeeeeee,,,,,eeeeeeeeeeeeeee%ÝÀ¢Ú†‚xƒƒƒƒƒƒƒƒƒ'ê»ÀèÀÀÀÀõ,eeeeeeeeeeeeeeeeeee,\ÚÀèÀöWeeee,,eeeeee,,,,,,,,,,,,,,,,,,e,,,,,e,,e,eÙ‰ÞÙô wwxx€xxxƒoôãÞèèÞ¢ÀèÇÇÇÇÀÞ¢Jeeeeeeeeeeeeeeeeeeee`‰èÞé]\,,,e,,,,,J,,,,,,,,,,,,,,,,,,e,,,,,e,,,,,0Ù¢ÀèÞúô +o ooæ饢À¢Çêåô + +ôêÙ¢‰0eeeeeeeeeeeeeeeeeeW è]e,e,e,,,,J!ee,,,,,,,,,,,,,,,,e,,,,,e,,,,e,eéÀÀÞâÓéññçã»Þ¢À‰Çæ + w†wwww† å‰eeeeeeeeeeeeeeeeee\ÙÀÇ`,e,,,,,,eJee,,,,,,,,,,,,,,,,e,,,,,e,,e,,,ee"êèÀÀÀ¢ÞÞÞÞÀÀ‰ê +‡†w€k€kk‚wwô¿¢öeeeeeeeeeeeeeeeee0`ꢉÝWee,,,,,,eJ!e,,,,,,,,,,,,,,,,,e,,,,,e,,e,,e,eeeÇÀÀÀÀꇆ€nn€ƒ€€rw†ôÇ¢èJeeeeeeeeeeeeeeee`À‰`\,,,,,,,,ee,e,,,,,,,,,,,eeeeee,e,,e,,e,,,,,,eeÙÀÀ¢ê ‡w€n'€ƒ€€x€k‚†æÀ0eeeeeeeeeeeeee,\ è‰]0,,,,,,,e&!e,e,,,,,,ee,JJee,,e,,,,,,,,e݉ÀÞÇð‡wƒ'€ƒ€€€€rrw éÞÀøeeeeeeeeeeeeee,\lj]e,,,,,,ee  e,e,,,,,e,èÀ¢ÞÀõ&eee,,,,,,,,,e"ÀÀÀÞ准‚ƒƒn''€ƒƒƒ€ƒ€€w Àeeeeeeeeeeeeee,\ø‰`e,,,,,,e$Je,,,,,e"ö‰¢ÀÀÀÀÀÀÀÀ¢Àø$e,,,,,,,,,,eeÇ¢ÀÀÀÇð‡w€ƒ€ƒnnnƒƒƒƒƒƒ€€x‚oÝÞ‰Jeeeeeeeeeeeee,0ÚŠ],,,,,,,, ee Je,,,eøŠÀÀÀÀÀÀÀÀ¢Àe,,,,,,,,,ee0Ù¢ÀÀÀÀ݆‚ƒƒƒƒ€€€ƒƒƒƒƒƒƒ€€€‚wå¢Àèeeeeeeeeeeeeee0Ýè`,,,,,,,,J,,b$,,,eÇ¢ÀÀÀÀÀŠŠÀÀò»ÀÀøee,,,,,,,,eeeé‰ÀÀÀÀÀÀÀÀÀꇆƒƒƒƒƒƒƒƒƒƒƒƒƒƒ€€€€wæ¢ÀÀeeeeeeeeeeeeeee`éÇW,,,,,,,,,e,,,,ee,,,e¼‰ÀÀÀÀÌùtò»‰èJe,,,,,,,,,,e"¢ÀÀÀÀÀÀ¢æ‡wƒƒƒƒƒƒƒƒƒƒƒƒƒƒ€€€xwæÀÀÀeeeeeeeeeeeeeee`ÌW,,,,,,,,,,,,,,,,,,e"Ù¢ÀÀÀÀÚqss{uuut÷ÀÀ!e,,,,,,,,,,,eÇÞÀÀ¢æ‡†xƒƒƒƒƒƒnƒƒƒƒƒƒƒƒ€€€‚ôÞÀeeeeeeeeeeeeee,`ø\,,,,,,,,,,,,,,,,,,H‰ÀÀÀÀé(ss{tuv|||v{÷¢ø,,,,,,,,,,,eeÚÀÀÀÀÀÀÀ¢å‡†€ƒƒƒƒn n€ƒƒƒƒƒƒx€w墢eeeeeeeeeeeeee,`Ý\,,,,,,,,,,,,,,,,,eÀÀÀÀŠqsss{uv|||||v{÷Š‰è,e,,,,,,,,,,eé‰ÀÀÀÀÀ¢é†‚ƒƒ€ƒ n€ƒƒƒƒƒxxrê¢Àe,e,eeeeeeeeee,W`\,,,,,,,,,,,,,,,,,Hé¢ÀÀÀ¢êpsss{suv||||||tsòÀÀ¢À!e,,,,,,,,,,e"¢ÀÀÀÀÀÀÇ +‡wƒƒ€€@€ƒƒƒƒƒƒƒÇÞÀee,,,,,eeeeeee,W ]0,,,,,,,,,,,,,,,,eèÀÀÀ¢Ì #sssss{uu|||||vu{sÀÀÀ¢øee,,,,,,,,,eeÇÀÀÀÀÀ¢å†wxƒ€ƒ @€ƒƒƒƒƒƒƒwæ¢Àe,,,,e,,eeeeee,\]\,,,,,,,,,,,,,,,,e‰ÀÀÞ‰æqssss{{tuv||||uu{stóÀÀÀÀ¢õ,e,,,,,,,,,,eÝ¢ÞÀÀ¢Ì +‡‚ƒƒ€ƒn@nƒƒƒƒƒƒƒƒ‚ÌÀÀö!e,,,,e,,,e,eee,W \,,,,,,,,,,,,,,,,H¢ÀÀÞÇ ssssss{{uuvvvvu{{ssŠÀÀÀÀ¢$e,,,,,,,,,,eéÀÀÀÀÀ¢ê †ƒƒƒƒ€€€ƒƒƒƒƒƒo颢,e,,,,e,,,,,,ee,Wø\,,,,,,,,,,,,,,,,HÚ¢ÀÀ¢é)ssss{ss{{tuuut{{sssŠÀÀÀÀÀ‰¢e,,,,,,,,,,eHè¢ÀÀÀÞå †‚ƒƒƒƒƒƒƒƒƒƒƒ‚'ê¢ÀÀèe,,,,,e,,,,,,,,,WÇW,,,,,,,,,,,,,,,b"Ú¢ÀÀ¢åpsssssss{{{{{s{{ssss‰ÀÀÀÀÀÀÞ¢öbe,,,,,,,,,eHÇÞÀÀÀÀê +†wƒƒƒƒƒ€xxx é¢À‰Je,,,,,e,,,,,,,,,`èW,,,,,,,,,,,,,,,b"Ì¢ÀÀ¢åqssssssss{{{{{{sssss)èÀÀÀÀÀÀÀÀ¢è&e,,,,,,,,,,eÚŠÀÀÞ¢ãæo ‚‚‚ƒ€o' å¼¢ÀÀÀèe,,,,,,e,,,,,,,,,`éè`bbb,,b,,,,,bb,,,"ø¢ÞÞ¢æ)qssssssssssssssssssÞÀÀÀÀÀÀÀÀÀ¢À,,,,,,,,,,,e"ÀÀÀÀ¢¢Óçåæææñ㥢ÞÀÀÀÀÀe,,,,,,,e,,,,,,,,e`é‰`,bbb,bbbbbbbbb,,H¢ÞÞ¢å)qqsssssssssssssssssÀÀÀÀÀÀÀÀÀÀÀÀ¢öbe,,,,,,,,,eHÇ¢ÀÀÀÞÞÞâ¾¾ÞÞ¢ÀÀÀÀÀÀ»,e,,,,,,,e,,,,,,,,eÝ¢`ebbbb,bbbbb,bbbbHé¢ÀÞ¢é#sqssssssssssssssssqÀÞÀÀÀÀÀÀÀÀÀÀÀ¢èJe,,,,,,,,,,eÙ¢ÞÀÀÀÀÀÀÀÀÀÀÀÀÀ¢À,e,,ee,,,,eee,,,,,,\Ù¢`eb,bb,bbbbbb,bbbe‰ÞÞ¢Ç sqqqssssssssssssqq)‰ÞÞÞÀÀÀÀÀÀÀÀÀÀ¢À,,,,,,,,,,,eé¢ÀÀÀÀÀÀÀÀÀÀÀ‰Àö,e,,,Je,e$!ee,,,,\Ì¢`ebbbbbbbbbbb,bbb,è¢ÞÞ¢å(qqqqqsssssssssssmÀÀÞÞÞÞÞÞÞÞÀÀÀÀÀÀÀ¢ø,e,,,,,,,,,e&Ú¢¢¢¢¢¢‰¢¢ÀÀö!e,,,,,ee0e,,,,,W Ç›`0bbbbbbbbbbbbbbbbHé¢ÞÞ¢¼ qqqqqqqqssssssss)ÀÞÞÞÞÞÞÞÞÞÀÞÞÀÀÀÀÀ‰è$e,,,,,,,,,,e"Úõ¼èöö!,e,,,,,,!e,,,,,\¢ø\bbbbbbb,bbbbbbbbe¢ÞÞªésqqqqqqqqqss{{tŠÞÞÞÞÞÞÞÞÞÞÞÞÞÞÀÞÀÀÞ¢‰e,,,,,,,,,,,ee"!,ee,,,,,,,eJ e,,e,,,WÀ¢WbbbbbbbbbbbbbbbbbH¢¢Þ¢¢é)q)qqqqqs{{uuÞÀÞÞÞÞÞÞÞÞÞÞÞÞÞ¢ÞÞ‰ÀÞÞÀ¢øe,,,,,,,,,,,,,eeeeee,,,,,,,,,,,e ! e,,,,ee`颢¢`e8bbbbbbbbbbb,bbbb&Ú¢¢¢¢¢Ú(qqm)m)q{uÞÀÞÞÞÞÞÞÞÞÞÞÞÞ¢¢¼ÞÞÀÀ‰À¢èJe,,,,,,,,,,,,,,,,,,,,,,,,,,,,e e !,,,,,,\ÇÀ¢¢\bbbbbbbbbbbbbbbbbbǪ¢¢¢¢è()p)))÷»¢ÞÞ¢ÞÞÞÞÞÞÞÞ¢ÀÚêŠÀ¢¢$e,,,,,,,,,,,,,,,,,,,,,,,,,,,,J e,,,,,,WÀÞ¢è\bbbbbbbbbbbbbbbbbbbø¢¢¢¢¢¢èÞ‰¢ÞÞÞÞÞÞÞÞÞÞÞÞªÙå#(qssss{tÀ¢¢ø,e,,,,,,,,,,,,,,,,,,,,,,,,,,e,,,,,,,`¢ÀÞ¢¢`,bbbbbbbbbb,bbbbbbb,"¢¢¢¢¢¢¢‰ÀÞ¢‰¢¢ÞÞÞÞÞÞÞÞ¢ÞÞÞ¢Þê psssssttuutt‰‰¢èb,,,,,,,,,,,,,,,,,,,,,,,,,,,&$e,,,,,0ÌÞÀ¢¢›`0bbbbbbbbbbbbbbbbbbbbJ袢¢¢¢¢¢¢¢¢¢Þ¢¢¢¢¢ÞÞÞÞÞÞ¢Þésssss{tuv|||utÞ‰¢Àe,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,\ ÀÀ¢¢›Ç\bbbbbbbbbbbbbbbbbbbbbbø¢¢¢¢¢¢¢¢¢¢¢Þ¢¢¢¢¢ÞÞÞÞ¢ªÚssssss{tuv||||v{‰Þ¢ö!e,,,,,,,,,,,,,,,,,,,,,,,,,,eee,,,,,,,`¢À¢¢¢¢`bbbbbbbbbbbbbbbbbbbbbb,¢›¢¢¢¢¢¢¢ÞÞ¢ÞÞÞ¢Þ¢¢¢¢ôpssssss{tu||||||utòÀÀ¢b,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0¢À¢¢¢›`,8888>88bbbbbbbbbbbbbbbbJ袢¢¢¢¢¢¢¢¢¢ÞÞ¢Þ¢¢¢ªé'ssssss{{tv||||||u{ŠÞ¢ø!e,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\ èÀÀÀ¢¢¢›ö\88888888>b8bbbbbbbbbbbbbeÚ¢ª¢¢¢¢¢¢¢¢¢¢¢¢¢Þ¢Þô(ssssss{{tuv||||vustèÀ¢Þe,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,W¢ÀÀÀ¢¢¢¢¢Wb888888888888bbbbbbbbbbbbb&À›¢¢¢¢¢¢¢¢¢¢¢¢¢¢Çssssssss{{tuv||vut{q¢Þ¢,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0Ý¢ÀÀÀ¢¢¢¢›ø\D>>8888>88>88888bbbbbbbbbbbö›¢¢¢¢¢¢¢¢¢¢¢¢ªÚ +ssssssss{{tuuuuuts{s‰¢¢b,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,WÞÀÀÀÀ¢¢¢¢ª¢`8D8D888>8888888888bbbbbbbbb,¢›¢¢¢¢¢¢¢¢¢¢ïé'ssssssssssst{{{{{{{s‰Þ¢øJ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\¢ÀÀÀÀª¢¢¢ª›ø%\>D>>>8>>D>8>88>8888888bbbbbb&蛢¢¢¢¢¢¢¢¢ªÝsqsssss{ssss{{{{{ss{ÀÞ¢õ!b,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,W‰ÀÀÀÀÀªªª¢¢ª›W,DD>>>>>D>>D88888888888b8bbbb,ö›¢¢¢¢¢¢¢¢¢Ìqqsssssssssss{{sssss¢Þ¢ö$b,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\Ù¢ÀÀÀÀÀªªªªªª›è\DDDD>D>>888D88888888888bb8bbb,¢›¢¢¢¢¢¢¢¢ "qqqqsssssssssssssssq¢Þ¢øJb,b,b,,,,,,,,,,,,,,,,,,,,,,,,,,WÞÀÀÀÀÀªªªªªªª­WbIDDIDDD>>D>>88>8888888888bbbbb$¢¢¢¢¢¢¢›å(qqqqssssssssssssssÀ¢Þ¢>b,b,bb,,,,,,,,,,,,,,,,,,,,,,,,\Ç¢ÀÀÀÀÀªïïï着­ó"\DIDDDDDDDDD>D>>888>88888b88b8bb,ö›¢¢¢¢¢ïø qqqqssssssssssssss¢¢Þ¢,b,b,bbb,,,,,,,,,,,,,,,,,,,,,,,`¢ÀÀÀÀÀ¼ïïïïïïïï­`8IDDDDDDDDDD>D8D8DD888888888bb8b,¢›¢¢¢¢ªå%#qqqqqsssssssssss÷¢Þ¢»e,,b,bbb,bb,,,,,,,,,,,,,,,,,,,W¿¢ÀÀÀÀÞèÇïïïïïïïïµóWIIIIIDDDDDDDDD>8>D888888888888bb,J»¢¢¢¢ª))qqqqsssssss{st‰Þ¢›ø$bb,b,bbb,bbb,,,,,,,,,,,,,,,,,e`‰ÀÞÞÞ޼ǭï­ï­­ïï­š`eIKIIIDDDDDDDDDDD>>D8>8>88888888bbeø¢¢õ)qqqqqqssss{uu¢ÞÞ¢¢bbb,b,bbb,bbbbbb,,,,,,,,,,,,,,`è¢ÞÞÞÞÞè¼Ç­­­­­­­ïï­­`bIKIIIIIDDDDDDDD>D8>>8>88888888b8b,¢›¢¢ïè#mqmmmmqs{uu¢¢Þ¢›ø!ebb,b,bbb,bbbbbbbbb,,,,,,,,,,\ø¢ÀÞÞÞÞ¼ÇÌ­­­­­­­­­­µ¢W8LKKIIIIIIIDDDDDDDD>>>>>>88888888bbJ蛢¢¢¢Ù #)pmmmq÷‰Þ¢¢¢»bbbb,b,bbb,bbbbbbbbb,,,,,,,,,e`é›ÀÞÞÞÞÀ¼ÇÇÙ­­­­­­µ­­­­µóWILKKIKIIIIIDDDDDDDD8>>>D888888888bb,ø¢ª¢¢ª¢õùÞ¢¢¢¢¢¢¢bbbbb,b,bbb,bbbbbbbbbb,,,,,,,0`ªÀÞÞÞÞÞÀ¼ÇÌÝ­µµµµ­­­­µ­­šö\KLLKKIKIIIIIDDDDDDDDD8D88>88888888b,À›¢¢¢››¢¢¢¢‰¢¢¢¢¢¢›¢bbbbbbbb,bbb,bbbbbbbbbbb,b,,,eWÀ¢ÀÞÞÞÞÀ¼ÇÙéµµµµµµµµµµµµ­š%eLLLLKKKKKIIIIIIDDDDDD8D888>88888b8bbb›ª¢¢¢¢¢¢¢¢¢¢¢¢¢ªèbbbbbbbbbbbbb,bbbbbbbbbbb,bbb,Wè¢ÀÀÞÞÞÀ¼ÇÌÝåµµµµµ´µµ´µµµµµšWbMLLLLLKKKIIIIIDDDDDDD>DD>8888888888bbÞ››¢¢¢¢¢¢¢¢¢›‰bbbbbb bb$ $,,bbbbbbbbb,bbbWÇ¢ÞÞÞÞÞÀ¼¼ÇÙéå´´µ´µµµµµµµµµµšïW$MMLLLKKLKKKIIIIIDDDDDDD>>D8>888888bbbJ󉛭­­ï›¢ó$bbbbbbbIe  ,,,bbbbbbbbb,bb\¢ÞÞÞÞÞÞÀ¼¼ÇÌéåæ´´´´´´´´´µµ´µµµ´Þ\KMMLLLLLKKIKIIIKIDDDDDDDD>>8>88888b8bbbb8bbbbbbbbbb  $bbb,bbbbbbbb,b\¢¢ÞÞÞÞ¢À¼¼ÇÌÝêæñ´³³³´³³³´´´´´´µµ³òWDMMMLLLLLKKKIIIIIIDDDDDD>>D888888888bbbbbbb>>bbbbbbbbbbbbbbbDbbbbbbbbbbbbbb\`¢¢ÞÞÞÞÞÞ¼ÇÌÚêæåü³³³³³³³³³³³´³´´´´³ÞW>MMMMMLLLKLKIKIIDIIDDDDDD>>>88888888bbbbbbbbbbbbbbbbbbbbbbb, ,bbbbbbbbbbbb,\¢¢¢ÞÞ¢ÞÞèÇÇÚéæåþü²²²³³²³³´³³³³³´³´´³­`,MMMMMMLLLLLKKKIIIDDDDDD>>>D888888888bbbbbbbbbbbbbbbbbbbbbb 8bbbbbbbbbbb,WÚ¢¢Þ¢ÞÞÞÞè¼ÇÙéåæúüü²²²²²²²²²²³³³³³´³³³³µ%\LMMMMMMLLLLKKKIIIDDDDDDD>D88>88888888bbbbbbbbbbbbbbbbbbb!,bbbbbbbbbe`ö¢ÞÞÞ¢ÞÞÞÀè¼ÇÌÝåæçëüü·²²²²²²²²²²²²²²³³³³³²²"\LMMMMMLMLLKKKIKIIIDDDD>D>>>>8888888bbbbbbbbbbbbbbbbbbb8 bbbbbbbb0Wè›Þ¢¢ÞÞÞÞÀ¼ÇÇÝêæñëüüü··²²·²²²²²²²²²²²²³²³³²²ó\IMMMMMMLLLLLKKKIIIIDDDDD>>>D88888888bbbbbbbbbbbbbbbbb>b bbbbbbb\WÞ¢¢¢¢Þ¢¢ÞÞè¼ÇÚêæñüüüüü······²²·²²²²²²²²²²²´³³²÷\iMMMMMMMMLLLLKLIIIIDDDDD>>D8>8888888bbbbbbbbbbbbbbbb$$bb8bbbbb,\¢¢¢¢¢¢¢¢¢Àè¼ÇÙéæåþüüüüü¸····²···²²·²²²²²²²²²²²´²­%,LMMMMMMMLLLLKIIIIDDDDDDDD>D8888888b8bbbbbbbbbbbbbbb,bbbb,bbbbb0`ø¢¢¢¢¢¢¢¢¢Þè¼¼ÇÙéååþüüüüüü····¸·········²²²²²²²³²²³²´ø%,LMMMMMMLLLLLIIKIIDDDDD>>>D88888888bbbbbbbbbbbbbbbbbbbbbbbb0Wõ›¢¢¢¢¢¢ÞÞÀè¼ÇÙÝåæúüüüüüüü¸¸¸¸¸¸¸·¸¸······²·²²²²²²²³²²µ0bLMMMMMLLLLKLKIKIIDDDD>>>88888888888bbbbbbbbbbbbbbbbbbbeW%öª›¢¢Þ¢¢¢ÞÞÀè¼ÇÙéêæçëüüüüüüü¸¸¸¸¸¸¸¸¸¸·¸·····²··²··²²²²³²²ï\8LMMMMMLLLLIKIIDIDDDDD>>888888888b8bbbbbbbbbbbbbbbbeW%¢›¢¢¢¢¢¢¢¢Àè¼ÇÙéåæçüüüüüüüüü¸¸¸¸¸¸¸¸¸¸¸¸¸··¸······²²²²²²²³²²ï\8LMMMMLLLLLIIIIDDDDD8D8>8888888b8bbbbbbbbbbbbbb,\¢›¢¢¢¢¢¢¢¢¢ÀÀèè¼ÇÚéåææúüüüüüüüüü’¸¸¸’¸¸¸¸¸¸¸¸¸¸¸¸¸····²·²²²²²²²²²²Þ"\bILMMLLLLKKIIIIDDD>DD888888888bbbbbbbbbbbb,e\W¢›¢¢¢¢¢Þ¢¢¢ÞÀÀè¼ÌÚêåææåñþüüüüüüüü’’’’¸¸’¸¸¸¸¸¸¸¸¸¸·¸¸····²²··²²²³²²²²òH0bDIMLLLIILIDDDDDDD>8D88888888bbbbbbb,\\WÞ›¢¢¢¢¢¢¢¢¢¢¢Àè¼ÌÝêæææñææúüüüüüüüü’’’’’’’’¸’¸¸¸¸¸¸¸¸¸¸·¸······²²²²²²´²²²ïöH\e8IKLKKKIIDDDDDD8D8888888888bbe\\Wö¢›ª¢¢¢¢¢¢¢¢¢ÞÞÀèèÇÌÝêææååæáæ}üüüüüüüü’’’’’’’’’’’¸’¸¸¸¸¸¸¸¸¸¸··²····²²²²²²³³³²²­õ"\0,biiDDDIDDIDI>Di888bbb,e0\%ó¢››¢¢¢¢¢¢¢¢¢¢¢ÞÀÀèèÇÚÝåææååæáæúüüüüüüüüü’’’’’’’’’’’’’’¸’’¸¸¸¸¸¸¸¸·¸····²²²²²²²´³³³²²µò"%H\\\\eee,,,e0\\\\\%"øÞï›ï¢¢¢¢¢¢¢¢¢¢¢¢¢ÞÀèèÇÚéåææåñôðæþëüüüüüüüüü’’’’’’’’’’’’’’’’¸¸¸’¸¸¸¸¸·¸·¸²·²·²²³²³²³³´´´´´ššÞóø""%"øøè¢ï›ªª¢¢¢¢¢¢¢¢¢¢¢¢¢ÞÀè¼¼ÌÝêåæåååôáñüëüüüüüüüüüü’’’’’’’’’’’’’’’’’’’’¸¸¸¸¸¸¸·······²²²²²³³³³´´´µµµ´ššššµµªÞóõöõ»Þª­››µ››ïª¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢ÞÀÀè¿ÇÙéêåæåååááçüüüüüüüüüüüüüm ÿÿÿÿ0  + + + Snes9x + + + + + +¼ ÿÿÿÿ0¼4VS_VERSION_INFO½ïþ?StringFileInfoö080904b0>CompanyNameGary Henderson8FileDescriptionSnes9XW*FileVersion1.40.InternalNameSnes9XPLegalCopyrightCopyright © 1996-2001@ OriginalFilenameSnes9XW.exeJProductNameSnes9X SNES Emulator.ProductVersion1.40DVarFileInfo$Translation ° 4TEXTINCLUDEÿÿ0resource.h+4TEXTINCLUDEÿÿ0#include "afxres.h" +#include "language.h"4TEXTINCLUDEÿÿ0 +  ÿÿÿÿf0&Bestandá&Openen€Aœ&Sluiten&Opties€VœJoypad configuratie&Geluid&8-BitEœ8000 Hz, monoMœ8000 Hz, stereoFœ11025 Hz, monoNœ11025 Hz, stereoGœ22050 Hz, monoOœ22050 Hz, stereoHœ44100 Hz, mono€Pœ44100 Hz, stereo&16-BitIœ8000 Hz, monoQœ8000 Hz, stereoJœ11025 Hz, monoRœ11025 Hz, stereoKœ22050 Hz, monoSœ22050 Hz, stereoLœ44100 Hz, mono€Tœ44100 Hz, stereo€Uœ&Geen Geluid&Venster&TaalBœ&EnglishˆCœ&Nederlands€Dœ&Verberg menubalk ESC’ ÿÿÿÿe0 &FileáL&oad Game... Ctrl+ORecent &Games‚šœDummy&Save Game PositionmœSlot #1 Shift+F1nœSlot #2 Shift+F2oœSlot #3 Shift+F3pœSlot #4 Shift+F4qœSlot #5 Shift+F5rœSlot #6 Shift+F6sœSlot #7 Shift+F7tœSlot #8 Shift+F8uœSlot #9 Shift+F9&Load Game PositionvœSlot #1 F1wœSlot #2 F2xœSlot #3 F3yœSlot #4 F4zœSlot #5 F5{œSlot #6 F6|œSlot #7 F7}œSlot #8 F8~œSlot #9 F9‚œS&ave SPC Data™œSa&ve S-RAM Data›œSave SPC&7110 logžœROM Information...±œMovie Play...³œMovie Record...²œMovie Stop´œRecord AVI...µœStop AVI RecordingYœ&Reset GameZœ&Pause Pause€AœE&xit Alt+F4&OptionsXœ&Display Configuration... Alt+F5†œ&Settings... Alt+F8œSPC7110 Cache Settings...€¬œGFX Pack Configuration...&InputVœ&Joypad Configuration... Alt+F7¶œCustomize Hotkeys...¨œEnable Multitap 5©œEnable MouseªœEnable Superscope€­œEnable Justifiers&Sound&Playback RateUœ&No Sound Alt+0aœ8KHz Alt+1bœ11KHz Alt+2–œ16KHz Alt+3cœ22KHz Alt+4eœ30KHz Alt+5Ÿœ32KHz Alt+6—œ35KHz Alt+7dœ44KHz Alt+8•œ48KHz Alt+9&Buffer Lengthkœ&10msfœ&20msgœ&40mshœ&80msiœ1&60msjœ&320mslœ64&0ms^œ&16-Bit Sound_œ&Stereo˜œ&Reverse Stereo Alt+R«œCatch-up Sample Generation[œ&Interpolated Alt+[\œS&ync Sound Alt+]€„œ&Settings... Alt+T&Window&LanguageBœ&EnglishCœ&NederlandsDœ&Hide menubar ESC]œ&Full Screen Alt+Return€`œ&Stretch Image Alt+Del&Cheatœ&Game Genie, Pro-Action Replay Codes Alt+E€œ&Search for New Cheats Alt+A œ&Apply CheatsœœSet SPC7110 RTC&NetplayŽœ&Connect to Server...œ&Disconnect from Serverœ&Act as Server’œ&Re-sync all Clients Using Freeze File Now‘œ&Send ROM Image to Clients Now“œS&end ROM Image to Clients”œS&ync Using Reset Game€œ&Options...&Help€ƒœ&About...œ$HWBÿÿcDHWBÿÿ ê…ÌHWBÿÿÈ0 ܆HWBÿÿÉ0  3ˆHWBÿÿÊ0 7H»HWBÿÿ/0 ¤¼HWBÿÿ-0 mè¿HWBÿÿ.0 4 -ÿÿÿÿ t.ÿÿ ÿÿe0 ø¨.ÿÿ ÿÿg0 ºÀ/ÿÿÿÿf0 èœ7ÿÿÿÿe0 |¤9ÿÿÿÿg0 ž@@ÿÿÿÿh0 ¬Aÿÿÿÿi0 ÌAÿÿÿÿj0 ¢ðFÿÿÿÿk0 J´Iÿÿÿÿl0 Z Oÿÿÿÿn0 öœSÿÿÿÿ{0 \´Zÿÿÿÿo0 ¸0^ÿÿÿÿ|0 Z_ÿÿÿÿ}0 H„gÿÿÿÿ0 ¦ìmÿÿÿÿ‚0 ´nÿÿÿÿƒ0 ˆ èpÿÿÿÿ†0  zÿÿÿÿ‡0 jP€ÿÿÿÿˆ0 rÜÿÿÿÿm0 £p’ÿÿðÿÿf0 \4•ÿÿðÿÿ}0 èÔ•DESIGNINFOGUIDELINES0 èÜšÿÿÿÿ ¨äÿÿÿÿ "¬¦ÿÿÿÿe0 (ð¦ÿÿÿÿo0 (8¬ÿÿÿÿp0 (€±ÿÿÿÿq0 (ȶÿÿÿÿr0 (¼ÿÿÿÿs0 h<XÁÿÿÿÿ…0 màýÿÿÿÿ0 ¼pÿÿÿÿ0 `TEXTINCLUDEÿÿ0+ TEXTINCLUDEÿÿ0TEXTINCLUDEÿÿ0 $ÿÿÿÿf0’ äÿÿÿÿe0  \ No newline at end of file diff -NaHudr snes9x-1.43-src/snes9x.dsw snes9x-improvement7-src-dehacked/snes9x.dsw --- snes9x-1.43-src/snes9x.dsw 1970-01-01 02:00:00.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x.dsw 2005-03-20 23:46:36.000000000 +0200 @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "Snes9X"=.\Snes9Xw.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff -NaHudr snes9x-1.43-src/snes9x.exe.manifest snes9x-improvement7-src-dehacked/snes9x.exe.manifest --- snes9x-1.43-src/snes9x.exe.manifest 1970-01-01 02:00:00.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x.exe.manifest 2005-03-20 23:46:36.000000000 +0200 @@ -0,0 +1,22 @@ + + + + Snes9x + + + + + + \ No newline at end of file diff -NaHudr snes9x-1.43-src/snes9x.rc snes9x-improvement7-src-dehacked/snes9x.rc --- snes9x-1.43-src/snes9x.rc 1970-01-01 02:00:00.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9x.rc 2005-03-21 14:00:47.000000000 +0200 @@ -0,0 +1,1508 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" +#include "language.h" +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Cursor +// + +IDC_CURSOR_SCOPE CURSOR "nodrop.cur" + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +IDR_SNES9X_ACCELERATORS ACCELERATORS +BEGIN + "0", ID_SOUND_NOSOUND, ASCII, ALT, NOINVERT + "1", ID_SOUND_8000HZ, ASCII, ALT, NOINVERT + "2", ID_SOUND_11025HZ, ASCII, ALT, NOINVERT + "3", ID_SOUND_16000HZ, ASCII, ALT, NOINVERT + "4", ID_SOUND_22050HZ, ASCII, ALT, NOINVERT + "5", ID_SOUND_30000HZ, ASCII, ALT, NOINVERT + "6", ID_SOUND_32000HZ, ASCII, ALT, NOINVERT + "7", ID_SOUND_35000HZ, ASCII, ALT, NOINVERT + "8", ID_SOUND_44100HZ, ASCII, ALT, NOINVERT + "9", ID_SOUND_48000HZ, ASCII, ALT, NOINVERT + "A", ID_CHEAT_SEARCH, VIRTKEY, ALT, NOINVERT + "E", ID_CHEAT_ENTER, VIRTKEY, ALT, NOINVERT + "O", ID_FILE_OPEN, VIRTKEY, CONTROL, NOINVERT + "R", ID_SOUND_REVERSE_STEREO, VIRTKEY, ALT, NOINVERT + "T", ID_SOUND_OPTIONS, VIRTKEY, ALT, NOINVERT + VK_DELETE, ID_WINDOW_STRETCH, VIRTKEY, ALT, NOINVERT + VK_DELETE, ID_TURBO_R, VIRTKEY, SHIFT, NOINVERT + VK_END, ID_TURBO_B, VIRTKEY, SHIFT, NOINVERT + VK_F12, ID_SCREENSHOT, VIRTKEY, NOINVERT + VK_F5, ID_OPTIONS_DISPLAY, VIRTKEY, ALT, NOINVERT + VK_F7, ID_OPTIONS_JOYPAD, VIRTKEY, ALT, NOINVERT + VK_F8, ID_OPTIONS_SETTINGS, VIRTKEY, ALT, NOINVERT + VK_HOME, ID_TURBO_Y, VIRTKEY, SHIFT, NOINVERT + VK_INSERT, ID_TURBO_L, VIRTKEY, SHIFT, NOINVERT + VK_NEXT, ID_TURBO_A, VIRTKEY, SHIFT, NOINVERT + VK_PRIOR, ID_TURBO_X, VIRTKEY, SHIFT, NOINVERT + VK_RETURN, ID_WINDOW_FULLSCREEN, VIRTKEY, ALT, NOINVERT + "[", ID_SOUND_INTERPOLATED, ASCII, ALT, NOINVERT + "]", ID_SOUND_SYNC, ASCII, ALT, NOINVERT + "{", ID_TURBO_SELECT, ASCII, NOINVERT + "}", ID_TURBO_START, ASCII, NOINVERT +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_SOUND_OPTS DIALOGEX 0, 0, 352, 202 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | + WS_VISIBLE | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU +CAPTION "Sound Settings" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + GROUPBOX "Sound Quality",IDC_STATIC,7,7,168,167,0, + WS_EX_TRANSPARENT + GROUPBOX "Sound Emulation",IDC_STATIC,177,7,168,167,0, + WS_EX_TRANSPARENT + DEFPUSHBUTTON "&OK",IDOK,229,178,56,16 + COMBOBOX IDC_DRIVER,65,24,106,60,CBS_DROPDOWN | WS_VSCROLL | + WS_TABSTOP + LTEXT "Sound Driver:",IDC_STATIC,13,25,49,11 + COMBOBOX IDC_BUFLEN,65,72,106,101,CBS_DROPDOWN | WS_VSCROLL | + WS_TABSTOP + LTEXT "&Buffer Length:",IDC_STATIC,13,74,49,11 + COMBOBOX IDC_RATE,65,40,106,171,CBS_DROPDOWN | WS_VSCROLL | + WS_TABSTOP + LTEXT "&Playback Rate:",IDC_STATIC,13,41,49,11 + COMBOBOX IDC_MIX,65,56,106,154,CBS_DROPDOWN | WS_VSCROLL | + WS_TABSTOP + LTEXT "Mix Interval:",IDC_STATIC,13,57,49,11 + CONTROL "&16 Bit playback",IDC_16BIT,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,13,92,158,10 + CONTROL "&Stereo",IDC_STEREO,"Button",BS_AUTOCHECKBOX | + BS_NOTIFY | WS_TABSTOP,13,108,158,10 + CONTROL "&Reverse Stereo",IDC_REV_STEREO,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,13,124,158,10 + CONTROL "Gaussian &Interpolation of Sample Data", + IDC_LINEAR_INTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 13,140,158,10 + CONTROL "&Generate sample data in sync with sound CPU", + IDC_SYNC_TO_SOUND_CPU,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,13,156,158,10 + CONTROL "&Volume envelope height reading",IDC_ENVX,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,183,19,141,12 + CONTROL "&Echo Effects",IDC_ECHO,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,183,58,141,12 + CONTROL "&Cache decoded samples",IDC_CACHING,"Button", + BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,183,71,141,12 + CONTROL "M&aster volume control",IDC_MASTER_VOL,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,183,84,141,12 + CONTROL "Enable sound CP&U emulation",IDC_SPC700ON,"Button", + BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,183,136,141,12 + CONTROL "Anti-Resonance's sample &decoding method",IDC_ANTIRES, + "Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,183, + 123,157,12 + CONTROL "&Mute sound",IDC_MUTE,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,183,97,141,12 + COMBOBOX IDC_SKIP_TYPE,249,152,94,59,CBS_DROPDOWN | WS_VSCROLL | + WS_TABSTOP + LTEXT "CPU &wait skip style",IDC_STATIC,183,152,64,13 + PUSHBUTTON "&Cancel",IDCANCEL,289,178,56,16 + CONTROL "&Fake Mute desync workaround",IDC_FMUT,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,183,32,141,12 + CONTROL "&Use WIP1 timing",IDC_WIP1,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,183,45,141,12 + CONTROL "&Frame Advance mute",IDC_FAMT,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,183,110,141,12 +END + +IDD_SPC7110_CACHE DIALOG 0, 0, 185, 92 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | + WS_VISIBLE | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU +CAPTION "SPC7110 Pack Configuration" +FONT 8, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "OK",IDOK,138,48,40,16 + PUSHBUTTON "Cancel",IDCANCEL,138,68,40,16 + CONTROL "Load All Data into RAM",IDC_SPC7110_ALL,"Button", + BS_AUTORADIOBUTTON,7,7,92,13 + CONTROL "Load Some Data into RAM",IDC_SPC7110_SOME,"Button", + BS_AUTORADIOBUTTON,7,26,101,13 + CONTROL "Read all data from file",IDC_SPC7110_FILE,"Button", + BS_AUTORADIOBUTTON,7,48,104,13 + EDITTEXT IDC_CACHE_MB,112,26,40,13,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "Spin1",IDC_SPIN_CACHE,"msctls_updown32",UDS_SETBUDDYINT | + UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | + UDS_NOTHOUSANDS,146,26,11,13 +END + +IDD_7110_RTC DIALOG 0, 0, 302, 148 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | + WS_CAPTION | WS_SYSMENU +CAPTION "SPC7110 RTC Control" +FONT 8, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "OK",IDOK,192,127,50,14 + PUSHBUTTON "Cancel",IDCANCEL,245,127,50,14 + GROUPBOX "RTC Control Registers",IDC_STATIC,7,49,288,71 + CONTROL "30 ADJ",IDC_RTC_D8,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,70,62,53,10 + CONTROL "IRQ-F",IDC_RTC_D4,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,127,62,53,10 + CONTROL "CAL / HW",IDC_RTC_D2,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,184,62,53,10 + CONTROL "HOLD",IDC_RTC_D1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 242,62,45,10 + CONTROL "T1",IDC_RTC_E8,"Button",BS_AUTOCHECKBOX | WS_DISABLED | + WS_TABSTOP,70,80,25,10 + CONTROL "T0",IDC_RTC_E4,"Button",BS_AUTOCHECKBOX | WS_DISABLED | + WS_TABSTOP,127,80,25,10 + CONTROL "INT/STND",IDC_RTC_E2,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,184,80,51,10 + CONTROL "MASK",IDC_RTC_E1,"Button",BS_AUTOCHECKBOX | WS_DISABLED | + WS_TABSTOP,242,80,36,10 + CONTROL "TEST",IDC_RTC_F8,"Button",BS_AUTOCHECKBOX | WS_DISABLED | + WS_TABSTOP,70,98,35,10 + CONTROL "24/12",IDC_RTC_F4,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,127,98,35,10 + CONTROL "STOP",IDC_RTC_F2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 184,98,35,10 + CONTROL "RESET",IDC_RTC_F1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 242,98,40,10 + LTEXT "Register 0xD",IDC_STATIC,13,62,43,8 + LTEXT "Register 0xE",IDC_STATIC,13,80,41,8 + LTEXT "Register 0xF",IDC_STATIC,13,98,42,8 + CONTROL "Slider1",IDC_DAY,"msctls_trackbar32",TBS_BOTH | + TBS_NOTICKS | WS_TABSTOP,59,20,45,8 + CONTROL "Slider2",IDC_YEAR,"msctls_trackbar32",TBS_BOTH | + TBS_NOTICKS | WS_TABSTOP,106,20,42,8 + LTEXT "1",IDC_LBLDAY,74,28,18,8 + CONTROL "Slider1",IDC_MONTH,"msctls_trackbar32",TBS_BOTH | + TBS_NOTICKS | WS_TABSTOP,7,20,51,8 + CONTROL "Slider2",IDC_HOUR,"msctls_trackbar32",TBS_BOTH | + TBS_NOTICKS | WS_TABSTOP,160,20,42,8 + CONTROL "Slider2",IDC_MINUTE,"msctls_trackbar32",TBS_BOTH | + TBS_NOTICKS | WS_TABSTOP,203,20,42,8 + CONTROL "Slider2",IDC_SECOND,"msctls_trackbar32",TBS_BOTH | + TBS_NOTICKS | WS_TABSTOP,246,20,42,8 + LTEXT "1",IDC_LBLMONTH,20,28,26,8 + LTEXT "1995",IDC_LBLYEAR,116,28,27,8 + LTEXT "Month",IDC_STATIC,20,7,21,8 + LTEXT "Day",IDC_STATIC,71,7,14,8 + LTEXT "Year",IDC_STATIC,117,7,16,8 + LTEXT "Hour",IDC_STATIC,172,7,16,8 + LTEXT "Minute",IDC_STATIC,210,7,22,8 + LTEXT "Second",IDC_STATIC,252,7,26,8 + LTEXT "0",IDC_LBLHOUR,173,29,19,8 + LTEXT "0",IDC_LBLMINUTE,219,29,17,8 + LTEXT "0",IDC_LBLSECOND,257,28,18,8 +END + +IDD_ROM_INFO DIALOG 0, 0, 233, 185 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | + WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU +CAPTION "Rom Info" +FONT 8, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "OK",IDOK,85,164,50,14 + EDITTEXT IDC_ROM_DATA,7,7,219,146,ES_MULTILINE | ES_READONLY + LTEXT "",IDC_WARNINGS,7,145,219,15,SS_CENTERIMAGE +END + +IDD_ABOUT DIALOGEX 0, 0, 232, 181 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | + WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU +CAPTION "APP - About Dialog" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",IDOK,90,160,50,14 + EDITTEXT IDC_DISCLAIMER,7,7,218,148,ES_MULTILINE | ES_NOHIDESEL | + ES_READONLY,WS_EX_STATICEDGE +END + +IDD_EMU_SETTINGS DIALOGEX 0, 0, 320, 113 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | + WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU +CAPTION "APP - Emulator Settings" +FONT 8, "MS Sans Serif", 0, 0, 0x0 +BEGIN + EDITTEXT IDC_FREEZE_FOLDER,91,6,163,14,ES_AUTOHSCROLL + PUSHBUTTON "&Browse...",IDC_BROWSE,264,5,48,14 + EDITTEXT IDC_AUTO_SAVE_DELAY,91,25,49,14,ES_AUTOHSCROLL | + ES_NUMBER + CONTROL "Spin2",IDC_SRAM_SPIN,"msctls_updown32",UDS_SETBUDDYINT | + UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,302,29,11, + 13 + EDITTEXT IDC_MAX_SKIP,91,44,49,14,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "Spin3",IDC_SPIN_MAX_SKIP,"msctls_updown32", + UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | + UDS_ARROWKEYS,298,48,11,13 + EDITTEXT IDC_TURBO_SKIP,91,63,49,14,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "Spin4",IDC_SPIN_TURBO_SKIP,"msctls_updown32", + UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | + UDS_ARROWKEYS,296,72,11,13 + CONTROL "Toggled Turbo Mode",IDC_TOGGLE_TURBO,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,91,81,123,12 + PUSHBUTTON "&OK",IDOK,215,92,46,14 + DEFPUSHBUTTON "&Cancel",IDCANCEL,267,92,46,14 + RTEXT "Save Folder Directory",IDC_LABEL_FREEZE,7,7,76,14, + SS_CENTERIMAGE + RTEXT "Auto-Save S-RAM",IDC_LABEL_ASRAM,19,25,64,14, + SS_CENTERIMAGE + RTEXT "Skip at most",IDC_LABEL_SMAX,38,44,45,14,SS_CENTERIMAGE + RTEXT "Skip rendering",IDC_LABEL_STURBO,32,63,51,14, + SS_CENTERIMAGE + LTEXT "seconds after last change (0 disables auto-save)", + IDC_LABEL_ASRAM_TEXT,146,25,161,14,SS_CENTERIMAGE + LTEXT "frames in auto-frame rate mode",IDC_LABEL_SMAX_TEXT,146, + 44,138,14,SS_CENTERIMAGE + LTEXT "frames in Turbo mode",IDC_LABEL_STURBO_TEXT,146,63,92, + 14,SS_CENTERIMAGE + CONTROL "Pause When Inactive",IDC_INACTIVE_PAUSE,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,91,94,100,12 +END + +IDD_OPEN_ROM DIALOGEX 0, 0, 416, 223 +STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | + WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_VISIBLE | + WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU +CAPTION "Open ROM" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + CONTROL "Tree1",IDC_ROM_DIR,"SysTreeView32",TVS_HASBUTTONS | + TVS_HASLINES | TVS_LINESATROOT | TVS_DISABLEDRAGDROP | + TVS_SHOWSELALWAYS | TVS_NOTOOLTIPS | WS_BORDER | + WS_TABSTOP,4,4,164,192,WS_EX_CLIENTEDGE + CONTROL "List1",IDC_ROMLIST,"SysListView32",LVS_REPORT | + LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | + LVS_OWNERDATA | WS_TABSTOP,171,4,239,192, + WS_EX_CLIENTEDGE + COMBOBOX IDC_MEM_TYPE,5,208,66,57,CBS_DROPDOWN | WS_TABSTOP + COMBOBOX IDC_INTERLEAVE,85,208,89,64,CBS_DROPDOWN | WS_TABSTOP + COMBOBOX IDC_VIDEO_MODE,182,208,58,61,CBS_DROPDOWN | WS_TABSTOP + COMBOBOX IDC_HEADER,246,208,73,44,CBS_DROPDOWN | WS_TABSTOP + DEFPUSHBUTTON "&Open ROM",IDOK,325,205,44,15 + PUSHBUTTON "&Cancel",IDCANCEL,370,205,44,15 + LTEXT "Interleave Mode:",IDC_STATIC,85,196,69,8,NOT WS_GROUP + LTEXT "Memory Type:",IDC_STATIC,5,196,58,11,NOT WS_GROUP + LTEXT "Video System:",IDC_STATIC,181,196,54,8,NOT WS_GROUP + LTEXT "Header:",IDC_STATIC,246,196,54,8,NOT WS_GROUP +END + +IDD_GFX_PACK DIALOG 0, 0, 219, 260 +STYLE DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | WS_POPUP | + WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME +CAPTION "Graphics Pack Configuration" +FONT 8, "MS Sans Serif" +BEGIN + EDITTEXT IDC_STAR_OCEAN,1,20,170,13,ES_AUTOHSCROLL + LTEXT "Star Ocean",IDC_STATIC,1,6,80,12 + PUSHBUTTON "Browse...",IDC_SO_BROWSE,173,18,45,14 + EDITTEXT IDC_FEOEZ,1,49,171,13,ES_AUTOHSCROLL + LTEXT "Far East of Eden Zero",IDC_STATIC,1,36,80,12 + PUSHBUTTON "Browse...",IDC_FEOEZ_BROWSE,173,47,45,14 + EDITTEXT IDC_MDH,1,78,170,13,ES_AUTOHSCROLL + LTEXT "Momotaro Densetsu Happy",IDC_STATIC,1,65,114,12 + PUSHBUTTON "Browse...",IDC_MDH_BROWSE,173,76,45,14 + EDITTEXT IDC_SPL4,1,106,170,13,ES_AUTOHSCROLL + LTEXT "Super Power League 4",IDC_STATIC,1,94,80,12 + PUSHBUTTON "Browse...",IDC_SPL4_BROWSE,173,105,45,14 + EDITTEXT IDC_SJNS,1,135,170,13,ES_AUTOHSCROLL + LTEXT "Far East of Eden Zero - Shounen Jump no Shou", + IDC_STATIC,1,122,166,12 + PUSHBUTTON "Browse...",IDC_FEOEZ_SJNS_BROWSE,173,134,45,14 + EDITTEXT IDC_SFA2,1,164,170,13,ES_AUTOHSCROLL + LTEXT "Street Fighter Alpha 2 (US)",IDC_STATIC,1,151,104,12 + PUSHBUTTON "Browse...",IDC_SFA2_BROWSE,173,164,45,14 + EDITTEXT IDC_SFA2E,1,193,170,13,ES_AUTOHSCROLL + LTEXT "Street Fighter Alpha 2 (E)",IDC_STATIC,1,180,80,12 + PUSHBUTTON "Browse...",IDC_SFA2E_BROWSE,173,193,45,14 + EDITTEXT IDC_SFZ2,1,225,170,13,ES_AUTOHSCROLL + LTEXT "Street Fighter Zero 2",IDC_STATIC,1,212,80,12 + PUSHBUTTON "Browse...",IDC_SFZ2_BROWSE,173,225,45,14 + PUSHBUTTON "OK",IDOK,133,244,40,14 + PUSHBUTTON "Cancel",IDCANCEL,178,244,40,14 +END + +IDD_NPOPTIONS DIALOGEX 0, 0, 187, 161 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | + WS_CLIPCHILDREN | WS_CAPTION +CAPTION "Netplay Options" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + GROUPBOX "Port Settings",IDC_PORTNUMBLOCK,5,5,180,25,0, + WS_EX_TRANSPARENT + RTEXT "Socket Port Number",IDC_LABEL_PORTNUM,10,15,85,10, + SS_CENTERIMAGE + EDITTEXT IDC_PORTNUMBERA,100,15,25,12,ES_RIGHT | ES_AUTOHSCROLL + GROUPBOX "Client Settings",IDC_CLIENTSETTINGSBLOCK,5,35,180,40,0, + WS_EX_TRANSPARENT + RTEXT "Ask Server to Pause when",IDC_LABEL_PAUSEINTERVAL,10,45, + 85,10,SS_CENTERIMAGE + EDITTEXT IDC_PAUSEINTERVAL,100,45,30,12,ES_RIGHT | ES_AUTOHSCROLL + CONTROL "Spin1",IDC_PAUSESPIN,"msctls_updown32",UDS_SETBUDDYINT | + UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | + UDS_NOTHOUSANDS | WS_TABSTOP,120,45,10,12 + LTEXT "frames behind",IDC_LABEL_PAUSEINTERVAL_TEXT,135,45,45, + 12,SS_CENTERIMAGE + RTEXT "Maximum Frame Rate Skip",IDC_LABEL_MAXSKIP,10,60,85,10, + SS_CENTERIMAGE + EDITTEXT IDC_MAXSKIP,100,60,30,12,ES_RIGHT | ES_AUTOHSCROLL + CONTROL "Spin2",IDC_MAXSPIN,"msctls_updown32",UDS_SETBUDDYINT | + UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | + UDS_NOTHOUSANDS | WS_TABSTOP,120,60,10,12 + GROUPBOX "Server Settings",IDC_SERVERSETTINGSBLOCK,5,80,180,60,0, + WS_EX_TRANSPARENT + CONTROL "Send ROM Image to Client on Connect",IDC_SENDROM,"Button", + BS_AUTOCHECKBOX | BS_LEFT | BS_VCENTER | WS_TABSTOP,10, + 105,173,15 + CONTROL "Act as Server",IDC_ACTASSERVER,"Button",BS_AUTOCHECKBOX | + BS_LEFT | BS_VCENTER | WS_TABSTOP,10,120,174,15 + DEFPUSHBUTTON "OK",IDOK,80,145,50,14 + PUSHBUTTON "Cancel",IDCANCEL,135,145,50,14 + CONTROL "Sync By Reset",IDC_SYNCBYRESET,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,10,90,174,15 +END + +IDD_NEWDISPLAY DIALOGEX 0, 0, 337, 205 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | + WS_CLIPCHILDREN | WS_CAPTION +CAPTION "Display Settings" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",IDOK,5,179,50,14 + PUSHBUTTON "Cancel",IDCANCEL,60,179,50,14 + PUSHBUTTON "Test Mode",IDC_TESTMODE,290,140,39,14 + PUSHBUTTON "Set Mode",IDC_SETDMODE,290,160,39,14 + CONTROL "List1",IDC_VIDMODELIST,"SysListView32",LVS_REPORT | + WS_BORDER | WS_TABSTOP,185,15,145,120 + GROUPBOX "General",IDC_STATIC,3,5,88,65,0,WS_EX_TRANSPARENT + CONTROL "Show Frame Rate",IDC_SHOWFPS,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,5,57,73,10 + CONTROL "Stretch Image",IDC_STRETCH,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,5,25,60,10 + CONTROL "Full Screen",IDC_FULLSCREEN,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,5,15,51,10 + CONTROL "Bi-Linear Mode 7",IDC_BILINEARMD7,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,100,45,69,10 + GROUPBOX "SNES Image",IDC_STATIC,95,5,75,65,0,WS_EX_TRANSPARENT + CONTROL "Render 16-bit",IDC_RENDER16BIT,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,100,15,59,10 + CONTROL "Transparency",IDC_TRANS,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,100,25,59,10 + CONTROL "Hi Res",IDC_HIRES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 100,35,37,10 + GROUPBOX "Output Image Processing",IDC_STATIC,0,77,170,30,0, + WS_EX_TRANSPARENT + COMBOBOX IDC_FILTERBOX,5,87,160,90,CBS_DROPDOWN | WS_VSCROLL | + WS_TABSTOP + CONTROL "Automatic Frame Skipping",IDC_AUTOFRAME,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,5,114,98,10 + CONTROL "Use Frame Rate Limiter",IDC_LIMITFRAMES,"Button", + BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,5,124,89,10 + GROUPBOX "Fixed Frame Skipping Rate",IDC_STATIC,0,134,170,40,0, + WS_EX_TRANSPARENT + CONTROL "Slider2",IDC_FRAMERATESKIPSLIDER,"msctls_trackbar32", + TBS_AUTOTICKS | WS_TABSTOP,7,153,160,19 + GROUPBOX "Display Settings",IDC_STATIC,180,5,155,170,0, + WS_EX_TRANSPARENT + CONTROL "Enable Double Buffering",IDC_DBLBUFFER,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,185,140,93,10 + LTEXT "Current Mode: 1024x1024x16",IDC_CURRMODE,185,155,94,8 + LTEXT "0",IDC_STATIC,14,145,11,8 + RTEXT "9",IDC_STATIC,148,145,11,8 + CONTROL "Extend Height",IDC_HEIGHT_EXTEND,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,100,56,61,10 + CONTROL "Use Video Memory",IDC_VIDEOCARD,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,5,36,75,10 + CONTROL "Maintain Aspect Ratio",IDC_ASPECT,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,5,47,81,10 +END + +IDD_CHEATER DIALOGEX 0, 0, 262, 218 +STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | + WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CLIPCHILDREN | WS_CAPTION | + WS_SYSMENU +CAPTION "Cheat Entry and Editor" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + CONTROL "List1",IDC_CHEAT_LIST,"SysListView32",LVS_REPORT | + LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | + WS_BORDER | WS_TABSTOP,5,5,200,125,WS_EX_CLIENTEDGE + PUSHBUTTON "&Add",IDC_ADD_CHEAT,215,5,40,15,WS_DISABLED + PUSHBUTTON "&Delete",IDC_DELETE_CHEAT,215,25,40,15,WS_DISABLED + PUSHBUTTON "&Update",IDC_UPDATE_CHEAT,215,45,40,15,WS_DISABLED + PUSHBUTTON "C&lear",IDC_CLEAR_CHEATS,215,65,40,15 + EDITTEXT IDC_CHEAT_CODE,86,134,118,15,ES_UPPERCASE | + ES_AUTOHSCROLL + EDITTEXT IDC_CHEAT_DESCRIPTION,85,154,119,15,ES_AUTOHSCROLL + EDITTEXT IDC_CHEAT_ADDRESS,85,175,44,15,ES_UPPERCASE | + ES_AUTOHSCROLL + EDITTEXT IDC_CHEAT_BYTE,215,175,26,15,ES_UPPERCASE | + ES_AUTOHSCROLL + PUSHBUTTON "&OK",IDOK,93,196,50,15 + PUSHBUTTON "&Cancel",IDCANCEL,151,196,50,15 + RTEXT "Enter Cheat Code:",IDC_LABEL_CHEAT_CODE,23,134,59,15, + SS_CENTERIMAGE + RTEXT "Cheat Description",IDC_LABEL_CHEAT_DESCRIPTION,19,154, + 61,15,SS_CENTERIMAGE + RTEXT "Cheat Address (hex)",IDC_LABEL_CHEAT_ADDRESS,18,175,64, + 15,SS_CENTERIMAGE + RTEXT "New Value (dec or hex)",IDC_LABEL_CHEAT_BYTE,134,175,74, + 15,SS_CENTERIMAGE +END + +IDD_NETPLAYPROGRESS DIALOG 0, 0, 186, 61 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Dialog" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "Static",IDC_STATIC,5,0,160,20 + CONTROL "Progress1",IDC_NPPROGRESS,"msctls_progress32",WS_BORDER, + 5,30,160,25 +END + +IDD_INPUTCONFIG DIALOGEX 0, 0, 300, 129 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | + WS_CLIPCHILDREN | WS_CAPTION +CAPTION "Input Config" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + COMBOBOX IDC_JPCOMBO,0,4,77,60,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + CONTROL "Enabled",IDC_JPTOGGLE,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,79,2,42,10 + CONTROL "WOG!",IDC_UP,"InputCustom",WS_TABSTOP,31,22,71,12, + WS_EX_CLIENTEDGE + CONTROL "",IDC_LEFT,"InputCustom",WS_TABSTOP,31,35,71,12, + WS_EX_CLIENTEDGE + CONTROL "",IDC_DOWN,"InputCustom",WS_TABSTOP,31,48,71,12, + WS_EX_CLIENTEDGE + CONTROL "",IDC_RIGHT,"InputCustom",WS_TABSTOP,31,61,71,12, + WS_EX_CLIENTEDGE + CONTROL "",IDC_B,"InputCustom",WS_TABSTOP,31,74,71,12, + WS_EX_CLIENTEDGE + CONTROL "",IDC_A,"InputCustom",WS_TABSTOP,31,87,71,12, + WS_EX_CLIENTEDGE + CONTROL "",IDC_Y,"InputCustom",WS_TABSTOP,31,100,71,12, + WS_EX_CLIENTEDGE + CONTROL "",IDC_X,"InputCustom",WS_TABSTOP,31,113,71,12, + WS_EX_CLIENTEDGE + CONTROL " ",IDC_START,"InputCustom",WS_TABSTOP,142,22,71,12, + WS_EX_CLIENTEDGE + CONTROL " ",IDC_SELECT,"InputCustom",WS_TABSTOP,142,35,71,12, + WS_EX_CLIENTEDGE + CONTROL " ",IDC_L,"InputCustom",WS_TABSTOP,142,48,71,12, + WS_EX_CLIENTEDGE + CONTROL " ",IDC_R,"InputCustom",WS_TABSTOP,142,61,71,12, + WS_EX_CLIENTEDGE + CONTROL " ",IDC_UPLEFT,"InputCustom",WS_DISABLED | WS_TABSTOP, + 142,74,71,12,WS_EX_CLIENTEDGE + CONTROL " ",IDC_UPRIGHT,"InputCustom",WS_DISABLED | WS_TABSTOP, + 142,87,71,12,WS_EX_CLIENTEDGE + CONTROL " ",IDC_DWNRIGHT,"InputCustom",WS_DISABLED | WS_TABSTOP, + 142,100,71,12,WS_EX_CLIENTEDGE + CONTROL " ",IDC_DWNLEFT,"InputCustom",WS_DISABLED | WS_TABSTOP, + 142,113,71,12,WS_EX_CLIENTEDGE + PUSHBUTTON "Cancel",IDCANCEL,216,111,39,14 + PUSHBUTTON "OK",IDOK,256,111,40,14 + LTEXT "Blue means the button is already mapped;\nRed means it's used by windows or Snes9x", + IDC_LABEL_BLUE,142,3,157,17 + RTEXT "UP",IDC_LABEL_UP,3,25,24,8 + RTEXT "DILDO",IDC_LABEL_RIGHT,0,64,28,8 + RTEXT "LEFT",IDC_LABEL_LEFT,3,38,24,8 + RTEXT "DOWN",IDC_LABEL_DOWN,4,51,24,8 + RTEXT "A",IDC_LABEL_A,3,89,24,8 + RTEXT "X",IDC_LABEL_X,3,116,24,8 + RTEXT "B",IDC_LABEL_B,3,77,24,8 + RTEXT "Y",IDC_LABEL_Y,3,103,24,8 + RTEXT "L",IDC_LABEL_L,115,50,24,8 + RTEXT "START",IDC_LABEL_START,115,24,24,8 + RTEXT "R",IDC_LABEL_R,115,63,24,8 + RTEXT "SELECT",IDC_LABEL_SELECT,111,37,28,8 + RTEXT "UP LEFT",IDC_LABEL_UPLEFT,109,77,30,8 + RTEXT "DN RIGHT",IDC_LABEL_DOWNRIGHT,103,103,36,8 + RTEXT "UP RIGHT",IDC_LABEL_UPRIGHT,103,90,36,8 + RTEXT "DN LEFT",IDC_LABEL_DOWNLEFT,108,116,31,8 + CONTROL 133,IDC_STATIC,"Static",SS_BITMAP,216,22,80,74 + CONTROL "Allow Left+Rt/Up+Dn",IDC_ALLOWLEFTRIGHT,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,216,99,84,10 + CONTROL "Toggle Mode",IDC_TOGL,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,79,11,58,10 +END + +IDD_CHEAT_SEARCH DIALOGEX 0, 0, 273, 271 +STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | + WS_VISIBLE | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU +CAPTION "Cheat Search" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "&OK",IDOK,161,250,50,14 + PUSHBUTTON "&Cancel",IDCANCEL,216,250,50,14 + CONTROL "List1",IDC_ADDYS,"SysListView32",LVS_REPORT | + LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_OWNERDATA | + WS_BORDER | WS_TABSTOP,7,7,201,152,WS_EX_CLIENTEDGE + PUSHBUTTON "&Search",IDC_C_SEARCH,214,7,52,16 + PUSHBUTTON "&Add Cheat",IDC_C_ADD,214,29,52,16,WS_DISABLED + PUSHBUTTON "&Reset",IDC_C_RESET,214,51,52,16 + CONTROL "1 byte",IDC_1_BYTE,"Button",BS_AUTORADIOBUTTON | + WS_GROUP | WS_TABSTOP,211,172,42,11 + CONTROL "2 bytes",IDC_2_BYTE,"Button",BS_AUTORADIOBUTTON,211,185, + 42,11 + CONTROL "3 bytes",IDC_3_BYTE,"Button",BS_AUTORADIOBUTTON,211,198, + 42,11 + CONTROL "4 bytes",IDC_4_BYTE,"Button",BS_AUTORADIOBUTTON,211,211, + 42,11 + GROUPBOX "Data Size",IDC_STATIC,204,162,54,66,0,WS_EX_TRANSPARENT + GROUPBOX "Comparison Type",IDC_STATIC,7,162,114,78,0, + WS_EX_TRANSPARENT + CONTROL "< (Less Than)",IDC_LESS_THAN,"Button", + BS_AUTORADIOBUTTON | WS_GROUP,13,170,90,11 + CONTROL "> (Greater Than)",IDC_GREATER_THAN,"Button", + BS_AUTORADIOBUTTON,13,181,90,11 + CONTROL "<= (Less Than or Equal to)",IDC_LESS_THAN_EQUAL,"Button", + BS_AUTORADIOBUTTON,13,192,106,11 + CONTROL ">= (Greater than or Equal To)",IDC_GREATER_THAN_EQUAL, + "Button",BS_AUTORADIOBUTTON,13,203,105,11 + CONTROL "= (Equal To)",IDC_EQUAL,"Button",BS_AUTORADIOBUTTON,13, + 214,90,11 + CONTROL "!= (Not Equal To)",IDC_NOT_EQUAL,"Button", + BS_AUTORADIOBUTTON,13,225,90,11 + GROUPBOX "Data Type",IDC_STATIC,125,197,75,43,0,WS_EX_TRANSPARENT + GROUPBOX "Compare To",IDC_STATIC,125,162,75,32,0, + WS_EX_TRANSPARENT + CONTROL "Previous Value",IDC_PREV,"Button",BS_AUTORADIOBUTTON | + WS_GROUP,129,171,67,10 + CONTROL "Entered Value",IDC_ENTERED,"Button",BS_AUTORADIOBUTTON, + 129,182,67,10 + CONTROL "Unsigned (>=0)",IDC_UNSIGNED,"Button", + BS_AUTORADIOBUTTON | WS_GROUP,129,207,67,10 + CONTROL "Signed (+/-)",IDC_SIGNED,"Button",BS_AUTORADIOBUTTON, + 129,217,67,10 + CONTROL "Hexadecimal",IDC_HEX,"Button",BS_AUTORADIOBUTTON,129, + 227,67,10 + EDITTEXT IDC_VALUE_ENTER,72,250,83,12,ES_UPPERCASE | + ES_AUTOHSCROLL | WS_DISABLED + RTEXT "Enter a Value:",IDC_ENTER_LABEL,7,250,54,12, + SS_CENTERIMAGE | WS_DISABLED +END + +IDD_DIALOG1 DIALOG 0, 0, 271, 68 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Dialog" +FONT 8, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "OK",IDOK,221,52,50,14 + PUSHBUTTON "Cancel",IDCANCEL,169,52,50,14 + COMBOBOX IDC_COMBO1,25,7,188,12,CBS_DROPDOWN | CBS_SORT | + WS_VSCROLL | WS_TABSTOP +END + +IDD_CHEAT_FROM_SEARCH DIALOG 0, 0, 187, 143 +STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | + WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CLIPCHILDREN | WS_CAPTION | + WS_SYSMENU +CAPTION "Cheat Details" +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "&OK",IDOK,85,123,45,13 + PUSHBUTTON "&Cancel",IDCANCEL,135,123,45,13 + EDITTEXT IDC_NC_ADDRESS,79,7,101,12,ES_AUTOHSCROLL + EDITTEXT IDC_NC_CURRVAL,79,31,101,12,ES_AUTOHSCROLL + EDITTEXT IDC_NC_PREVVAL,79,55,101,12,ES_AUTOHSCROLL + EDITTEXT IDC_NC_NEWVAL,79,79,101,12,ES_AUTOHSCROLL + EDITTEXT IDC_NC_DESC,79,103,101,12,ES_AUTOHSCROLL + RTEXT "Address",IDC_STATIC,7,7,70,12,SS_CENTERIMAGE + RTEXT "Current Value",IDC_STATIC,7,31,70,12,SS_CENTERIMAGE + RTEXT "Previous Value",IDC_STATIC,7,55,70,12,SS_CENTERIMAGE + RTEXT "New Value",IDC_STATIC,7,79,70,12,SS_CENTERIMAGE + RTEXT "Description",IDC_STATIC,7,103,70,12,SS_CENTERIMAGE +END + +IDD_OPENMOVIE DIALOGEX 0, 0, 303, 223 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Play Movie" +FONT 8, "MS Sans Serif", 0, 0, 0x0 +BEGIN + DEFPUSHBUTTON "OK",IDOK,187,200,50,14 + PUSHBUTTON "Cancel",IDCANCEL,246,200,50,14 + EDITTEXT IDC_MOVIE_PATH,7,18,230,13,ES_AUTOHSCROLL + LTEXT "Movie File",IDC_STATIC,7,7,33,8 + PUSHBUTTON "&Browse...",IDC_BROWSE_MOVIE,248,17,48,14 + LTEXT "Recording Date:",IDC_STATIC,15,55,53,8 + LTEXT "Length:",IDC_STATIC,43,64,25,8 + LTEXT "Frames:",IDC_STATIC,43,73,26,8 + LTEXT "Re-record Count:",IDC_STATIC,13,82,55,8 + LTEXT "DATE",IDC_MOVIE_DATE,71,55,81,8 + LTEXT "LENGTH",IDC_MOVIE_LENGTH,71,64,81,8 + LTEXT "FRAMES",IDC_MOVIE_FRAMES,71,73,81,8 + LTEXT "RERECORD",IDC_MOVIE_RERECORD,71,82,81,8 + LTEXT "Author Info:",IDC_STATIC,30,99,38,8 + CONTROL "Open Read-Only",IDC_READONLY,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,172,7,69,10 + LTEXT "Static",IDC_MOVIE_METADATA,70,99,226,21,WS_BORDER + GROUPBOX "Record Options",IDC_STATIC,7,133,77,61 + CONTROL "Record from now",IDC_RECORD_NOW,"Button", + BS_AUTORADIOBUTTON | WS_DISABLED | WS_GROUP | WS_TABSTOP, + 11,169,70,10 + CONTROL "Record from reset",IDC_RECORD_RESET,"Button", + BS_AUTORADIOBUTTON | WS_DISABLED | WS_TABSTOP,11,154,72, + 10 + CONTROL "Joypad 1",IDC_JOY1,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,98,142,45,10 + CONTROL "Joypad 3",IDC_JOY3,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,98,162,45,10 + CONTROL "Joypad 2",IDC_JOY2,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,98,152,45,10 + CONTROL "Joypad 4",IDC_JOY4,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,98,172,45,10 + CONTROL "Joypad 5",IDC_JOY5,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,98,183,45,10 + GROUPBOX "Record Controllers",IDC_STATIC,89,133,69,61 + CONTROL "Use WIP1 Timing",IDC_WIP1,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,172,142,71,10 + CONTROL "Volume Envelope Height Reading",IDC_ENVX,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,172,162,123,10 + CONTROL "Fake Mute desync workaround",IDC_FMUT,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,172,173,114,10 + GROUPBOX "Emulator Sync Settings",IDC_STATIC,163,133,133,61 + CONTROL "Allow Left+Right / Up+Down",IDC_ALLOWLEFTRIGHT,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,172,151,118,11 + LTEXT "Press OK to start playing the movie.\nDon't forget to let the game run for 10 seconds first!", + IDC_STATIC,10,201,164,18 + CONTROL "Sync samples with sound CPU",IDC_SYNC_TO_SOUND_CPU, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,172,183,117,10 + LTEXT " ", + IDC_LOADEDFROMMOVIE,169,124,113,8 + LTEXT "Movie's ROM: CRC32=Unknown, Name=Unknown", + IDC_MOVIEROMINFO,8,35,288,8 + LTEXT "Current ROM: CRC32=Unknown, Name=Unknown", + IDC_CURRENTROMINFO,9,43,287,9 +END + +IDD_CREATEMOVIE DIALOGEX 0, 0, 303, 150 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Record Movie" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",IDOK,187,129,50,14 + PUSHBUTTON "Cancel",IDCANCEL,246,129,50,14 + EDITTEXT IDC_MOVIE_PATH,7,18,230,13,ES_AUTOHSCROLL + LTEXT "Movie File",IDC_STATIC,7,7,33,8 + PUSHBUTTON "&Browse...",IDC_BROWSE_MOVIE,248,17,48,14 + GROUPBOX "Record Options",IDC_STATIC,7,38,77,61 + CONTROL "Record from now",IDC_RECORD_NOW,"Button", + BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,11,65,70,10 + CONTROL "Record from reset",IDC_RECORD_RESET,"Button", + BS_AUTORADIOBUTTON | WS_TABSTOP,11,52,72,10 + CONTROL "Joypad 1",IDC_JOY1,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,98,47,45,10 + CONTROL "Joypad 3",IDC_JOY3,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,98,67,45,10 + CONTROL "Joypad 2",IDC_JOY2,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,98,57,45,10 + CONTROL "Joypad 4",IDC_JOY4,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,98,77,45,10 + CONTROL "Joypad 5",IDC_JOY5,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,98,87,45,10 + GROUPBOX "Record Controllers",IDC_STATIC,89,38,69,61 + EDITTEXT IDC_MOVIE_METADATA,67,105,229,14,ES_AUTOHSCROLL + LTEXT "Author Info:",IDC_STATIC,18,108,43,8,0,WS_EX_RIGHT + CONTROL "Use WIP1 Timing",IDC_WIP1,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,172,47,71,10 + CONTROL "Volume Envelope Height Reading",IDC_ENVX,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,172,67,123,10 + GROUPBOX "Emulator Sync Settings",IDC_STATIC,163,38,133,61 + CONTROL "Allow Left+Right / Up+Down",IDC_ALLOWLEFTRIGHT,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,172,57,118,10 + CONTROL "Fake Mute desync workaround",IDC_FMUT,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,172,77,114,10 + CONTROL "Sync samples with sound CPU",IDC_SYNC_TO_SOUND_CPU, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,172,87,117,10 + CONTROL "Clear SRAM",IDC_CLEARSRAM,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,12,83,70,10 +END + +IDD_KEYCUSTOM DIALOGEX 0, 0, 351, 187 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | + WS_CLIPCHILDREN | WS_CAPTION +CAPTION "Customize Special Keys" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + PUSHBUTTON "Cancel",IDCANCEL,264,167,39,14 + PUSHBUTTON "OK",IDOK,304,167,40,14 + RTEXT "speed +",IDC_LABEL_UP,25,9,38,8 + RTEXT "frame advance",IDC_LABEL_RIGHT,13,48,49,8 + RTEXT "speed -",IDC_LABEL_LEFT,7,22,56,8 + RTEXT "pause",IDC_LABEL_DOWN,23,35,40,8 + RTEXT "skip +",IDC_LABEL_B,3,74,60,8 + RTEXT "movie frame count",IDC_LABEL_L,1,138,62,8 + RTEXT "superscope turbo",IDC_LABEL_START,1,99,62,8 + RTEXT "movie read-only",IDC_LABEL_R,4,151,59,8 + RTEXT "superscope pause",IDC_LABEL_SELECT,3,112,60,8 + RTEXT "skip -",IDC_LABEL_A,4,86,59,8 + CONTROL "",IDC_SPEEDUP,"InputCustomHot",WS_TABSTOP,67,6,98,12, + WS_EX_CLIENTEDGE + CONTROL "",IDC_SPEEDDOWN,"InputCustomHot",WS_TABSTOP,67,19,98,12, + WS_EX_CLIENTEDGE + CONTROL "",IDC_PAUSE,"InputCustomHot",WS_TABSTOP,67,32,98,12, + WS_EX_CLIENTEDGE + CONTROL "",IDC_FRAMEADVANCE,"InputCustomHot",WS_TABSTOP,67,45,98, + 12,WS_EX_CLIENTEDGE + CONTROL "",IDC_SKIPUP,"InputCustomHot",WS_TABSTOP,67,71,98,12, + WS_EX_CLIENTEDGE + CONTROL "",IDC_SKIPDOWN,"InputCustomHot",WS_TABSTOP,67,84,98,12, + WS_EX_CLIENTEDGE + CONTROL "",IDC_SCOPETURBO,"InputCustomHot",WS_TABSTOP,67,97,98, + 12,WS_EX_CLIENTEDGE + CONTROL "",IDC_SCOPEPAUSE,"InputCustomHot",WS_TABSTOP,67,110,98, + 12,WS_EX_CLIENTEDGE + CONTROL "",IDC_FRAMECOUNT,"InputCustomHot",WS_TABSTOP,67,136,98, + 12,WS_EX_CLIENTEDGE + CONTROL "",IDC_READONLY,"InputCustomHot",WS_TABSTOP,67,149,98,12, + WS_EX_CLIENTEDGE + CONTROL "",IDC_SAVE1,"InputCustomHot",WS_TABSTOP,196,6,60,12, + WS_EX_CLIENTEDGE + RTEXT "save1",IDC_LABEL_UP2,173,22,20,8 + CONTROL "",IDC_SAVE2,"InputCustomHot",WS_TABSTOP,196,19,60,12, + WS_EX_CLIENTEDGE + RTEXT "save2",IDC_LABEL_UP3,173,35,20,8 + CONTROL "",IDC_SAVE3,"InputCustomHot",WS_TABSTOP,196,32,60,12, + WS_EX_CLIENTEDGE + RTEXT "save3",IDC_LABEL_UP4,173,48,20,8 + CONTROL "",IDC_SAVE4,"InputCustomHot",WS_TABSTOP,196,45,60,12, + WS_EX_CLIENTEDGE + RTEXT "save4",IDC_LABEL_UP5,173,60,20,8 + CONTROL "",IDC_SAVE5,"InputCustomHot",WS_TABSTOP,196,58,60,12, + WS_EX_CLIENTEDGE + RTEXT "save5",IDC_LABEL_UP6,173,73,20,8 + CONTROL "",IDC_SAVE6,"InputCustomHot",WS_TABSTOP,196,71,60,12, + WS_EX_CLIENTEDGE + RTEXT "save6",IDC_LABEL_UP7,173,86,20,8 + CONTROL "",IDC_SAVE7,"InputCustomHot",WS_TABSTOP,196,84,60,12, + WS_EX_CLIENTEDGE + RTEXT "save7",IDC_LABEL_UP8,173,100,20,8 + CONTROL "",IDC_SAVE8,"InputCustomHot",WS_TABSTOP,196,97,60,12, + WS_EX_CLIENTEDGE + RTEXT "save8",IDC_LABEL_UP9,173,113,20,8 + CONTROL "",IDC_SAVE9,"InputCustomHot",WS_TABSTOP,196,110,60,12, + WS_EX_CLIENTEDGE + RTEXT "save9",IDC_LABEL_UP10,173,126,20,8 + CONTROL "",IDC_SAVE10,"InputCustomHot",WS_TABSTOP,196,123,60,12, + WS_EX_CLIENTEDGE + RTEXT "save0",IDC_LABEL_UP11,173,9,20,8 + CONTROL "",IDC_SAVE11,"InputCustomHot",WS_TABSTOP,284,6,60,12, + WS_EX_CLIENTEDGE + RTEXT "load1",IDC_LABEL_UP12,261,22,20,8 + CONTROL "",IDC_SAVE12,"InputCustomHot",WS_TABSTOP,284,19,60,12, + WS_EX_CLIENTEDGE + RTEXT "load2",IDC_LABEL_UP13,261,35,20,8 + CONTROL "",IDC_SAVE13,"InputCustomHot",WS_TABSTOP,284,32,60,12, + WS_EX_CLIENTEDGE + RTEXT "load3",IDC_LABEL_UP14,261,49,20,8 + CONTROL "",IDC_SAVE14,"InputCustomHot",WS_TABSTOP,284,45,60,12, + WS_EX_CLIENTEDGE + RTEXT "load4",IDC_LABEL_UP15,261,61,20,8 + CONTROL "",IDC_SAVE15,"InputCustomHot",WS_TABSTOP,284,58,60,12, + WS_EX_CLIENTEDGE + RTEXT "load5",IDC_LABEL_UP16,261,73,20,8 + CONTROL "",IDC_SAVE16,"InputCustomHot",WS_TABSTOP,284,71,60,12, + WS_EX_CLIENTEDGE + RTEXT "load6",IDC_LABEL_UP17,261,86,20,8 + CONTROL "",IDC_SAVE17,"InputCustomHot",WS_TABSTOP,284,84,60,12, + WS_EX_CLIENTEDGE + RTEXT "load7",IDC_LABEL_UP18,261,100,20,8 + CONTROL "",IDC_SAVE18,"InputCustomHot",WS_TABSTOP,284,97,60,12, + WS_EX_CLIENTEDGE + RTEXT "load8",IDC_LABEL_UP19,261,112,20,8 + CONTROL "",IDC_SAVE19,"InputCustomHot",WS_TABSTOP,284,110,60,12, + WS_EX_CLIENTEDGE + RTEXT "load9",IDC_LABEL_UP20,261,125,20,8 + CONTROL "",IDC_SAVE20,"InputCustomHot",WS_TABSTOP,284,123,60,12, + WS_EX_CLIENTEDGE + RTEXT "load0",IDC_LABEL_UP21,261,9,20,8 + RTEXT "fast forward",IDC_LABEL_RIGHT2,13,61,49,8 + CONTROL "",IDC_FASTFORWARD,"InputCustomHot",WS_TABSTOP,67,58,98, + 12,WS_EX_CLIENTEDGE + RTEXT "show pressed keys",IDC_LABEL_R2,2,125,61,8 + CONTROL "",IDC_SHOWPRESSED,"InputCustomHot",WS_TABSTOP,67,123,98, + 12,WS_EX_CLIENTEDGE + RTEXT "save screenshot",IDC_LABEL_R3,4,164,59,8 + CONTROL "",IDC_SCREENSHOT,"InputCustomHot",WS_TABSTOP,67,162,98, + 12,WS_EX_CLIENTEDGE + RTEXT "slot-",IDC_LABEL_UP22,173,138,20,8 + CONTROL "",IDC_SLOTMINUS,"InputCustomHot",WS_TABSTOP,196,136,60, + 12,WS_EX_CLIENTEDGE + RTEXT "slot+",IDC_LABEL_UP23,261,138,20,8 + CONTROL "",IDC_SLOTPLUS,"InputCustomHot",WS_TABSTOP,284,136,60, + 12,WS_EX_CLIENTEDGE + RTEXT "save#",IDC_LABEL_UP24,170,151,23,8 + CONTROL "",IDC_SLOTSAVE,"InputCustomHot",WS_TABSTOP,196,149,60, + 12,WS_EX_CLIENTEDGE + RTEXT "load#",IDC_LABEL_UP25,258,151,23,8 + CONTROL "",IDC_SLOTLOAD,"InputCustomHot",WS_TABSTOP,284,149,60, + 12,WS_EX_CLIENTEDGE +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog Info +// + +IDD_SOUND_OPTS DLGINIT +BEGIN + IDC_DRIVER, 0x403, 19, 0 +0x6e53, 0x7365, 0x7839, 0x4420, 0x7269, 0x6365, 0x5374, 0x756f, 0x646e, +"\000" + IDC_DRIVER, 0x403, 17, 0 +0x4d46, 0x444f, 0x4420, 0x7269, 0x6365, 0x5374, 0x756f, 0x646e, "\000" + IDC_DRIVER, 0x403, 24, 0 +0x4d46, 0x444f, 0x5720, 0x6e69, 0x6f64, 0x7377, 0x4d20, 0x6c75, 0x6974, +0x656d, 0x6964, 0x0061, + IDC_DRIVER, 0x403, 9, 0 +0x4d46, 0x444f, 0x4120, 0x4433, "\000" + IDC_BUFLEN, 0x403, 6, 0 +0x3031, 0x6d20, 0x0073, + IDC_BUFLEN, 0x403, 6, 0 +0x3032, 0x6d20, 0x0073, + IDC_BUFLEN, 0x403, 6, 0 +0x3034, 0x6d20, 0x0073, + IDC_BUFLEN, 0x403, 6, 0 +0x3038, 0x6d20, 0x0073, + IDC_BUFLEN, 0x403, 7, 0 +0x3631, 0x2030, 0x736d, "\000" + IDC_BUFLEN, 0x403, 7, 0 +0x3233, 0x2030, 0x736d, "\000" + IDC_BUFLEN, 0x403, 7, 0 +0x3436, 0x2030, 0x736d, "\000" + IDC_RATE, 0x403, 11, 0 +0x4e3c, 0x206f, 0x6f53, 0x6e75, 0x3e64, "\000" + IDC_RATE, 0x403, 8, 0 +0x2038, 0x2020, 0x484b, 0x007a, + IDC_RATE, 0x403, 7, 0 +0x3131, 0x4b20, 0x7a48, "\000" + IDC_RATE, 0x403, 7, 0 +0x3631, 0x4b20, 0x7a48, "\000" + IDC_RATE, 0x403, 7, 0 +0x3232, 0x4b20, 0x7a48, "\000" + IDC_RATE, 0x403, 7, 0 +0x3033, 0x4b20, 0x7a48, "\000" + IDC_RATE, 0x403, 7, 0 +0x3533, 0x4b20, 0x7a48, "\000" + IDC_RATE, 0x403, 7, 0 +0x3434, 0x4b20, 0x7a48, "\000" + IDC_RATE, 0x403, 7, 0 +0x3834, 0x4b20, 0x7a48, "\000" + IDC_MIX, 0x403, 6, 0 +0x3031, 0x6d20, 0x0073, + IDC_MIX, 0x403, 6, 0 +0x3032, 0x6d20, 0x0073, + IDC_MIX, 0x403, 6, 0 +0x3033, 0x6d20, 0x0073, + IDC_MIX, 0x403, 6, 0 +0x3034, 0x6d20, 0x0073, + IDC_MIX, 0x403, 6, 0 +0x3035, 0x6d20, 0x0073, + IDC_MIX, 0x403, 6, 0 +0x3036, 0x6d20, 0x0073, + IDC_MIX, 0x403, 6, 0 +0x3037, 0x6d20, 0x0073, + IDC_MIX, 0x403, 6, 0 +0x3038, 0x6d20, 0x0073, + IDC_MIX, 0x403, 6, 0 +0x3039, 0x6d20, 0x0073, + IDC_MIX, 0x403, 7, 0 +0x3031, 0x2030, 0x736d, "\000" + IDC_MIX, 0x403, 7, 0 +0x3131, 0x2030, 0x736d, "\000" + IDC_MIX, 0x403, 7, 0 +0x3231, 0x2030, 0x736d, "\000" + IDC_MIX, 0x403, 7, 0 +0x3331, 0x2030, 0x736d, "\000" + IDC_MIX, 0x403, 7, 0 +0x3431, 0x2030, 0x736d, "\000" + IDC_MIX, 0x403, 7, 0 +0x3531, 0x2030, 0x736d, "\000" + IDC_SKIP_TYPE, 0x403, 15, 0 +0x6b53, 0x7069, 0x6d20, 0x7465, 0x6f68, 0x2064, 0x3123, "\000" + IDC_SKIP_TYPE, 0x403, 15, 0 +0x6b53, 0x7069, 0x6d20, 0x7465, 0x6f68, 0x2064, 0x3223, "\000" + IDC_SKIP_TYPE, 0x403, 15, 0 +0x6b53, 0x7069, 0x6d20, 0x7465, 0x6f68, 0x2064, 0x3323, "\000" + IDC_SKIP_TYPE, 0x403, 15, 0 +0x6b53, 0x7069, 0x6d20, 0x7465, 0x6f68, 0x2064, 0x3423, "\000" + IDC_SKIP_TYPE, 0x403, 15, 0 +0x6b53, 0x7069, 0x6d20, 0x7465, 0x6f68, 0x2064, 0x3523, "\000" + 0 +END + +IDD_INPUTCONFIG DLGINIT +BEGIN + IDC_JPCOMBO, 0x403, 10, 0 +0x6f4a, 0x7079, 0x6461, 0x2320, 0x0031, + IDC_JPCOMBO, 0x403, 10, 0 +0x6f4a, 0x7079, 0x6461, 0x2320, 0x0032, + IDC_JPCOMBO, 0x403, 10, 0 +0x6f4a, 0x7079, 0x6461, 0x2320, 0x0033, + IDC_JPCOMBO, 0x403, 10, 0 +0x6f4a, 0x7079, 0x6461, 0x2320, 0x0034, + IDC_JPCOMBO, 0x403, 10, 0 +0x6f4a, 0x7079, 0x6461, 0x2320, 0x0035, + 0 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_SOUND_OPTS, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 345 + TOPMARGIN, 7 + BOTTOMMARGIN, 194 + END + + IDD_SPC7110_CACHE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 178 + TOPMARGIN, 7 + BOTTOMMARGIN, 85 + END + + IDD_ROM_INFO, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 226 + TOPMARGIN, 7 + BOTTOMMARGIN, 178 + END + + IDD_ABOUT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 225 + TOPMARGIN, 7 + BOTTOMMARGIN, 174 + END + + IDD_EMU_SETTINGS, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 313 + BOTTOMMARGIN, 106 + END + + IDD_OPEN_ROM, DIALOG + BEGIN + LEFTMARGIN, 3 + RIGHTMARGIN, 410 + TOPMARGIN, 3 + BOTTOMMARGIN, 221 + END + + IDD_GFX_PACK, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 212 + TOPMARGIN, 7 + BOTTOMMARGIN, 253 + END + + IDD_NEWDISPLAY, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 330 + TOPMARGIN, 7 + BOTTOMMARGIN, 198 + END + + IDD_CHEATER, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 255 + TOPMARGIN, 7 + BOTTOMMARGIN, 211 + END + + IDD_NETPLAYPROGRESS, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 179 + TOPMARGIN, 7 + BOTTOMMARGIN, 54 + END + + IDD_INPUTCONFIG, DIALOG + BEGIN + RIGHTMARGIN, 299 + VERTGUIDE, 77 + VERTGUIDE, 92 + BOTTOMMARGIN, 128 + HORZGUIDE, 122 + END + + IDD_CHEAT_SEARCH, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 266 + TOPMARGIN, 7 + BOTTOMMARGIN, 264 + END + + IDD_DIALOG1, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 264 + TOPMARGIN, 7 + BOTTOMMARGIN, 61 + END + + IDD_CHEAT_FROM_SEARCH, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 180 + TOPMARGIN, 7 + BOTTOMMARGIN, 136 + END + + IDD_OPENMOVIE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 296 + TOPMARGIN, 7 + BOTTOMMARGIN, 219 + HORZGUIDE, 31 + HORZGUIDE, 55 + HORZGUIDE, 120 + HORZGUIDE, 133 + HORZGUIDE, 191 + END + + IDD_CREATEMOVIE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 296 + TOPMARGIN, 7 + BOTTOMMARGIN, 143 + HORZGUIDE, 31 + HORZGUIDE, 38 + HORZGUIDE, 99 + END + + IDD_KEYCUSTOM, DIALOG + BEGIN + RIGHTMARGIN, 348 + VERTGUIDE, 72 + VERTGUIDE, 92 + BOTTOMMARGIN, 181 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_ICON1 ICON "icon1.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +IDB_OPENFOLDER BITMAP "openfold.bmp" +IDB_CLOSEDFOLDER BITMAP "closedfold.bmp" +IDB_CDDRIVE BITMAP "cdd.bmp" +IDB_NETDRIVE BITMAP "nd.bmp" +IDB_HARDDRIVE BITMAP "hd.bmp" +IDB_PAD BITMAP "pad.bmp" + +///////////////////////////////////////////////////////////////////////////// +// +// RT_MANIFEST +// + +IDR_RT_MANIFEST2 RT_MANIFEST "rt_manif.bin" +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// Dutch (Netherlands) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NLD) +#ifdef _WIN32 +LANGUAGE LANG_DUTCH, SUBLANG_DUTCH +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,4,0,0 + PRODUCTVERSION 1,4,0,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "080904b0" + BEGIN + VALUE "CompanyName", "Gary Henderson" + VALUE "FileDescription", "Snes9XW" + VALUE "FileVersion", "1.40" + VALUE "InternalName", "Snes9X" + VALUE "LegalCopyright", "Copyright © 1996-2001" + VALUE "OriginalFilename", "Snes9XW.exe" + VALUE "ProductName", "Snes9X SNES Emulator" + VALUE "ProductVersion", "1.40" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x809, 1200 + END +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "#include ""language.h""\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +IDR_MENU_NL MENU +BEGIN + POPUP "&Bestand" + BEGIN + MENUITEM "&Openen", ID_FILE_OPEN + MENUITEM SEPARATOR + MENUITEM "&Sluiten", ID_FILE_EXIT + END + POPUP "&Opties" + BEGIN + MENUITEM "Joypad configuratie", ID_OPTIONS_JOYPAD + END + POPUP "&Geluid" + BEGIN + POPUP "&8-Bit" + BEGIN + MENUITEM "8000 Hz, mono", ID_SOUND_8BIT8000HZMONO + MENUITEM "8000 Hz, stereo", ID_SOUND_8BIT8000HZSTEREO + + MENUITEM "11025 Hz, mono", ID_SOUND_8BIT11025HZMONO + MENUITEM "11025 Hz, stereo", ID_SOUND_8BIT11025HZSTEREO + + MENUITEM "22050 Hz, mono", ID_SOUND_8BIT22050HZMONO + MENUITEM "22050 Hz, stereo", ID_SOUND_8BIT22050HZSTEREO + + MENUITEM "44100 Hz, mono", ID_SOUND_8BIT44100HZMONO + MENUITEM "44100 Hz, stereo", ID_SOUND_8BIT44100HZSTEREO + + END + POPUP "&16-Bit" + BEGIN + MENUITEM "8000 Hz, mono", ID_SOUND_16BIT8000HZMONO + MENUITEM "8000 Hz, stereo", ID_SOUND_16BIT8000HZSTEREO + + MENUITEM "11025 Hz, mono", ID_SOUND_16BIT11025HZMONO + + MENUITEM "11025 Hz, stereo", ID_SOUND_16BIT11025HZSTEREO + + MENUITEM "22050 Hz, mono", ID_SOUND_16BIT22050HZMONO + + MENUITEM "22050 Hz, stereo", ID_SOUND_16BIT22050HZSTEREO + + MENUITEM "44100 Hz, mono", ID_SOUND_16BIT44100HZMONO + + MENUITEM "44100 Hz, stereo", ID_SOUND_16BIT44100HZSTEREO + + END + MENUITEM SEPARATOR + MENUITEM "&Geen Geluid", ID_SOUND_NOSOUND + END + POPUP "&Venster" + BEGIN + POPUP "&Taal" + BEGIN + MENUITEM "&English", ID_LANGUAGE_ENGLISH + MENUITEM "&Nederlands", ID_LANGUAGE_NEDERLANDS + , CHECKED + END + MENUITEM SEPARATOR + MENUITEM "&Verberg menubalk\tESC", ID_WINDOW_HIDEMENUBAR + END +END + +#endif // Dutch (Netherlands) resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// English (U.K.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_NETCONNECT DIALOG 0, 0, 227, 61 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | + WS_CLIPCHILDREN | WS_CAPTION +CAPTION "Connect to Server" +FONT 8, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "&OK",IDOK,120,45,50,14 + PUSHBUTTON "Canccel",IDCANCEL,175,45,50,14 + RTEXT "Server Address",IDC_LABEL_SERVERADDY,5,5,50,14, + SS_CENTERIMAGE + PUSHBUTTON "Clear History",IDC_CLEARHISTORY,175,5,50,14 + RTEXT "Port Number",IDC_LABEL_PORTNUM,5,25,50,14, + SS_CENTERIMAGE + EDITTEXT IDC_PORTNUMBER,60,25,25,14,ES_AUTOHSCROLL + COMBOBOX IDC_HOSTNAME,60,5,110,40,CBS_DROPDOWN | WS_VSCROLL | + WS_TABSTOP +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +IDR_MENU_US MENU +BEGIN + POPUP "&File" + BEGIN + MENUITEM "L&oad Game...\tCtrl+O", ID_FILE_OPEN + POPUP "Recent &Games" + BEGIN + MENUITEM "Dummy", ID_RECENT_DUMMY + , INACTIVE + END + POPUP "&Save Game Position" + BEGIN + MENUITEM "Slot #1\tShift+F1", ID_FILE_SAVE1 + MENUITEM "Slot #2\tShift+F2", ID_FILE_SAVE2, GRAYED + MENUITEM "Slot #3\tShift+F3", ID_FILE_SAVE3, GRAYED + MENUITEM "Slot #4\tShift+F4", ID_FILE_SAVE4, GRAYED + MENUITEM "Slot #5\tShift+F5", ID_FILE_SAVE5, GRAYED + MENUITEM "Slot #6\tShift+F6", ID_FILE_SAVE6, GRAYED + MENUITEM "Slot #7\tShift+F7", ID_FILE_SAVE7, GRAYED + MENUITEM "Slot #8\tShift+F8", ID_FILE_SAVE8, GRAYED + MENUITEM "Slot #9\tShift+F9", ID_FILE_SAVE9, GRAYED + END + POPUP "&Load Game Position" + BEGIN + MENUITEM "Slot #1\tF1", ID_FILE_LOAD1 + MENUITEM "Slot #2\tF2", ID_FILE_LOAD2, GRAYED + MENUITEM "Slot #3\tF3", ID_FILE_LOAD3, GRAYED + MENUITEM "Slot #4\tF4", ID_FILE_LOAD4, GRAYED + MENUITEM "Slot #5\tF5", ID_FILE_LOAD5, GRAYED + MENUITEM "Slot #6\tF6", ID_FILE_LOAD6, GRAYED + MENUITEM "Slot #7\tF7", ID_FILE_LOAD7, GRAYED + MENUITEM "Slot #8\tF8", ID_FILE_LOAD8, GRAYED + MENUITEM "Slot #9\tF9", ID_FILE_LOAD9, GRAYED + END + MENUITEM SEPARATOR + MENUITEM "S&ave SPC Data", ID_FILE_SAVE_SPC_DATA + , GRAYED + MENUITEM "Sa&ve S-RAM Data", ID_FILE_SAVE_SRAM_DATA + , GRAYED + MENUITEM "Save SPC&7110 log", IDM_LOG_7110, GRAYED + MENUITEM "ROM Information...", IDM_ROM_INFO, GRAYED + MENUITEM SEPARATOR + MENUITEM "Movie Play...", ID_FILE_MOVIE_PLAY, GRAYED + MENUITEM "Movie Record...", ID_FILE_MOVIE_RECORD, GRAYED + MENUITEM "Movie Stop", ID_FILE_MOVIE_STOP, GRAYED + MENUITEM SEPARATOR + MENUITEM "Record AVI...", ID_FILE_WRITE_AVI, GRAYED + MENUITEM "Stop AVI Recording", ID_FILE_STOP_AVI, GRAYED + MENUITEM SEPARATOR + MENUITEM "&Reset Game", ID_FILE_RESET, GRAYED + MENUITEM "&Pause\tPause", ID_FILE_PAUSE, GRAYED + MENUITEM "E&xit\tAlt+F4", ID_FILE_EXIT + END + POPUP "&Options" + BEGIN + MENUITEM "&Display Configuration...\tAlt+F5", ID_OPTIONS_DISPLAY + MENUITEM "&Settings...\tAlt+F8", ID_OPTIONS_SETTINGS + MENUITEM "SPC7110 Cache Settings...", IDM_7110_CACHE + MENUITEM "GFX Pack Configuration...", IDM_GFX_PACKS + END + POPUP "&Input" + BEGIN + MENUITEM "&Joypad Configuration...\tAlt+F7", 40022 + MENUITEM "Customize Hotkeys...", ID_OPTIONS_KEYCUSTOM + MENUITEM "Enable Multitap 5", IDM_ENABLE_MULTITAP + MENUITEM "Enable Mouse", IDM_MOUSE_TOGGLE + MENUITEM "Enable Superscope", IDM_SCOPE_TOGGLE + MENUITEM "Enable Justifiers", IDM_JUSTIFIER + END + POPUP "&Sound" + BEGIN + POPUP "&Playback Rate" + BEGIN + MENUITEM "&No Sound\tAlt+0", ID_SOUND_NOSOUND + MENUITEM "8KHz\tAlt+1", ID_SOUND_8000HZ, GRAYED + MENUITEM "11KHz\tAlt+2", ID_SOUND_11025HZ, GRAYED + MENUITEM "16KHz\tAlt+3", ID_SOUND_16000HZ, GRAYED + MENUITEM "22KHz\tAlt+4", ID_SOUND_22050HZ, GRAYED + MENUITEM "30KHz\tAlt+5", ID_SOUND_30000HZ, GRAYED + MENUITEM "32KHz\tAlt+6", ID_SOUND_32000HZ, GRAYED + MENUITEM "35KHz\tAlt+7", ID_SOUND_35000HZ, GRAYED + MENUITEM "44KHz\tAlt+8", ID_SOUND_44100HZ, GRAYED + MENUITEM "48KHz\tAlt+9", ID_SOUND_48000HZ, GRAYED + END + POPUP "&Buffer Length" + BEGIN + MENUITEM "&10ms", ID_SOUND_25MS + MENUITEM "&20ms", ID_SOUND_50MS, GRAYED + MENUITEM "&40ms", ID_SOUND_100MS, GRAYED + MENUITEM "&80ms", ID_SOUND_200MS, GRAYED + MENUITEM "1&60ms", ID_SOUND_500MS, GRAYED + MENUITEM "&320ms", ID_SOUND_1S, GRAYED + MENUITEM "64&0ms", ID_SOUND_2S, GRAYED + END + MENUITEM "&16-Bit Sound", ID_SOUND_16BIT + MENUITEM "&Stereo", ID_SOUND_STEREO + MENUITEM "&Reverse Stereo\tAlt+R", ID_SOUND_REVERSE_STEREO + MENUITEM SEPARATOR + MENUITEM "Catch-up Sample Generation", IDM_CATCH_UP_SOUND + MENUITEM "&Interpolated\tAlt+[", ID_SOUND_INTERPOLATED + MENUITEM "S&ync Sound\tAlt+]", ID_SOUND_SYNC + MENUITEM "&Settings...\tAlt+T", ID_SOUND_OPTIONS + END + POPUP "&Window" + BEGIN + POPUP "&Language" + BEGIN + MENUITEM "&English", ID_LANGUAGE_ENGLISH + , CHECKED + MENUITEM "&Nederlands", ID_LANGUAGE_NEDERLANDS + , GRAYED + END + MENUITEM SEPARATOR + MENUITEM "&Hide menubar\tESC", ID_WINDOW_HIDEMENUBAR + MENUITEM "&Full Screen\tAlt+Return", ID_WINDOW_FULLSCREEN + MENUITEM "&Stretch Image\tAlt+Del", ID_WINDOW_STRETCH + END + POPUP "&Cheat" + BEGIN + MENUITEM "&Game Genie, Pro-Action Replay Codes\tAlt+E", + ID_CHEAT_ENTER + MENUITEM "&Search for New Cheats\tAlt+A", ID_CHEAT_SEARCH, GRAYED + MENUITEM "&Apply Cheats", ID_CHEAT_APPLY + , CHECKED, GRAYED + MENUITEM "Set SPC7110 RTC", IDM_7110_RTC, GRAYED + END + POPUP "&Netplay", GRAYED + BEGIN + MENUITEM "&Connect to Server...", ID_NETPLAY_CONNECT + MENUITEM "&Disconnect from Server", ID_NETPLAY_DISCONNECT + MENUITEM SEPARATOR + MENUITEM "&Act as Server", ID_NETPLAY_SERVER + MENUITEM "&Re-sync all Clients Using Freeze File Now", + ID_NETPLAY_SYNC + MENUITEM "&Send ROM Image to Clients Now", ID_NETPLAY_ROM + MENUITEM "S&end ROM Image to Clients", ID_NETPLAY_SEND_ROM_ON_CONNECT + + MENUITEM "S&ync Using Reset Game", ID_NETPLAY_SYNC_BY_RESET + , CHECKED + MENUITEM SEPARATOR + MENUITEM "&Options...", ID_NETPLAY_OPTIONS + END + POPUP "&Help" + BEGIN + MENUITEM "&About...", ID_HELP_ABOUT + END +END + +#endif // English (U.K.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff -NaHudr snes9x-1.43-src/snes9xw.dsp snes9x-improvement7-src-dehacked/snes9xw.dsp --- snes9x-1.43-src/snes9xw.dsp 2004-12-31 00:15:55.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9xw.dsp 2005-03-20 23:46:36.000000000 +0200 @@ -44,7 +44,7 @@ # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /G6 /Zp4 /MT /W3 /GX /O2 /Ob2 /I "unzip" /I "H:\glide2x" /I "e:\zlib" /I "snes9x\unzip" /I "H:\FMOD\api\inc" /D "ZSNES_C4" /D "SPC700_C" /D "JMA_SUPPORT" /D "SDD1_DECOMP" /D "CORRECT_VRAM_READS" /D "JP_FIX" /D "SPC700_SHUTDOWN" /D "CPU_SHUTDOWN" /D "ZLIB" /D "VAR_CYCLES" /D "UNZIP_SUPPORT" /D "ZSNES_FX" /D "EXECUTE_SUPERFX_PER_LINE" /D "__WIN32__" /D "__MSC__" /D "USE_OPENGL" /D "NDEBUG" /D "FMOD_SUPPORT" /D "OLD_COLOUR_BLENDING" /FR /FD /c +# ADD CPP /nologo /G6 /Zp4 /MT /W3 /O2 /Ob2 /I "unzip" /I "H:\glide2x" /I "e:\zlib" /I "snes9x\unzip" /I "H:\FMOD\api\inc" /D "ZSNES_C4" /D "SPC700_C" /D "USE_GLIDE" /D "SDD1_DECOMP" /D "CORRECT_VRAM_READS" /D "JP_FIX" /D "HAVE_LIBPNG" /D "SPC700_SHUTDOWN" /D "CPU_SHUTDOWN" /D "ZLIB" /D "VAR_CYCLES" /D "UNZIP_SUPPORT" /D "ZSNES_FX" /D "EXECUTE_SUPERFX_PER_LINE" /D "__WIN32__" /D "__MSC__" /D "USE_OPENGL" /D "NDEBUG" /D "NETPLAY_SUPPORT" /D "FMOD_SUPPORT" /D "OLD_COLOUR_BLENDING" /FR /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL" # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL" # ADD BASE RSC /l 0x413 /d "NDEBUG" @@ -54,7 +54,7 @@ # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 -# ADD LINK32 zlibmt.lib comctl32.lib comdlg32.lib shell32.lib ole32.lib winmm.lib opengl32.lib glu32.lib kernel32.lib user32.lib gdi32.lib wsock32.lib advapi32.lib ddraw.lib dsound.lib dxguid.lib delayimp.lib vfw32.lib fmodvc.lib /nologo /subsystem:windows /incremental:yes /machine:I386 /out:"Release/snes9x.exe" /libpath:"H:\FMOD\api\lib" /libpath:"H:\glide2x\lib" /delayload:fmod.dll +# ADD LINK32 zlibmt.lib libpngmt.lib glide2x.lib comctl32.lib comdlg32.lib shell32.lib ole32.lib winmm.lib opengl32.lib glu32.lib kernel32.lib user32.lib gdi32.lib wsock32.lib advapi32.lib ddraw.lib dsound.lib dxguid.lib delayimp.lib fmodvc.lib vfw32.lib /nologo /subsystem:windows /incremental:yes /machine:I386 /out:"Release/snes9x.exe" /libpath:"H:\FMOD\api\lib" /libpath:"H:\glide2x\lib" /delayload:fmod.dll # SUBTRACT LINK32 /profile /debug !ELSEIF "$(CFG)" == "Snes9X - Win32 Debug" @@ -72,7 +72,7 @@ # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /G6 /Zp4 /MT /W3 /GX /O2 /Ob2 /I "unzip" /I "H:\glide2x" /I "e:\zlib" /I "snes9x\unzip" /I "H:\FMOD\api\inc" /D "SPC700_SHUTDOWN" /D "CPU_SHUTDOWN" /D "ZLIB" /D "VAR_CYCLES" /D "SPC700_C" /D "UNZIP_SUPPORT" /D "ZSNES_C4" /D "ZSNES_FX" /D "EXECUTE_SUPERFX_PER_LINE" /D "__WIN32__" /D "__MSC__" /D "USE_GLIDE" /D "USE_OPENGL" /D "NDEBUG" /D "NETPLAY_SUPPORT" /D "FMOD_SUPPORT" /D "OLD_COLOUR_BLENDING" /FR /YX /FD /c -# ADD CPP /nologo /G6 /Zp4 /MTd /W3 /GX /Zi /Od /I "unzip" /I "H:\glide2x" /I "e:\zlib" /I "snes9x\unzip" /I "H:\FMOD\api\inc" /D "SPC700_C" /D "HAVE_LIBPNG" /D "JMA_SUPPORT" /D "SDD1_DECOMP" /D "CORRECT_VRAM_READS" /D "JP_FIX" /D "SPC700_SHUTDOWN" /D "CPU_SHUTDOWN" /D "ZLIB" /D "VAR_CYCLES" /D "UNZIP_SUPPORT" /D "ZSNES_FX" /D "EXECUTE_SUPERFX_PER_LINE" /D "__WIN32__" /D "__MSC__" /D "USE_OPENGL" /D "NDEBUG" /D "FMOD_SUPPORT" /D "OLD_COLOUR_BLENDING" /FR /YX /FD /c +# ADD CPP /nologo /G6 /Zp4 /MTd /W3 /GX /Zi /Od /I "unzip" /I "H:\glide2x" /I "e:\zlib" /I "snes9x\unzip" /I "H:\FMOD\api\inc" /D "SPC700_C" /D "USE_GLIDE" /D "SDD1_DECOMP" /D "CORRECT_VRAM_READS" /D "JP_FIX" /D "HAVE_LIBPNG" /D "SPC700_SHUTDOWN" /D "CPU_SHUTDOWN" /D "ZLIB" /D "VAR_CYCLES" /D "UNZIP_SUPPORT" /D "ZSNES_FX" /D "EXECUTE_SUPERFX_PER_LINE" /D "__WIN32__" /D "__MSC__" /D "USE_OPENGL" /D "NDEBUG" /D "NETPLAY_SUPPORT" /D "FMOD_SUPPORT" /D "OLD_COLOUR_BLENDING" /FR /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL" # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL" # ADD BASE RSC /l 0x413 /d "NDEBUG" @@ -82,7 +82,7 @@ # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 opengl32.lib glu32.lib kernel32.lib user32.lib gdi32.lib wsock32.lib advapi32.lib winmm.lib ddraw.lib dsound.lib dxguid.lib snes9xw.lib glide2x.lib delayimp.lib fmodvc.lib /nologo /subsystem:windows /profile /machine:I386 /libpath:"H:\FMOD\api\lib" /libpath:"H:\glide2x\lib" /delayload:fmod.dll -# ADD LINK32 libpngmtd.lib comctl32.lib comdlg32.lib shell32.lib ole32.lib winmm.lib opengl32.lib glu32.lib kernel32.lib user32.lib gdi32.lib wsock32.lib advapi32.lib ddraw.lib dsound.lib dxguid.lib delayimp.lib fmodvc.lib vfw32.lib /nologo /subsystem:windows /incremental:yes /debug /machine:I386 /out:"Snes9X___Win32_Debug/Snes9x.exe" /libpath:"H:\FMOD\api\lib" /libpath:"H:\glide2x\lib" /delayload:fmod.dll +# ADD LINK32 libpngmtd.lib glide2x.lib comctl32.lib comdlg32.lib shell32.lib ole32.lib winmm.lib opengl32.lib glu32.lib kernel32.lib user32.lib gdi32.lib wsock32.lib advapi32.lib ddraw.lib dsound.lib dxguid.lib delayimp.lib fmodvc.lib vfw32.lib /nologo /subsystem:windows /incremental:yes /debug /machine:I386 /out:"Snes9X___Win32_Debug/Snes9x.exe" /libpath:"H:\FMOD\api\lib" /libpath:"H:\glide2x\lib" /delayload:fmod.dll # SUBTRACT LINK32 /profile !ELSEIF "$(CFG)" == "Snes9X - Win32 C core" @@ -100,7 +100,7 @@ # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /Zp4 /MTd /W3 /GX /ZI /Od /I "unzip" /I "H:\glide2x" /I "e:\zlib" /I "snes9x\unzip" /I "H:\FMOD\api\inc" /D "SPC700_SHUTDOWN" /D "CPU_SHUTDOWN" /D "ZLIB" /D "VAR_CYCLES" /D "SPC700_C" /D "UNZIP_SUPPORT" /D "ZSNES_C4" /D "ZSNES_FX" /D "EXECUTE_SUPERFX_PER_LINE" /D "__WIN32__" /D "__MSC__" /D "USE_GLIDE" /D "USE_OPENGL" /D "NDEBUG" /D "NETPLAY_SUPPORT" /D "FMOD_SUPPORT" /D "OLD_COLOUR_BLENDING" /FR /YX /FD /c -# ADD CPP /nologo /Zp4 /MT /W3 /GX /Zi /O2 /I "unzip" /I "H:\glide2x" /I "e:\zlib" /I "snes9x\unzip" /I "H:\FMOD\api\inc" /D "HAVE_LIBPNG" /D "JMA_SUPPORT" /D "SDD1_DECOMP" /D "CORRECT_VRAM_READS" /D "JP_FIX" /D "SPC700_SHUTDOWN" /D "CPU_SHUTDOWN" /D "ZLIB" /D "VAR_CYCLES" /D "UNZIP_SUPPORT" /D "ZSNES_FX" /D "EXECUTE_SUPERFX_PER_LINE" /D "__WIN32__" /D "__MSC__" /D "USE_OPENGL" /D "NDEBUG" /D "FMOD_SUPPORT" /D "OLD_COLOUR_BLENDING" /YX /FD /c +# ADD CPP /nologo /Zp4 /MT /W3 /Zi /O2 /I "unzip" /I "H:\glide2x" /I "e:\zlib" /I "snes9x\unzip" /I "H:\FMOD\api\inc" /D "SDD1_DECOMP" /D "CORRECT_VRAM_READS" /D "JP_FIX" /D "HAVE_LIBPNG" /D "SPC700_SHUTDOWN" /D "CPU_SHUTDOWN" /D "ZLIB" /D "VAR_CYCLES" /D "UNZIP_SUPPORT" /D "ZSNES_FX" /D "EXECUTE_SUPERFX_PER_LINE" /D "__WIN32__" /D "__MSC__" /D "USE_OPENGL" /D "NDEBUG" /D "NETPLAY_SUPPORT" /D "FMOD_SUPPORT" /D "OLD_COLOUR_BLENDING" /YX /FD /c # SUBTRACT CPP /Fr # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL" # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL" @@ -143,14 +143,6 @@ # End Source File # Begin Source File -SOURCE=.\InputCustom.cpp -# End Source File -# Begin Source File - -SOURCE=.\InputCustom.h -# End Source File -# Begin Source File - SOURCE=.\language.h # End Source File # Begin Source File @@ -187,20 +179,12 @@ SOURCE=.\wsnes9x.cpp # End Source File -# Begin Source File - -SOURCE=.\wsnes9x.h -# End Source File # End Group # Begin Group "Emu" # PROP Default_Filter "" # Begin Source File -SOURCE=.\0snes9X.rc -# End Source File -# Begin Source File - SOURCE=.\Snes9x\2xsai.cpp # End Source File # Begin Source File @@ -998,6 +982,10 @@ # End Source File # Begin Source File +SOURCE=.\Snes9X.rc +# End Source File +# Begin Source File + SOURCE=.\Snes9X\soundux.cpp !IF "$(CFG)" == "Snes9X - Win32 Release" @@ -1557,118 +1545,6 @@ # End Source File # End Group -# Begin Group "JMA" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\snes9x\jma\7z.h -# End Source File -# Begin Source File - -SOURCE=.\snes9x\jma\7zlzma.cpp -# End Source File -# Begin Source File - -SOURCE=.\snes9x\jma\aribitcd.h -# End Source File -# Begin Source File - -SOURCE=.\snes9x\jma\ariconst.h -# End Source File -# Begin Source File - -SOURCE=.\snes9x\jma\ariprice.h -# End Source File -# Begin Source File - -SOURCE=.\snes9x\jma\btreecd.h -# End Source File -# Begin Source File - -SOURCE=.\snes9x\jma\crc32.cpp -# End Source File -# Begin Source File - -SOURCE=.\snes9x\jma\crc32.h -# End Source File -# Begin Source File - -SOURCE=.\snes9x\jma\iiostrm.cpp -# End Source File -# Begin Source File - -SOURCE=.\snes9x\jma\iiostrm.h -# End Source File -# Begin Source File - -SOURCE=.\snes9x\jma\inbyte.cpp -# End Source File -# Begin Source File - -SOURCE=.\snes9x\jma\inbyte.h -# End Source File -# Begin Source File - -SOURCE=.\snes9x\jma\jma.cpp -# End Source File -# Begin Source File - -SOURCE=.\snes9x\jma\jma.h -# End Source File -# Begin Source File - -SOURCE=.\snes9x\jma\lencoder.h -# End Source File -# Begin Source File - -SOURCE=.\snes9x\jma\litcoder.h -# End Source File -# Begin Source File - -SOURCE=.\snes9x\jma\lzma.cpp -# End Source File -# Begin Source File - -SOURCE=.\snes9x\jma\lzma.h -# End Source File -# Begin Source File - -SOURCE=.\snes9x\jma\lzmadec.cpp -# End Source File -# Begin Source File - -SOURCE=.\snes9x\jma\lzmadec.h -# End Source File -# Begin Source File - -SOURCE=.\snes9x\jma\portable.h -# End Source File -# Begin Source File - -SOURCE=.\snes9x\jma\rcdefs.h -# End Source File -# Begin Source File - -SOURCE=.\snes9x\jma\rngcoder.h -# End Source File -# Begin Source File - -SOURCE=".\snes9x\jma\s9x-jma.cpp" -# End Source File -# Begin Source File - -SOURCE=".\snes9x\jma\s9x-jma.h" -# End Source File -# Begin Source File - -SOURCE=.\snes9x\jma\winout.cpp -# End Source File -# Begin Source File - -SOURCE=.\snes9x\jma\winout.h -# End Source File -# End Group # Begin Source File SOURCE=.\Auxmath.cpp diff -NaHudr snes9x-1.43-src/snes9xw.sln snes9x-improvement7-src-dehacked/snes9xw.sln --- snes9x-1.43-src/snes9xw.sln 1970-01-01 02:00:00.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9xw.sln 2005-03-20 23:46:37.000000000 +0200 @@ -0,0 +1,32 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Snes9X", "snes9xw.vcproj", "{B86059D8-C9A6-46BE-8FBA-3170C54F1DFD}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SourceCodeControl) = preSolution + SccNumberOfProjects = 1 + SccProjectUniqueName0 = snes9xw.vcproj + SccProjectName0 = snes9xw + SccLocalPath0 = ..\\.. + SccProvider0 = MSSCCI:Microsoft\u0020Visual\u0020SourceSafe + SccProjectFilePathRelativizedFromConnection0 = snes9x_1_43_wip1_source\\snes9x-1.43-dev-src\\ + EndGlobalSection + GlobalSection(SolutionConfiguration) = preSolution + C core = C core + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {B86059D8-C9A6-46BE-8FBA-3170C54F1DFD}.C core.ActiveCfg = C core|Win32 + {B86059D8-C9A6-46BE-8FBA-3170C54F1DFD}.C core.Build.0 = C core|Win32 + {B86059D8-C9A6-46BE-8FBA-3170C54F1DFD}.Debug.ActiveCfg = Debug|Win32 + {B86059D8-C9A6-46BE-8FBA-3170C54F1DFD}.Debug.Build.0 = Debug|Win32 + {B86059D8-C9A6-46BE-8FBA-3170C54F1DFD}.Release.ActiveCfg = Release|Win32 + {B86059D8-C9A6-46BE-8FBA-3170C54F1DFD}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff -NaHudr snes9x-1.43-src/snes9xw.suo snes9x-improvement7-src-dehacked/snes9xw.suo --- snes9x-1.43-src/snes9xw.suo 1970-01-01 02:00:00.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9xw.suo 2005-03-20 23:46:37.000000000 +0200 @@ -0,0 +1,19 @@ +ÐÏࡱá>þÿ þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿ + þÿÿÿþÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRoot Entryÿÿÿÿÿÿÿÿ ¬ -µ%Å@"ProjInfoExÿÿÿÿDevPartner Solution Properties>ÿÿÿÿÿÿÿÿÿÿÿÿTaskListUserTasks$ +ÿÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿ þÿÿÿþÿÿÿþÿÿÿ þÿÿÿþÿÿÿþÿÿÿþÿÿÿEþÿÿÿ !"#$%&'G)þÿÿÿ+,-B/0123456789:;<=>?@þÿÿÿþÿÿÿCDþÿÿÿFPþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNOþÿÿÿQþÿÿÿÿÿÿÿÿÿÿÿUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€zíxZ…PqGŽ¶õ¤°âÚ¼ðC Device ControlsData +XML Schema Dialog EditorMobile Web Forms Web Forms +Components Windows FormsHTMLClipboard RingGeneralè"ÿþcC:\Documents and Settings\Justin\Desktop\snes9x_1_43_wiIToolboxService ÿÿÿÿÿÿÿÿ®IVSMDPropertyBrowser*ÿÿÿÿÿÿÿÿþÿÿÿIVSMDDesignerService*ÿÿÿÿÿÿÿÿþÿÿÿSourceCodeControl$ÿÿÿÿÿÿÿÿþp1_source\snes9x-1.43-dev-src\snes9xw.vcproj EndOfStreamC:\Documents and Settings\JuXc:\Program Files\Visual Studio\Vc7\crt\src\fc:\Program Files\Visual Studio\Vc7\atlmfc\src\mfc\fc:\Program Files\VisuDebuggerWatches ÿÿÿÿ +DebuggerBreakpoints(ÿÿÿÿM¸DebuggerExceptions&ÿÿÿÿ ÿÿÿÿ DebuggerFindSource&ÿÿÿÿÿÿÿÿÿÿÿÿ Dal Studio\Vc7\atlmfc\src\atl\iles\Visual Studio\Vc7\atlmfc\c:\Program Files\VisuÍëC:\Program Files\Microsoft Direc±)Ã)Í«4ï¾­Þø Í«4ï¾­ÞDebuggerFindSymbol& ÿÿÿÿDebuggerMemoryWindows,ÿÿÿÿÿÿÿÿÿÿÿÿTDevPartnerCoverage&ÿÿÿÿÿÿÿÿÿÿÿÿExternalFilesProjectContents:ÿÿÿÿÿÿÿÿ6m€Í«4ï¾­ÞáóÍ«4ï¾­ÞWXÍ«4ï¾­ÞbsÍ«4ï¾­ÞàïÍ«4ï¾­Þ¼ËÍ«4ï¾­ÞVkÍ«4ï¾­ÞMultiStartupProj=;4{B86059D8-C9A6-46BE-8FBA-3170C54F1DFD}.dwStartupOpt=;StartupProject=&{B86059D8-C9A6-46BE-8FBA-3170C54F1DFD};={B86059D8-C9A6-DocumentWindowPositions0ÿÿÿÿÿÿÿÿT3 DocumentWindowUserData.ÿÿÿÿÿÿÿÿäSolutionConfiguration, ÿÿÿÿbObjMgrContentsÿÿÿÿÿÿÿÿÿÿÿÿ(€46BE-8FBA-3170C54F1DFD}.Debug|Win32.fBatchBld=;?{B86059D8-C9A6-46BE-8FBA-3170C54F1DFD}.Release|Win32.fBatchBld=;>{B86059D8-C9A6-46BE-8FBA-3170C54F1DFD}.C core|Win32.fBatchBld=;4{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}.dwStartupOpt=; +ActivкñXˆ"¹E¬:Õc˜÷x rÉJA)˜jK¨× Rþ¸ªNSܾï MŠ%˜¿Ÿøç%Ò¯##G¶åá}'bm4Élü #Oÿ‡øϤESnes9X“Q ÈC:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9xw.vcprojÈC:\Documents and SettiC core|Win32DebugSettingsô.õ.ö. ø.÷.ù.ClassViewContents$ÿÿÿÿþÿÿÿProjExplorerState$ÿÿÿÿÿÿÿÿ*ÀUnloadedProjects"ÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿSnes9Xÿÿÿÿÿÿÿÿÿÿÿÿ.ú.û.ü.ý. ÿ.,GeneralConfigSettingsVCBscMakeTool ¢ÿÿ£H.\Snes9X___Win32_C_core/snes9xw.bsc(EndConfigPropertiesRelease|Win32DebugSettingsô.õ.ö. ø.÷.ù.ú.û.ü.ý. ÿ.,GeneralConfigSettingsVCBscMakeTool ¢ÿÿ£,.\Release/snes9xw.bsc(EndConfigPropertiesDebug|Win32DebugSettingsô.õ.ö. ø.÷.ù.ú.û.ü.ý. ÿ.,GeneralConfigSettingsVCBscMakeTool ¢ÿÿ£F.\Snes9X___Win32_Debug/snes9xw.bsc(EndConfigPropertiesXÏ +ngs\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9xw.vcprojGUIEmutX 9.0 SDK (Summer 2004)\Include\dsound.h<open> +c:\Program FileeCfg=Release;Í«4ï¾­Þ!TaskListShortcuts$ÿÿÿÿÿÿÿÿÿÿÿÿAResEdit.optÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿeCfg=Release;n\Desktop\snes9<Í«4ᆳޛͫ4ï¾­Þl{Í«4ï¾­ÞùüÍ«4ï¾­ÞÃÚ Í«4ï¾­ÞÍ«4ï¾­Þ~‘Í«4ï¾­Þˆ˜Í«4ï¾­Þq‹Í«4ï¾­Þ$7¬C:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\x.rcx_1_43_wip1_source\snes9x-1.43-dev-src\wsnes9x.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}2‘ +ÿÿˆ;  <  ˆ{B86059D8-C9A6-46BE-8FBA-3170C54F1DFD}|snes9xw.vcproj|c:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x\movie.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}123456E¸ +ÿÿˆ;  <  „{B86059D8-C9A6-46BE-8FBA-3170C54F1DFD}|snes9xw.vcproj|c:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x\movie.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}12E¸ +ÿÿˆ;  <  z{B86059D8-C9A6-46BE-8FBA-3170C54F1DFD}|snes9xw.vcproj|c:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\wsnes9x.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}1234H5 +ÿÿˆ;  <  Œ{B86059D8-C9A6-46BE-8FBA-3170C54F1DFD}|snes9xw.vcproj|c:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x\soundux.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}12E¸ +ÿÿˆ;  <  ˆ{B86059D8-C9A6-46BE-8FBA-3170C54F1DFD}|snes9xw.vcproj|c:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x\win32.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}123456E¸ +ÿÿˆ;  <  J{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|<MiscFiles>|C:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\dsound.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}1234H5 +ÿÿ$ˆ;  <  8{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|<MiscFiles>|c:\Program Files\Visual Studio\Vc7\PlatformSDK\include\winuser.h||{D0E1A5C6-B359-4E‚ƒ„…†‡ˆþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿs\Visual Studio\Vc7\PlatformSDK\include\winuser.h<open> +gs\JuÍ«4ï¾­Þ¼ËÍ«4ï¾­ÞÙòÍ«4ï¾­Þ ® Í«4ï¾­ÞBA-3170C54F1DFdH5 +ÿÿˆ;  <  ~{B86059D8-C9A6-46BE-8FBA-3170C54F1DFD}|snes9xw.vcproj|c:\Documents and Settings\Justin\Desktop\snes941-9B60-3365922C2A22}123456snes9x\memmap.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}1234E¸ +ÿÿ!ˆ;  <  „{B86059D8-C9A6-46BE-8FBA-3170C54F1DFD}|snes9xw.vcproj|c:\Documents and Settings\Justin\Desktop\snes9x_1_43_wip1_source\snes9x-1.43-dev-src\snes9x\cp \ No newline at end of file diff -NaHudr snes9x-1.43-src/snes9xw.vcproj snes9x-improvement7-src-dehacked/snes9xw.vcproj --- snes9x-1.43-src/snes9xw.vcproj 1970-01-01 02:00:00.000000000 +0200 +++ snes9x-improvement7-src-dehacked/snes9xw.vcproj 2005-03-20 23:46:37.000000000 +0200 @@ -0,0 +1,2801 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -NaHudr snes9x-1.43-src/wsnes9x.cpp snes9x-improvement7-src-dehacked/wsnes9x.cpp --- snes9x-1.43-src/wsnes9x.cpp 2005-04-09 00:59:56.000000000 +0300 +++ snes9x-improvement7-src-dehacked/wsnes9x.cpp 2005-04-09 00:59:23.000000000 +0300 @@ -91,6 +91,11 @@ Nintendo Co., Limited and its subsidiary companies. *******************************************************************************/ +#ifdef __MINGW32__ +#define _WIN32_IE 0x0501 +#define _WIN32_WINNT 0x0501 +#endif + #include #include @@ -112,7 +117,15 @@ #include -#include +#if (((defined(_MSC_VER) && _MSC_VER >= 1300)) || defined(__MINGW32__)) +// both MINGW and VS.NET use fstream instead of fstream.h which is deprecated +#include +using namespace std; +#else + // for VC++ 6 + #include +#endif + #include //#include "string_cache.h" #include "language.h" @@ -154,6 +167,7 @@ int CALLBACK DlgNPOptions(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); int CALLBACK DlgFunky(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); int CALLBACK DlgInputConfig(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); +int CALLBACK DlgHotkeyConfig(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); int CALLBACK DlgCheater(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); int CALLBACK DlgCheatSearch(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); int CALLBACK DlgCheatSearchAdd(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); @@ -233,16 +247,16 @@ static const char *rom_filename = NULL; CDirectX DirectX; -struct SJoypad Joypad[5] = { +struct SJoypad Joypad[10] = { { true, /* Joypad 1 enabled */ VK_LEFT, VK_RIGHT, VK_UP, VK_DOWN, /* Left, Right, Up, Down */ 0, 0, /* Left_Up, Left_Down */ 0, 0, /* Right_Up, Right_Down */ VK_RETURN, VK_SPACE, /* Start, Select */ - 'D', 'C', /* A B */ - 'S', 'X', /* X Y */ - 'A', 'Z' /* L R */ + 'V', 'C', /* A B */ + 'D', 'X', /* X Y */ + 'A', 'S' /* L R */ }, { false, /* Joypad 2 disabled */ @@ -271,9 +285,175 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - } + }, + { + false, /* Joypad 1 Turbo disabled */ + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, + 0, 0, 0, 0, 0, 0 + }, + { + false, /* Joypad 2 Turbo disabled */ + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, + 0, 0, 0, 0, 0, 0 + }, + { + false, /* Joypad 3 Turbo disabled */ + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, + 0, 0, 0, 0, 0, 0 + }, + { + false, /* Joypad 4 Turbo disabled */ + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, + 0, 0, 0, 0, 0, 0 + }, + { + false, /* Joypad 5 Turbo disabled */ + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, + 0, 0, 0, 0, 0, 0 + } +}; + +// stores on/off toggle info for each key of each controller +SJoypad ToggleJoypadStorage [5] = { + { + false, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, + 0, 0, 0, 0, 0, 0 + }, + { + false, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, + 0, 0, 0, 0, 0, 0 + }, + { + false, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, + 0, 0, 0, 0, 0, 0 + }, + { + false, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, + 0, 0, 0, 0, 0, 0 + }, + { + false, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, + 0, 0, 0, 0, 0, 0 + } }; +SJoypad TurboToggleJoypadStorage [5] = { + { + false, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, + 0, 0, 0, 0, 0, 0 + }, + { + false, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, + 0, 0, 0, 0, 0, 0 + }, + { + false, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, + 0, 0, 0, 0, 0, 0 + }, + { + false, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, + 0, 0, 0, 0, 0, 0 + }, + { + false, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, + 0, 0, 0, 0, 0, 0 + } +}; + +struct SCustomKeys CustomKeys = { + {VK_OEM_PLUS,0}, // speed+ (=) + {VK_OEM_MINUS,0}, // speed- (-) + {VK_PAUSE,0}, // pause (PAUSE) + {VK_OEM_5,0}, // frame advance (\) + {VK_OEM_PLUS,CUSTKEY_SHIFT_MASK}, // skip+ (_) + {VK_OEM_MINUS,CUSTKEY_SHIFT_MASK}, // skip- (+) + {VK_OEM_3,0}, // superscope turbo (`) + {VK_OEM_2,0}, // superscope pause (/) + {VK_OEM_PERIOD,0}, // frame counter (.) + {'8',CUSTKEY_SHIFT_MASK}, // movie read-only (*) + {{VK_F1,CUSTKEY_SHIFT_MASK}, // save keys + {VK_F2,CUSTKEY_SHIFT_MASK}, + {VK_F3,CUSTKEY_SHIFT_MASK}, + {VK_F4,CUSTKEY_SHIFT_MASK}, + {VK_F5,CUSTKEY_SHIFT_MASK}, + {VK_F6,CUSTKEY_SHIFT_MASK}, + {VK_F7,CUSTKEY_SHIFT_MASK}, + {VK_F8,CUSTKEY_SHIFT_MASK}, + {VK_F9,CUSTKEY_SHIFT_MASK}, + {VK_F10,CUSTKEY_SHIFT_MASK}}, + {{VK_F1,0}, // load keys + {VK_F2,0}, + {VK_F3,0}, + {VK_F4,0}, + {VK_F5,0}, + {VK_F6,0}, + {VK_F7,0}, + {VK_F8,0}, + {VK_F9,0}, + {VK_F10,0}}, + {VK_TAB,0}, // fast forward (TAB) + {VK_OEM_COMMA,0}, // show pressed keys/buttons (,) + {VK_F12,0}, // save screenshot (F12) + {0,0}, // slot plus (disabled by default) + {0,0}, // slot minus (disabled by default) + {0,0}, // slot save (disabled by default) + {0,0}, // slot load (disabled by default) + {'1',0}, // background layer 1 + {'2',0}, // background layer 2 + {'3',0}, // background layer 3 + {'4',0}, // background layer 4 + {'5',0}, // sprite layer + {VK_BACK,0}, // Clipping Windows + {'8',0}, // BG Layering hack + {'9',0}, // Transparency + {'0',0}, // HDMA Emulation + {'6',CUSTKEY_SHIFT_MASK}, // GLCube Mode + {'9',CUSTKEY_SHIFT_MASK}, // Interpolate Mode 7 + {'6',0}, // Joypad Swap + {'7',0} // Switch Controllers +}; + + struct SSoundRates { uint32 rate; @@ -291,7 +471,7 @@ }; static uint32 FrameTimings[] = { - 1, 1, 4, 8, 17, 20, 35, 70, 140, 300, 500, 1000, 1000 + 4, 4, 8, 12, 17, 20, 35, 70, 140, 300, 500, 1000, 1000 }; // Languages supported by Snes9X: Windows @@ -301,7 +481,7 @@ { IDR_MENU_US, TEXT("DirectX failed to initialize!"), TEXT("DirectDraw failed to set the selected display mode!"), - TEXT("DirectSound failed to initialize, no sound will be played."), + TEXT("DirectSound failed to initialize; no sound will be played."), TEXT("These settings won't take effect until you restart the emulator."), TEXT("The frame timer failed to initialize, please do NOT select the automatic framerate option or Snes9X will crash!")}, { IDR_MENU_NL, @@ -316,8 +496,10 @@ { char Path[_MAX_PATH]; bool8 ReadOnly; + bool8 DisplayInput; uint8 ControllersMask; uint8 Opts; + uint8 SyncFlags; wchar_t Metadata[MOVIE_MAX_METADATA]; }; struct dMode @@ -561,80 +743,387 @@ DeleteMenu(GUI.hMenu,IDM_CATCH_UP_SOUND,MF_BYCOMMAND); #endif return 0; + case WM_SYSKEYDOWN: case WM_KEYDOWN: - switch (wParam) { - case VK_TAB: - //until I decide how to really handle this - if(Settings.SPC7110RTC) - break; - if (GUI.TurboModeToggle) + // update toggles + for (int J = 0; J < 5; J++) { - Settings.TurboMode ^= TRUE; - if (Settings.TurboMode) - S9xMessage (S9X_INFO, S9X_TURBO_MODE, - WINPROC_TURBOMODE_ON); - else - S9xMessage (S9X_INFO, S9X_TURBO_MODE, - WINPROC_TURBOMODE_OFF); + extern bool S9xGetState (WORD KeyIdent); + if(Joypad[J].Enabled && (!S9xGetState(Joypad[J+5].Left))) // enabled and Togglify + { + SJoypad & p = ToggleJoypadStorage[J]; + if(wParam == Joypad[J].L) p.L = !p.L; + if(wParam == Joypad[J].R) p.R = !p.R; + if(wParam == Joypad[J].A) p.A = !p.A; + if(wParam == Joypad[J].B) p.B = !p.B; + if(wParam == Joypad[J].Y) p.Y = !p.Y; + if(wParam == Joypad[J].X) p.X = !p.X; + if(wParam == Joypad[J].Start) p.Start = !p.Start; + if(wParam == Joypad[J].Select) p.Select = !p.Select; + if(wParam == Joypad[J].Left) p.Left = !p.Left; + if(wParam == Joypad[J].Right) p.Right = !p.Right; + if(wParam == Joypad[J].Up) p.Up = !p.Up; + if(wParam == Joypad[J].Down) p.Down = !p.Down; +/// if(wParam == Joypad[J].Left_Down) p.Left_Down = !p.Left_Down; +/// if(wParam == Joypad[J].Left_Up) p.Left_Up = !p.Left_Up; +/// if(wParam == Joypad[J].Right_Down) p.Right_Down = !p.Right_Down; +/// if(wParam == Joypad[J].Right_Up) p.Right_Up = !p.Right_Up; + if(Settings.DisallowLeftRight) + { + if(p.Left && p.Right) + p.Left = p.Right = false; + if(p.Up && p.Down) + p.Up = p.Down = false; + } + } + if(Joypad[J].Enabled && (!S9xGetState(Joypad[J+5].Down))) // enabled and turbo-togglify (TurboTog) + { + SJoypad & p = TurboToggleJoypadStorage[J]; + if(wParam == Joypad[J].L) p.L = !p.L; + if(wParam == Joypad[J].R) p.R = !p.R; + if(wParam == Joypad[J].A) p.A = !p.A; + if(wParam == Joypad[J].B) p.B = !p.B; + if(wParam == Joypad[J].Y) p.Y = !p.Y; + if(wParam == Joypad[J].X) p.X = !p.X; + if(wParam == Joypad[J].Start) p.Start = !p.Start; + if(wParam == Joypad[J].Select) p.Select = !p.Select; +/// if(wParam == Joypad[J].Left) p.Left = !p.Left; +/// if(wParam == Joypad[J].Right) p.Right = !p.Right; +/// if(wParam == Joypad[J].Up) p.Up = !p.Up; +/// if(wParam == Joypad[J].Down) p.Down = !p.Down; +/// if(wParam == Joypad[J].Left_Down) p.Left_Down = !p.Left_Down; +/// if(wParam == Joypad[J].Left_Up) p.Left_Up = !p.Left_Up; +/// if(wParam == Joypad[J].Right_Down) p.Right_Down = !p.Right_Down; +/// if(wParam == Joypad[J].Right_Up) p.Right_Up = !p.Right_Up; +/* if(Settings.DisallowLeftRight) + { + if(p.Left && p.Right && ) + p.Left = p.Right = false; + if(p.Up && p.Down) + p.Up = p.Down = false; + }*/ + } + if(wParam == Joypad[J+5].Right) // clear all + { + { + SJoypad & p = ToggleJoypadStorage[J]; + p.L = false; + p.R = false; + p.A = false; + p.B = false; + p.Y = false; + p.X = false; + p.Start = false; + p.Select = false; + p.Left = false; + p.Right = false; + p.Up = false; + p.Down = false; + } + { + SJoypad & p = TurboToggleJoypadStorage[J]; + p.L = false; + p.R = false; + p.A = false; + p.B = false; + p.Y = false; + p.X = false; + p.Start = false; + p.Select = false; + p.Left = false; + p.Right = false; + p.Up = false; + p.Down = false; + } + } } - else + + + bool hitHotKey = false; + + if(!(wParam == 0 || wParam == VK_ESCAPE)) // if it's the 'disabled' key, it's never pressed as a hotkey + { + + int modifiers = 0; + if(GetAsyncKeyState(VK_MENU)) + modifiers |= CUSTKEY_ALT_MASK; + if(GetAsyncKeyState(VK_CONTROL)) + modifiers |= CUSTKEY_CTRL_MASK; + if(GetAsyncKeyState(VK_SHIFT)) + modifiers |= CUSTKEY_SHIFT_MASK; + + { + for(int i = 0 ; i < 10 ; i++) + { + if(wParam == CustomKeys.Save[i].key + && modifiers == CustomKeys.Save[i].modifiers) + { + FreezeUnfreeze (i, true); + hitHotKey = true; + } + if(wParam == CustomKeys.Load[i].key + && modifiers == CustomKeys.Load[i].modifiers) + { + FreezeUnfreeze (i, false); + hitHotKey = true; + } + } + + if(wParam == CustomKeys.SlotSave.key + && modifiers == CustomKeys.SlotSave.modifiers) + { + FreezeUnfreeze (Settings.CurrentSaveSlot, true); + hitHotKey = true; + } + if(wParam == CustomKeys.SlotLoad.key + && modifiers == CustomKeys.SlotLoad.modifiers) + { + FreezeUnfreeze (Settings.CurrentSaveSlot, false); + hitHotKey = true; + } + if(wParam == CustomKeys.SlotPlus.key + && modifiers == CustomKeys.SlotPlus.modifiers) + { + Settings.CurrentSaveSlot++; + if(Settings.CurrentSaveSlot > 9) + Settings.CurrentSaveSlot = 0; + + static char str [64]; + sprintf(str, "set slot 00%d", Settings.CurrentSaveSlot); + S9xSetInfoString(str); + + hitHotKey = true; + } + if(wParam == CustomKeys.SlotMinus.key + && modifiers == CustomKeys.SlotMinus.modifiers) + { + Settings.CurrentSaveSlot--; + if(Settings.CurrentSaveSlot < 0) + Settings.CurrentSaveSlot = 9; + + static char str [64]; + sprintf(str, "set slot 00%d", Settings.CurrentSaveSlot); + S9xSetInfoString(str); + + hitHotKey = true; + } + } + + + if(wParam == CustomKeys.FrameAdvance.key + && modifiers == CustomKeys.FrameAdvance.modifiers) + { + if(Settings.Paused) + { + Settings.FrameAdvance = true; + // kick the main thread out of GetMessage (just in case) + SendMessage(GUI.hWnd, WM_NULL, 0, 0); + } + else + { + Settings.Paused = true; + } + hitHotKey = true; + } + if(wParam == CustomKeys.FrameCount.key + && modifiers == CustomKeys.FrameCount.modifiers) + { + if (S9xMovieActive()) + S9xMovieToggleFrameDisplay (); + else + S9xMessage(S9X_INFO, S9X_MOVIE_INFO, "No movie; can't toggle frame count."); + hitHotKey = true; + } + if(wParam == CustomKeys.Pause.key + && modifiers == CustomKeys.Pause.modifiers) + { + Settings.Paused = Settings.Paused ^ true; + Settings.FrameAdvance = false; + hitHotKey = true; + } + if(wParam == CustomKeys.ReadOnly.key + && modifiers == CustomKeys.ReadOnly.modifiers) + { + if (S9xMovieActive()) + S9xMovieToggleRecState(); + else + S9xMessage(S9X_INFO, S9X_MOVIE_INFO, "No movie; can't toggle read-only."); + hitHotKey = true; + } + if(wParam == CustomKeys.FastForward.key + && modifiers == CustomKeys.FastForward.modifiers) + { + if(Settings.SPC7110RTC) + break; + if (GUI.TurboModeToggle) + { + Settings.TurboMode ^= TRUE; + if (Settings.TurboMode) + S9xMessage (S9X_INFO, S9X_TURBO_MODE, + WINPROC_TURBOMODE_ON); + else + S9xMessage (S9X_INFO, S9X_TURBO_MODE, + WINPROC_TURBOMODE_OFF); + } + else + { + Settings.TurboMode = TRUE; + S9xMessage (S9X_INFO, S9X_TURBO_MODE, WINPROC_TURBOMODE_TEXT); + } + hitHotKey = true; + } + if(wParam == CustomKeys.ShowPressed.key + && modifiers == CustomKeys.ShowPressed.modifiers) + { + Settings.DisplayPressedKeys = !Settings.DisplayPressedKeys; + + if(Settings.DisplayPressedKeys) + S9xMessage(S9X_INFO, S9X_MOVIE_INFO, "Input display enabled."); + else + S9xMessage(S9X_INFO, S9X_MOVIE_INFO, "Input display disabled."); + + hitHotKey = true; + } + if(wParam == CustomKeys.SaveScreenShot.key + && modifiers == CustomKeys.SaveScreenShot.modifiers) + { + Settings.TakeScreenshot=true; + } + if(wParam == CustomKeys.ScopePause.key + && modifiers == CustomKeys.ScopePause.modifiers) + { + superscope_pause ^= 1; + hitHotKey = true; + } + if(wParam == CustomKeys.ScopeTurbo.key + && modifiers == CustomKeys.ScopeTurbo.modifiers) + { + superscope_turbo ^= 1; + hitHotKey = true; + } + if(wParam == CustomKeys.SkipDown.key + && modifiers == CustomKeys.SkipDown.modifiers) + { + if (Settings.SkipFrames <= 1) + Settings.SkipFrames = AUTO_FRAMERATE; + else + if (Settings.SkipFrames != AUTO_FRAMERATE) + Settings.SkipFrames--; + + if (Settings.SkipFrames == AUTO_FRAMERATE) + S9xSetInfoString (WINPROC_AUTOSKIP); + else + { + sprintf (InfoString, WINPROC_FRAMESKIP, + Settings.SkipFrames - 1); + S9xSetInfoString (InfoString); + } + hitHotKey = true; + } + if(wParam == CustomKeys.SkipUp.key + && modifiers == CustomKeys.SkipUp.modifiers) + { + if (Settings.SkipFrames == AUTO_FRAMERATE) + Settings.SkipFrames = 1; + else + if (Settings.SkipFrames < 10) + Settings.SkipFrames++; + + if (Settings.SkipFrames == AUTO_FRAMERATE) + S9xSetInfoString (WINPROC_AUTOSKIP); + else + { + sprintf (InfoString, WINPROC_FRAMESKIP, + Settings.SkipFrames - 1); + S9xSetInfoString (InfoString); + } + hitHotKey = true; + } + if(wParam == CustomKeys.SpeedDown.key + && modifiers == CustomKeys.SpeedDown.modifiers) + { + // Increase emulated frame time + int i; + for(i=1; FrameTimings[i]> 16) & 0xffff); ClientToScreen (GUI.hWnd, &p); if ((!Settings.ForcedPause && !Settings.StopEmulation && - !Settings.Paused) && + !(Settings.Paused && !Settings.FrameAdvance)) && (IPPU.Controller == SNES_MOUSE || IPPU.Controller == SNES_MOUSE_SWAPPED)) { @@ -2088,12 +2555,14 @@ SetKey( "16bit Sound", Settings.SixteenBitSound); SetKey( "Interpolated Sound", Settings.InterpolatedSound); SetKey( "Sync Sound", Settings.SoundSync); + SetKey( "Fake Mute Desync Workaround", Settings.FakeMuteFix); SetKey( "Sound Envelope Height Reading", Settings.SoundEnvelopeHeightReading); SetKey( "Reverse Stereo", Settings.ReverseStereo); SetKey( "Disable Echo", Settings.DisableSoundEcho); SetKey( "Disable Sample Caching", Settings.DisableSampleCaching); SetKey( "Disable Master Volume", Settings.DisableMasterVolume); SetKey( "Mute Sound", Settings.Mute); + SetKey( "Frame Advance Mute", Settings.FAMute); SetKey( "Alt Sample Code Method", Settings.AltSampleDecode); SetKey( "Enable SPC700", Settings.NextAPUEnabled); SetKey( "Sound CPU Skip Method", Settings.SoundSkipMethod); @@ -2101,6 +2570,7 @@ SetKey( "Sound Buffer Length", Settings.SoundBufferSize); SetKey( "Sound Mix Interval", Settings.SoundMixInterval); SetKey( "Sound Driver", Settings.SoundDriver); + SetKey( "Use WIP APU Timing", Settings.UseWIPAPUTiming); SetKey( "Width", GUI.Width); SetKey( "Height", GUI.Height); @@ -2112,9 +2582,11 @@ SetKey( "Render SixteenBit", Settings.SixteenBit); SetKey( "Enable Transparency", Settings.Transparency); SetKey( "Support HiRes", Settings.SupportHiRes); + SetKey( "Extend Height", Settings.HeightExtend); SetKey( "Skip Frames", Settings.SkipFrames); SetKey( "Turbo Skip Frames", Settings.TurboSkipFrames); SetKey( "Turbo Mode Toggle", GUI.TurboModeToggle); + SetKey( "Pause When Inactive", GUI.InactivePause); SetKey( "Auto Max Skip Frames", Settings.AutoMaxSkipFrames); SetKey( "Joypad #1", Joypad[0]); @@ -2122,8 +2594,19 @@ SetKey( "Joypad #3", Joypad[2]); SetKey( "Joypad #4", Joypad[3]); SetKey( "Joypad #5", Joypad[4]); - SetKey( "Window Geometry", GUI.window_size); + SetKey( "Joypad #1 Turbo", Joypad[5]); + SetKey( "Joypad #2 Turbo", Joypad[6]); + SetKey( "Joypad #3 Turbo", Joypad[7]); + SetKey( "Joypad #4 Turbo", Joypad[8]); + SetKey( "Joypad #5 Turbo", Joypad[9]); + SetKey( "Hotkeys", CustomKeys); + + SetKey( "Disallow Left+Right/Up+Down", Settings.DisallowLeftRight); + SetKey( "Display Pressed Keys", Settings.DisplayPressedKeys); + + SetKey( "Window Geometry", GUI.window_size); SetKey( "Stretch", GUI.Stretch); + SetKey( "Aspect Ratio", Settings.AspectRatio); SetKey( "Fullscreen", GUI.FullScreen); RegSetValueEx (hKey, TEXT("Freeze File Directory"), 0, REG_SZ, (const unsigned char *) GUI.FreezeFileDir, @@ -2138,7 +2621,8 @@ SetKey( "NetPlay Max Behind Frame Count", NetPlay.MaxBehindFrameCount); #endif SetKey( "Bi-Linear Filter Mode7", Settings.Mode7Interpolate); - SetKey( "Use Hardware Video Memory",GUI.VideoMemory); + SetKey( "Use Hardware Video Memory", GUI.VideoMemory); + SetKey( "Current Save Slot", Settings.CurrentSaveSlot); RegSetValueEx (hKey, TEXT("StarOcean"), 0, REG_SZ, (const unsigned char *) GUI.StarOceanPack, @@ -2193,7 +2677,6 @@ } static void WinSetDefaultValues () - { HKEY hKey; char temp[4]; @@ -2207,7 +2690,7 @@ { if(RegQueryValueEx(hKey,TEXT("Last Directory"),NULL,NULL,NULL,NULL)!=ERROR_SUCCESS) { - RegSetValueEx(hKey,TEXT("Last Directory"),NULL,REG_SZ,(uint8*)temp,strlen(temp)+1); + RegSetValueEx(hKey,TEXT("Last Directory"),0,REG_SZ,(uint8*)temp,strlen(temp)+1); } RegCloseKey(hKey); } @@ -2232,6 +2715,7 @@ GUI.FlipCounter = 0; GUI.NumFlipFrames = 1; GUI.VideoMemory = false; + WinDeleteRecentGamesList (); // ROM Options @@ -2256,6 +2740,7 @@ Settings.DisableSoundEcho = FALSE; Settings.DisableMasterVolume = FALSE; Settings.Mute = FALSE; + Settings.FAMute = FALSE; Settings.SoundSkipMethod = 0; Settings.SoundPlaybackRate = 32000; Settings.SixteenBitSound = TRUE; @@ -2313,11 +2798,14 @@ Settings.ForceNoTransparency = false; Settings.DisableHDMA = false; Settings.Mode7Interpolate = false; + Settings.HeightExtend = false; Settings.DisplayFrameRate = false; Settings.SixteenBit = true; Settings.Transparency = true; Settings.SupportHiRes = true; + Settings.DisplayPressedKeys = false; + Settings.CurrentSaveSlot = 0; Settings.AutoSaveDelay = 15; Settings.ApplyCheats = true; @@ -2370,9 +2858,11 @@ GetKeyDef( "Render SixteenBit", Settings.SixteenBit, true); GetKeyDef( "Enable Transparency", Settings.Transparency, true); GetKeyDef( "Support HiRes", Settings.SupportHiRes, true); + GetKeyDef( "Extend Height", Settings.HeightExtend, false); GetKeyDef( "Skip Frames", Settings.SkipFrames, AUTO_FRAMERATE); GetKeyDef( "Turbo Skip Frames", Settings.TurboSkipFrames, 15); GetKeyDef( "Turbo Mode Toggle", GUI.TurboModeToggle, FALSE); + GetKeyDef( "Pause When Inactive", GUI.InactivePause, TRUE); GetKeyDef( "Auto Max Skip Frames", Settings.AutoMaxSkipFrames, 10); GetKeyDef( "Bi-Linear Filter Mode7", Settings.Mode7Interpolate, false); @@ -2381,20 +2871,33 @@ GetKey( "Joypad #3", Joypad[2]); GetKey( "Joypad #4", Joypad[3]); GetKey( "Joypad #5", Joypad[4]); - GetKey( "Window Geometry", GUI.window_size); + GetKey( "Joypad #1 Turbo", Joypad[5]); + GetKey( "Joypad #2 Turbo", Joypad[6]); + GetKey( "Joypad #3 Turbo", Joypad[7]); + GetKey( "Joypad #4 Turbo", Joypad[8]); + GetKey( "Joypad #5 Turbo", Joypad[9]); + GetKey( "Hotkeys", CustomKeys); + + GetKeyDef( "Disallow Left+Right/Up+Down", Settings.DisallowLeftRight, true); + GetKeyDef( "Display Pressed Keys", Settings.DisplayPressedKeys, false); + + GetKey( "Window Geometry", GUI.window_size); GetKeyDef( "Stretch", GUI.Stretch, false); + GetKeyDef( "Aspect Ratio", Settings.AspectRatio, true); GetKeyDef( "Fullscreen", GUI.FullScreen, false); GetKeyDef( "Playback Rate", Settings.SoundPlaybackRate, 22050); GetKeyDef( "Stereo Sound", Settings.Stereo, true); GetKeyDef( "16bit Sound", Settings.SixteenBitSound, true); GetKeyDef( "Interpolated Sound", Settings.InterpolatedSound, true); GetKeyDef( "Sync Sound", Settings.SoundSync, false); + GetKeyDef( "Fake Mute Desync Workaround", Settings.FakeMuteFix, false); GetKeyDef( "Sound Envelope Height Reading", Settings.SoundEnvelopeHeightReading, true); GetKeyDef( "Reverse Stereo", Settings.ReverseStereo, false); GetKeyDef( "Disable Echo", Settings.DisableSoundEcho, false); GetKeyDef( "Disable Sample Caching", Settings.DisableSampleCaching, false); GetKeyDef( "Disable Master Volume", Settings.DisableMasterVolume, false); GetKeyDef( "Mute Sound", Settings.Mute, false); + GetKeyDef( "Frame Advance Mute", Settings.FAMute, false); GetKeyDef( "Alt Sample Code Method", Settings.AltSampleDecode, false); GetKeyDef( "Enable SPC700", Settings.NextAPUEnabled, true); Settings.APUEnabled = Settings.NextAPUEnabled; @@ -2403,6 +2906,7 @@ GetKeyDef( "Sound Buffer Length", Settings.SoundBufferSize, 1); GetKeyDef( "Sound Mix Interval", Settings.SoundMixInterval, 10); GetKeyDef( "Sound Driver", Settings.SoundDriver, WIN_SNES9X_DIRECT_SOUND_DRIVER); + GetKeyDef( "Use WIP APU Timing", Settings.UseWIPAPUTiming, false); GetKeyDef( "Auto Save Delay", Settings.AutoSaveDelay, 30); GetKeyDef( "Apply Cheats", Settings.ApplyCheats, true); #ifdef NETPLAY_SUPPORT @@ -2412,7 +2916,8 @@ GetKeyDef( "NetPlay Max Frame Skip", NetPlay.MaxFrameSkip, 10); GetKeyDef( "NetPlay Max Behind Frame Count", NetPlay.MaxBehindFrameCount, 10); #endif - GetKeyDef( "Use Hardware Video Memory",GUI.VideoMemory, false); + GetKeyDef( "Use Hardware Video Memory", GUI.VideoMemory, true); + GetKeyDef( "Current Save Slot", Settings.CurrentSaveSlot, 0); cbData = _MAX_PATH + 1; RegQueryValueEx (hKey, TEXT("Freeze File Directory"), 0, NULL, (unsigned char *) GUI.FreezeFileDir, &cbData); @@ -2480,7 +2985,7 @@ GUI.RecentGames [j] = strdup (path); } } - RegCloseKey( hKey); + RegCloseKey( hKey); } @@ -2543,7 +3048,7 @@ if (Settings.NetPlayServer) { //- WaitForSingleObject (GUI.ServerTimerSemaphore, 0); - if (Settings.Paused || Settings.StopEmulation || Settings.ForcedPause) + if ((Settings.Paused && !Settings.FrameAdvance) || Settings.StopEmulation || Settings.ForcedPause) { WaitForSingleObject (GUI.ServerTimerSemaphore, 0); return; @@ -2700,7 +3205,11 @@ TIMECAPS tc; if (timeGetDevCaps(&tc, sizeof(TIMECAPS))== TIMERR_NOERROR) { +#ifdef __MINGW32__ + wSoundTimerRes = min(max(tc.wPeriodMin, 1), tc.wPeriodMax); +#else wSoundTimerRes = min(max(tc.wPeriodMin, 1), tc.wPeriodMax); +#endif timeBeginPeriod (wSoundTimerRes); } @@ -2717,7 +3226,7 @@ GUI.FrameTimerSemaphore = CreateSemaphore (NULL, 0, 10, NULL); GUI.ServerTimerSemaphore = CreateSemaphore (NULL, 0, 10, NULL); - if (GUI.hFrameTimer == NULL) + if (GUI.hFrameTimer == 0) { MessageBox( GUI.hWnd, Languages[ GUI.Language].errFrameTimer, TEXT("Snes9X - Frame Timer"), MB_OK | MB_ICONINFORMATION); } @@ -2806,17 +3315,21 @@ } } - if(run_loop) - { - S9xMainLoop(); - DirectX.FrameCount++; - } if(Settings.FrameAdvance) { + if(GFX.InfoStringTimeout > 4) + GFX.InfoStringTimeout = 4; + Settings.FrameAdvance = false; } + if(run_loop) + { + S9xMainLoop(); + DirectX.FrameCount++; + } + #ifdef NETPLAY_SUPPORT } #endif @@ -3017,8 +3530,18 @@ mii.fState = GUI.FullScreen ? MFS_CHECKED : MFS_UNCHECKED; SetMenuItemInfo (GUI.hMenu, ID_WINDOW_FULLSCREEN, FALSE, &mii); + mii.fState = GUI.Stretch ? MFS_CHECKED : MFS_UNCHECKED; SetMenuItemInfo (GUI.hMenu, ID_WINDOW_STRETCH, FALSE, &mii); + + mii.fState = GUI.Stretch ? (Settings.AspectRatio ? MFS_CHECKED : MFS_UNCHECKED) : MFS_CHECKED|MFS_DISABLED; + SetMenuItemInfo (GUI.hMenu, ID_WINDOW_ASPECTRATIO, FALSE, &mii); + + mii.fState = GUI.VideoMemory ? MFS_CHECKED : MFS_UNCHECKED; + if(!GUI.Stretch) + mii.fState |= MFS_DISABLED; + SetMenuItemInfo (GUI.hMenu, ID_WINDOW_VIDMEM, FALSE, &mii); + mii.fState = Settings.Paused ? MFS_CHECKED : MFS_UNCHECKED; SetMenuItemInfo (GUI.hMenu, ID_FILE_PAUSE, FALSE, &mii); @@ -3617,12 +4140,32 @@ mii.fType = MFT_STRING; mii.fState = MFS_UNCHECKED; - for (i = 0; i < 10 && GUI.RecentGames && GUI.RecentGames [i]; i++) + for (i = 0; i < MAX_RECENT_GAMES_LIST_SIZE && GUI.RecentGames && GUI.RecentGames [i]; i++) { // Build up a menu item string in the form: // 1. - sprintf (name, TEXT("&%c. %s"), i < 9 ? '1' + i : 'A' + i - 9, - S9xBasename (GUI.RecentGames [i])); + + sprintf (name, TEXT("&%c. "), i < 9 ? '1' + i : 'A' + i - 9); + + // append the game title to name, with formatting modifications as necessary + { + TCHAR baseName [256]; + strcpy (baseName, S9xBasename (GUI.RecentGames [i])); + int pos = strlen (name), baseNameLen = strlen (baseName); + for (int j = 0; j < baseNameLen ; j++) + { + char c = baseName [j]; + name [pos++] = c; + + // & is a special character in Windows menus, + // so we have to change & to && when copying over the game title + // otherwise "Pocky & Rocky (U).smc" will show up as "Pocky _Rocky (U).smc", for example + if(c == '&') + name [pos++] = '&'; + } + name [pos] = '\0'; + } + mii.dwTypeData = name; mii.cch = strlen (name) + 1; mii.wID = 0xFF00 + i; @@ -3761,6 +4304,8 @@ } if(set->Mute) SendDlgItemMessage(hDlg,IDC_MUTE,BM_SETCHECK,BST_CHECKED,0); + if(set->FAMute) + SendDlgItemMessage(hDlg,IDC_FAMT,BM_SETCHECK,BST_CHECKED,0); if(set->NextAPUEnabled) { @@ -3774,6 +4319,10 @@ SendDlgItemMessage(hDlg,IDC_SYNC_TO_SOUND_CPU,BM_SETCHECK,BST_CHECKED,0); if(set->SoundEnvelopeHeightReading) SendDlgItemMessage(hDlg,IDC_ENVX,BM_SETCHECK,BST_CHECKED,0); + if(set->FakeMuteFix) + SendDlgItemMessage(hDlg,IDC_FMUT,BM_SETCHECK,BST_CHECKED,0); + if(set->UseWIPAPUTiming) + SendDlgItemMessage(hDlg,IDC_WIP1,BM_SETCHECK,BST_CHECKED,0); if(!set->DisableSoundEcho) SendDlgItemMessage(hDlg,IDC_ECHO,BM_SETCHECK,BST_CHECKED,0); @@ -3793,6 +4342,7 @@ { EnableWindow(GetDlgItem(hDlg, IDC_CACHING), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_MUTE), FALSE); + EnableWindow(GetDlgItem(hDlg, IDC_FAMT), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_ANTIRES), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_SKIP_TYPE), TRUE); EnableWindow(GetDlgItem(hDlg, IDC_DRIVER), FALSE); @@ -3807,7 +4357,7 @@ EnableWindow(GetDlgItem(hDlg, IDC_BUFLEN), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_MIX), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_SYNC_TO_SOUND_CPU), FALSE); - + EnableWindow(GetDlgItem(hDlg, IDC_FMUT), FALSE); } return true; @@ -3848,8 +4398,11 @@ set->Stereo=IsDlgButtonChecked(hDlg, IDC_STEREO); set->ReverseStereo=IsDlgButtonChecked(hDlg, IDC_REV_STEREO); set->Mute=IsDlgButtonChecked(hDlg, IDC_MUTE); + set->FAMute=IsDlgButtonChecked(hDlg, IDC_FAMT); set->NextAPUEnabled=IsDlgButtonChecked(hDlg, IDC_SPC700ON); set->SoundEnvelopeHeightReading=IsDlgButtonChecked(hDlg, IDC_ENVX); + set->FakeMuteFix=IsDlgButtonChecked(hDlg, IDC_FMUT); + set->UseWIPAPUTiming=IsDlgButtonChecked(hDlg, IDC_WIP1); set->DisableSoundEcho=(!IsDlgButtonChecked(hDlg, IDC_ECHO)); //set->DisableSampleCaching=(!IsDlgButtonChecked(hDlg, IDC_CACHING)); @@ -3888,6 +4441,7 @@ { EnableWindow(GetDlgItem(hDlg, IDC_CACHING), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_MUTE), FALSE); + EnableWindow(GetDlgItem(hDlg, IDC_FAMT), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_ANTIRES), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_SKIP_TYPE), TRUE); EnableWindow(GetDlgItem(hDlg, IDC_DRIVER), FALSE); @@ -3902,6 +4456,7 @@ EnableWindow(GetDlgItem(hDlg, IDC_BUFLEN), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_MIX), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_SYNC_TO_SOUND_CPU), FALSE); + EnableWindow(GetDlgItem(hDlg, IDC_FMUT), FALSE); } else @@ -3917,6 +4472,8 @@ EnableWindow(GetDlgItem(hDlg, IDC_SKIP_TYPE), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_ANTIRES), TRUE); EnableWindow(GetDlgItem(hDlg, IDC_MUTE), TRUE); + EnableWindow(GetDlgItem(hDlg, IDC_FAMT), TRUE); + EnableWindow(GetDlgItem(hDlg, IDC_FMUT), TRUE); if(!IsDlgButtonChecked(hDlg,IDC_ANTIRES)) EnableWindow(GetDlgItem(hDlg, IDC_CACHING), TRUE); if(IsDlgButtonChecked(hDlg,IDC_STEREO)) @@ -4858,12 +5415,10 @@ SendDlgItemMessage(hDlg, IDC_SRAM_SPIN,UDM_SETPOS,0, Settings.AutoSaveDelay); SendDlgItemMessage(hDlg, IDC_SPIN_MAX_SKIP, UDM_SETRANGE, 0, MAKELPARAM((short)59, (short)0)); SendDlgItemMessage(hDlg, IDC_SPIN_MAX_SKIP,UDM_SETPOS,0, Settings.AutoMaxSkipFrames); - SendDlgItemMessage(hDlg, IDC_SPIN_TURBO_SKIP, UDM_SETRANGE, 0, MAKELPARAM((short)59, (short)0)); + SendDlgItemMessage(hDlg, IDC_SPIN_TURBO_SKIP, UDM_SETRANGE, 0, MAKELPARAM((short)600, (short)0)); SendDlgItemMessage(hDlg, IDC_SPIN_TURBO_SKIP,UDM_SETPOS,0, Settings.TurboSkipFrames); - if(GUI.TurboModeToggle) - { - CheckDlgButton(hDlg,IDC_TOGGLE_TURBO,BST_CHECKED); - } + CheckDlgButton(hDlg,IDC_TOGGLE_TURBO,GUI.TurboModeToggle ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hDlg,IDC_INACTIVE_PAUSE,GUI.InactivePause ? BST_CHECKED : BST_UNCHECKED); } case WM_PAINT: { @@ -4914,9 +5469,9 @@ break; case IDOK: GetDlgItemText(hDlg, IDC_FREEZE_FOLDER,GUI.FreezeFileDir, MAX_PATH); - if(BST_CHECKED==IsDlgButtonChecked(hDlg, IDC_TOGGLE_TURBO)) - GUI.TurboModeToggle=true; - else GUI.TurboModeToggle=false; + GUI.TurboModeToggle = (BST_CHECKED==IsDlgButtonChecked(hDlg, IDC_TOGGLE_TURBO)); + GUI.InactivePause = (BST_CHECKED==IsDlgButtonChecked(hDlg, IDC_INACTIVE_PAUSE)); + Settings.TurboSkipFrames=SendDlgItemMessage(hDlg, IDC_SPIN_TURBO_SKIP, UDM_GETPOS, 0,0); Settings.AutoMaxSkipFrames=SendDlgItemMessage(hDlg, IDC_SPIN_MAX_SKIP, UDM_GETPOS, 0,0); Settings.AutoSaveDelay=SendDlgItemMessage(hDlg, IDC_SRAM_SPIN, UDM_GETPOS, 0,0); @@ -5185,7 +5740,7 @@ TreeView_GetItem(GetDlgItem(hDlg, tree), &tv); sprintf(selected, TEXT("%s"), temp); - while(TreeView_GetParent(GetDlgItem(hDlg, tree), hTreeTemp)!=NULL) + while(TreeView_GetParent(GetDlgItem(hDlg, tree), hTreeTemp)) { temp[0]='\0'; hTreeTemp=TreeView_GetParent(GetDlgItem(hDlg, tree), hTreeTemp); @@ -5249,7 +5804,7 @@ ZeroMemory(&tvis, sizeof(TV_INSERTSTRUCT)); tvis.hParent=hParent; tvis.hInsertAfter=TVI_SORT; - tvis.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE; + tvis.item.mask = TVIF_STATE | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE; tvis.item.pszText=wfd.cFileName; tvis.item.cchTextMax=MAX_PATH; tvis.item.iImage=4; @@ -5296,6 +5851,48 @@ //scan for folders } + +/* +void OnOdfinditem(NMHDR* pNMHDR, LRESULT* pResult) +{ + NMLVFINDITEM* pFindInfo = (NMLVFINDITEM*)pNMHDR; + LVFINDINFO FindItem = pFindInfo->lvfi; + + int i; + if(FindItem.flags & LVFI_STRING) + { + TCHAR chKeyL = FindItem.psz[0]; + TCHAR chKeyH = _toupper(FindItem.psz[0]);; + + // Search to end. + for( i = pFindInfo->iStart; i < m_LabelCount; i++ ) + { + if( ( chKeyL == m_arLabels[i].m_strText[0] ) + || ( chKeyH == m_arLabels[i].m_strText[0] ) + ) + { + *pResult = i; + return; + } + } + + // Search from 0 to start. + for( i = 0; i < pFindInfo->iStart; i++ ) + { + if( ( chKeyL == m_arLabels[i].m_strText[0] ) + || ( chKeyH == m_arLabels[i].m_strText[0] ) + ) + { + *pResult = i; + return; + } + } + } + + *pResult = -1; // Default action. +} +*/ + void ListFilesFromFolder(HWND hDlg, RomDataList** prdl) { RomDataList* rdl= *prdl; @@ -5307,7 +5904,6 @@ temp[0]='\0'; ZeroMemory(&tv, sizeof(TVITEM)); HTREEITEM hTreeItem=TreeView_GetSelection(GetDlgItem(hDlg, IDC_ROM_DIR)); - HTREEITEM hTreeTemp=hTreeItem; GetPathFromTree(hDlg, IDC_ROM_DIR, selected, hTreeItem); @@ -5374,8 +5970,8 @@ SendDlgItemMessage(hDlg, IDC_ROMLIST, WM_SETREDRAW, TRUE, 0); *prdl=rdl; -ListView_SetItemCount (GetDlgItem(hDlg, IDC_ROMLIST), count); - ListView_SetItemState(GetDlgItem(hDlg,IDC_ROMLIST), 0, LVIS_SELECTED|LVIS_FOCUSED,LVIS_FOCUSED|LVIS_SELECTED); + ListView_SetItemCount (GetDlgItem(hDlg, IDC_ROMLIST), count); + ListView_SetItemState (GetDlgItem(hDlg,IDC_ROMLIST), 0, LVIS_SELECTED|LVIS_FOCUSED,LVIS_FOCUSED|LVIS_SELECTED); } @@ -5403,8 +5999,9 @@ wcex.lpfnWndProc=DlgChildSplitProc; wcex.lpszClassName=tempclassname; wcex.hbrBackground=(HBRUSH)GetStockObject(LTGRAY_BRUSH); - wcex.hCursor=LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZEWE)); - ATOM aSplitter=RegisterClassEx(&wcex); + wcex.hCursor=LoadCursor(NULL, IDC_SIZEWE); +/// wcex.hCursor=LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZEWE)); +/// ATOM aSplitter=RegisterClassEx(&wcex); GetWindowRect(GetDlgItem(hDlg, IDC_ROM_DIR), &treeRect); GetWindowRect(GetDlgItem(hDlg, IDC_ROMLIST), &listRect); POINT p; @@ -5510,15 +6107,26 @@ HKEY hKey; char drive [_MAX_DRIVE + 1]; - strcpy(drive,"C:\\"); + strcpy (drive,"C:\\"); + // fix the NTDLR problem and set the correct directory if(!RegOpenKeyEx(HKEY_CURRENT_USER, MY_REG_KEY, 0, KEY_ALL_ACCESS, &hKey)) { - dw=MAX_PATH; + HANDLE fFile; + WIN32_FIND_DATA dirinfo; + dw = MAX_PATH; buffer[0]='\0'; - result=RegQueryValueEx(hKey, TEXT("Last Directory"), NULL,NULL, (uint8*)buffer,&dw); + result=RegQueryValueEx(hKey, TEXT("Last Directory"), NULL, NULL, (uint8*)buffer, &dw); RegCloseKey(hKey); - _splitpath(buffer,drive, NULL, NULL, NULL); + + fFile = FindFirstFile (buffer, &dirinfo); + + if ((dirinfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) + strcpy (buffer, "C:\\"); // default in case no directory was found + + FindClose (fFile); + + _splitpath (buffer, drive, NULL, NULL, NULL); } DWORD driveMask=GetLogicalDrives(); @@ -5537,8 +6145,10 @@ driveName[3]='\0'; UINT driveType=GetDriveType(driveName); driveName[2]='\0'; + TVINSERTSTRUCT tvis; ZeroMemory(&tvis, sizeof(TVINSERTSTRUCT)); + tvis.hParent=NULL; tvis.hInsertAfter=TVI_ROOT; tvis.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE; @@ -5547,7 +6157,8 @@ tvis.item.iSelectedImage=tvis.item.iImage=0; else if(driveType==DRIVE_REMOTE) tvis.item.iSelectedImage=tvis.item.iImage=2; - else tvis.item.iSelectedImage=tvis.item.iImage=1; + else + tvis.item.iSelectedImage=tvis.item.iImage=1; tvis.item.pszText=driveName; @@ -5561,7 +6172,6 @@ strcat(temp, TEXT("\\*")); bool subdir=false; - if(driveType==DRIVE_REMOVABLE || driveType == DRIVE_CDROM || driveType == DRIVE_UNKNOWN) { TV_INSERTSTRUCT tvis; @@ -5610,7 +6220,7 @@ hTreePrev=hTreeDrive; HTREEITEM hTemp=hTreePrev; TCHAR* temp=buffer; - TCHAR * temp2; + TCHAR* temp2; do { temp2=strstr(temp, TEXT("\\")); @@ -5621,12 +6231,14 @@ tvi.pszText=blah; tvi.cchTextMax=MAX_PATH; blah[0]='\0'; + if(temp2) *temp2='\0'; tvi.hItem=hTemp; TreeView_GetItem(GetDlgItem(hDlg, IDC_ROM_DIR), &tvi); - if(strcmp(blah, temp)) + + if(strcmp(blah, temp) != 0) { do { @@ -5637,54 +6249,33 @@ tvi.hItem=hTemp; TreeView_GetItem(GetDlgItem(hDlg, IDC_ROM_DIR), &tvi); } - while(hTemp!=NULL&&strcmp(blah, temp)); + while((hTemp != NULL) && (strcmp(blah, temp) != 0)); + if(hTemp!=NULL) { hTreePrev=hTemp; + if(temp2==NULL) - { TreeView_SelectItem(GetDlgItem(hDlg, IDC_ROM_DIR), hTreePrev); - TreeView_EnsureVisible (GetDlgItem(hDlg, IDC_ROM_DIR), hTreePrev); - } else - { - TCHAR get_dir[MAX_PATH]; - while(TreeView_GetChild(GetDlgItem(hDlg, IDC_ROM_DIR),hTreePrev)) - { - TreeView_DeleteItem(GetDlgItem(hDlg, IDC_ROM_DIR), TreeView_GetChild(GetDlgItem(hDlg, IDC_ROM_DIR),hTreePrev)); - } - TreeView_SetItemState(GetDlgItem(hDlg, IDC_ROM_DIR), hTreePrev, TVIS_EXPANDED ,TVIS_EXPANDED ); - GetPathFromTree(hDlg, IDC_ROM_DIR, get_dir, hTreePrev); - ExpandDir(get_dir, hTreePrev, hDlg); - //TreeView_Expand(GetDlgItem(hDlg, IDC_ROM_DIR), hTreePrev, TVE_EXPAND); - } + TreeView_Expand(GetDlgItem(hDlg, IDC_ROM_DIR), hTreePrev, TVE_EXPAND); + hTemp=TreeView_GetChild(GetDlgItem(hDlg, IDC_ROM_DIR), hTreePrev); } } else { - if(NULL==temp2) - { + if(temp2==NULL) TreeView_SelectItem(GetDlgItem(hDlg, IDC_ROM_DIR), hTemp); - } else - { - TCHAR get_dir[MAX_PATH]; - while(TreeView_GetChild(GetDlgItem(hDlg, IDC_ROM_DIR),hTreePrev)) - { - TreeView_DeleteItem(GetDlgItem(hDlg, IDC_ROM_DIR), TreeView_GetChild(GetDlgItem(hDlg, IDC_ROM_DIR),hTreePrev)); - } - TreeView_SetItemState(GetDlgItem(hDlg, IDC_ROM_DIR), hTreePrev, TVIS_EXPANDED ,TVIS_EXPANDED ); - GetPathFromTree(hDlg, IDC_ROM_DIR, get_dir, hTreePrev); - ExpandDir(get_dir, hTreePrev, hDlg); - //TreeView_Expand(GetDlgItem(hDlg, IDC_ROM_DIR), hTreePrev, TVE_EXPAND); - } + TreeView_Expand(GetDlgItem(hDlg, IDC_ROM_DIR), hTemp, TVE_EXPAND); hTemp=TreeView_GetChild(GetDlgItem(hDlg, IDC_ROM_DIR), hTemp); } if(temp2) temp=temp2+1; - else temp=NULL; + else + temp=NULL; } while(temp); @@ -5707,7 +6298,6 @@ } SendDlgItemMessage(hDlg, IDC_ROM_DIR, WM_SETREDRAW, TRUE, 0); - TreeView_EnsureVisible (GetDlgItem(hDlg, IDC_ROM_DIR), TreeView_GetSelection(GetDlgItem(hDlg, IDC_ROM_DIR))); } return true; //true sets the keyboard focus, in case we need this elsewhere } @@ -5832,7 +6422,7 @@ HKEY hKey; if(!RegOpenKeyEx(HKEY_CURRENT_USER, MY_REG_KEY, 0, KEY_ALL_ACCESS, &hKey)) { - RegSetValueEx(hKey, TEXT("Last Directory"), NULL, REG_SZ, (uint8*)temp, strlen(temp)+1); + RegSetValueEx(hKey, TEXT("Last Directory"), 0, REG_SZ, (uint8*)temp, strlen(temp)+1); RegCloseKey(hKey); } } @@ -5857,7 +6447,7 @@ } case WM_NOTIFY: { - if(lParam == NULL) + if(lParam == 0) return false; NMHDR* pNmh=(NMHDR*)lParam; switch(pNmh->idFrom) @@ -5866,6 +6456,13 @@ { switch(pNmh->code) { + case LVN_ODFINDITEM: + { +// NMLVFINDITEM* pFindItem = (NMLVFINDITEM*)lParam; + // for some reason returning which item to select doesn't work... +// return 2; + } + break; case LVN_GETDISPINFO: { int i, j; @@ -5926,15 +6523,16 @@ { TCHAR selected[MAX_PATH]; NMTREEVIEW* nmTv=(NMTREEVIEW*)lParam; + while(TreeView_GetChild(GetDlgItem(hDlg, IDC_ROM_DIR),nmTv->itemNew.hItem)) { TreeView_DeleteItem(GetDlgItem(hDlg, IDC_ROM_DIR), TreeView_GetChild(GetDlgItem(hDlg, IDC_ROM_DIR),nmTv->itemNew.hItem)); } + if(nmTv->action&TVE_EXPAND) { GetPathFromTree(hDlg, IDC_ROM_DIR, selected,nmTv->itemNew.hItem); - ExpandDir(selected, nmTv->itemNew.hItem, hDlg); } else @@ -6595,12 +7193,21 @@ curr=valid_ext; ZeroMemory(curr, sizeof(ExtList)); ifstream in; + +#if (((defined(_MSC_VER) && _MSC_VER >= 1300)) || defined(__MINGW32__)) + in.open("Valid.Ext", ios::in); +#else in.open("Valid.Ext", ios::in|ios::nocreate); +#endif if (!in.is_open()) { in.clear(); MakeExtFile(); + #if (((defined(_MSC_VER) && _MSC_VER >= 1300)) || defined(__MINGW32__)) + in.open("Valid.Ext", ios::in); + #else in.open("Valid.Ext", ios::in|ios::nocreate); + #endif if(!in.is_open()) { MessageBox(GUI.hWnd, "Fatal Error: The File \"Valid.Ext\" could not be found or created.", "Error", MB_ICONERROR|MB_OK); @@ -6852,6 +7459,43 @@ return DDENUMRET_OK; } +void EnableDisableKeyFields (int index, HWND hDlg) +{ + bool enableUnTurboable; + if(index < 5) + { + SetDlgItemText(hDlg,IDC_LABEL_RIGHT,INPUTCONFIG_LABEL_RIGHT); + SetDlgItemText(hDlg,IDC_LABEL_UPLEFT,INPUTCONFIG_LABEL_UPLEFT); + SetDlgItemText(hDlg,IDC_LABEL_UPRIGHT,INPUTCONFIG_LABEL_UPRIGHT); + SetDlgItemText(hDlg,IDC_LABEL_DOWNRIGHT,INPUTCONFIG_LABEL_DOWNRIGHT); + SetDlgItemText(hDlg,IDC_LABEL_UP,INPUTCONFIG_LABEL_UP); + SetDlgItemText(hDlg,IDC_LABEL_LEFT,INPUTCONFIG_LABEL_LEFT); + SetDlgItemText(hDlg,IDC_LABEL_DOWN,INPUTCONFIG_LABEL_DOWN); + SetDlgItemText(hDlg,IDC_LABEL_DOWNLEFT,INPUTCONFIG_LABEL_DOWNLEFT); + enableUnTurboable = true; + } + else + { + SetDlgItemText(hDlg,IDC_LABEL_UP,INPUTCONFIG_LABEL_MAKE_TURBO); + SetDlgItemText(hDlg,IDC_LABEL_LEFT,INPUTCONFIG_LABEL_MAKE_HELD); + SetDlgItemText(hDlg,IDC_LABEL_DOWN,INPUTCONFIG_LABEL_MAKE_TURBO_HELD); + SetDlgItemText(hDlg,IDC_LABEL_RIGHT,INPUTCONFIG_LABEL_CLEAR_TOGGLES_AND_TURBO); + SetDlgItemText(hDlg,IDC_LABEL_UPLEFT,INPUTCONFIG_LABEL_UNUSED); + SetDlgItemText(hDlg,IDC_LABEL_UPRIGHT,INPUTCONFIG_LABEL_UNUSED); + SetDlgItemText(hDlg,IDC_LABEL_DOWNLEFT,INPUTCONFIG_LABEL_UNUSED); + SetDlgItemText(hDlg,IDC_LABEL_DOWNRIGHT,INPUTCONFIG_LABEL_UNUSED); + SetDlgItemText(hDlg,IDC_UPLEFT,INPUTCONFIG_LABEL_UNUSED); + SetDlgItemText(hDlg,IDC_UPRIGHT,INPUTCONFIG_LABEL_UNUSED); + SetDlgItemText(hDlg,IDC_DWNLEFT,INPUTCONFIG_LABEL_UNUSED); + SetDlgItemText(hDlg,IDC_DWNRIGHT,INPUTCONFIG_LABEL_UNUSED); + enableUnTurboable = false; + } + + EnableWindow(GetDlgItem(hDlg,IDC_UPLEFT), enableUnTurboable); + EnableWindow(GetDlgItem(hDlg,IDC_UPRIGHT), enableUnTurboable); + EnableWindow(GetDlgItem(hDlg,IDC_DWNRIGHT), enableUnTurboable); + EnableWindow(GetDlgItem(hDlg,IDC_DWNLEFT), enableUnTurboable); +} int CALLBACK DlgFunky(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { @@ -6929,6 +7573,10 @@ { SendDlgItemMessage(hDlg, IDC_HIRES, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); } + if(Settings.HeightExtend) + { + SendDlgItemMessage(hDlg, IDC_HEIGHT_EXTEND, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); + } if(Settings.Mode7Interpolate) { SendDlgItemMessage(hDlg, IDC_BILINEARMD7, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); @@ -6941,6 +7589,10 @@ { SendDlgItemMessage(hDlg, IDC_STRETCH, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); } + if(Settings.AspectRatio) + { + SendDlgItemMessage(hDlg, IDC_ASPECT, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); + } if(GUI.FullScreen) { SendDlgItemMessage(hDlg, IDC_FULLSCREEN, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); @@ -6961,6 +7613,7 @@ { EnableWindow(GetDlgItem(hDlg, IDC_LIMITFRAMES), TRUE); } + EnableWindow(GetDlgItem(hDlg, IDC_ASPECT), GUI.Stretch); strcpy(temp,"None"); @@ -7014,9 +7667,6 @@ EnableWindow(GetDlgItem(hDlg,IDC_HIRES),false); } - - - LVCOLUMN col; @@ -7047,6 +7697,8 @@ DirectX.lpDD->EnumDisplayModes(0,NULL,GetDlgItem(hDlg,IDC_VIDMODELIST),(LPDDENUMMODESCALLBACK)EnumModesCallback); + // have to start focus on something like this or Escape won't exit the dialog + SetFocus(GetDlgItem(hDlg,IDC_FILTERBOX)); break; case WM_CLOSE: @@ -7057,6 +7709,17 @@ switch(LOWORD(wParam)) { + case IDC_STRETCH: + if(IsDlgButtonChecked(hDlg, IDC_STRETCH)==BST_CHECKED) + { + EnableWindow(GetDlgItem(hDlg, IDC_ASPECT), TRUE); + } + else + { + EnableWindow(GetDlgItem(hDlg, IDC_ASPECT), FALSE); + } + break; + case IDC_AUTOFRAME: if(BN_CLICKED==HIWORD(wParam)||BN_DBLCLK==HIWORD(wParam)) { @@ -7142,6 +7805,7 @@ Settings.SupportHiRes = false; GUI.NextScale = 0; } + Settings.HeightExtend = IsDlgButtonChecked(hDlg, IDC_HEIGHT_EXTEND); Settings.Mode7Interpolate = IsDlgButtonChecked(hDlg, IDC_BILINEARMD7); Settings.AutoMaxSkipFrames = IsDlgButtonChecked(hDlg, IDC_AUTOFRAME); GUI.DoubleBuffered = (bool)(IsDlgButtonChecked(hDlg, IDC_DBLBUFFER)==BST_CHECKED); @@ -7167,9 +7831,18 @@ GUI.Stretch = (bool)(IsDlgButtonChecked(hDlg, IDC_STRETCH)==BST_CHECKED); + Settings.AspectRatio = (bool)(IsDlgButtonChecked(hDlg, IDC_ASPECT)==BST_CHECKED); GUI.FullScreen = (bool)(IsDlgButtonChecked(hDlg, IDC_FULLSCREEN)==BST_CHECKED); Settings.DisplayFrameRate = IsDlgButtonChecked(hDlg, IDC_SHOWFPS); - + + + // we might've change the region that the game draws over + // (by turning on "maintain aspect ratio", or turning on "extend height" when "maintain aspect ratio" is already on), + // so we must invalidate the window to redraw black + // behind the possibly-newly-revealed areas of the window + RedrawWindow((HWND)GetParent(hDlg),NULL,NULL, RDW_INVALIDATE | RDW_INTERNALPAINT | RDW_ERASENOW); + + // dmindex=0; EndDialog(hDlg,0); if(hBmp) @@ -7365,6 +8038,30 @@ return false; } + +static void set_buttoninfo(int index, HWND hDlg) +{ + SendDlgItemMessage(hDlg,IDC_UP,WM_USER+44,Joypad[index].Up,0); + SendDlgItemMessage(hDlg,IDC_LEFT,WM_USER+44,Joypad[index].Left,0); + SendDlgItemMessage(hDlg,IDC_DOWN,WM_USER+44,Joypad[index].Down,0); + SendDlgItemMessage(hDlg,IDC_RIGHT,WM_USER+44,Joypad[index].Right,0); + SendDlgItemMessage(hDlg,IDC_A,WM_USER+44,Joypad[index].A,0); + SendDlgItemMessage(hDlg,IDC_B,WM_USER+44,Joypad[index].B,0); + SendDlgItemMessage(hDlg,IDC_X,WM_USER+44,Joypad[index].X,0); + SendDlgItemMessage(hDlg,IDC_Y,WM_USER+44,Joypad[index].Y,0); + SendDlgItemMessage(hDlg,IDC_L,WM_USER+44,Joypad[index].L,0); + SendDlgItemMessage(hDlg,IDC_R,WM_USER+44,Joypad[index].R,0); + SendDlgItemMessage(hDlg,IDC_START,WM_USER+44,Joypad[index].Start,0); + SendDlgItemMessage(hDlg,IDC_SELECT,WM_USER+44,Joypad[index].Select,0); + if(index < 5) + { + SendDlgItemMessage(hDlg,IDC_UPLEFT,WM_USER+44,Joypad[index].Left_Up,0); + SendDlgItemMessage(hDlg,IDC_UPRIGHT,WM_USER+44,Joypad[index].Right_Up,0); + SendDlgItemMessage(hDlg,IDC_DWNLEFT,WM_USER+44,Joypad[index].Left_Down,0); + SendDlgItemMessage(hDlg,IDC_DWNRIGHT,WM_USER+44,Joypad[index].Right_Down,0); + } +} + void TranslateKey(WORD keyz,char *out); //HWND funky; SJoyState JoystickF [16]; @@ -7388,7 +8085,7 @@ static int index=0; - static SJoypad pads[5]; + static SJoypad pads[10]; //HBRUSH g_hbrBackground; @@ -7424,11 +8121,10 @@ SetDlgItemText(hDlg,IDC_JPTOGGLE,INPUTCONFIG_JPTOGGLE); SetDlgItemText(hDlg,IDC_OK,BUTTON_OK); SetDlgItemText(hDlg,IDC_CANCEL,BUTTON_CANCEL); - SetDlgItemText(hDlg,IDC_DIAGTOGGLE,INPUTCONFIG_DIAGTOGGLE); +/// SetDlgItemText(hDlg,IDC_DIAGTOGGLE,INPUTCONFIG_DIAGTOGGLE); SetDlgItemText(hDlg,IDC_LABEL_UP,INPUTCONFIG_LABEL_UP); SetDlgItemText(hDlg,IDC_LABEL_DOWN,INPUTCONFIG_LABEL_DOWN); SetDlgItemText(hDlg,IDC_LABEL_LEFT,INPUTCONFIG_LABEL_LEFT); - SetDlgItemText(hDlg,IDC_LABEL_RIGHT,INPUTCONFIG_LABEL_RIGHT); SetDlgItemText(hDlg,IDC_LABEL_A,INPUTCONFIG_LABEL_A); SetDlgItemText(hDlg,IDC_LABEL_B,INPUTCONFIG_LABEL_B); SetDlgItemText(hDlg,IDC_LABEL_X,INPUTCONFIG_LABEL_X); @@ -7440,59 +8136,56 @@ SetDlgItemText(hDlg,IDC_LABEL_UPRIGHT,INPUTCONFIG_LABEL_UPRIGHT); SetDlgItemText(hDlg,IDC_LABEL_UPLEFT,INPUTCONFIG_LABEL_UPLEFT); SetDlgItemText(hDlg,IDC_LABEL_DOWNRIGHT,INPUTCONFIG_LABEL_DOWNRIGHT); - SetDlgItemText(hDlg,IDC_LABEL_DOWNRIGHT,INPUTCONFIG_LABEL_DOWNRIGHT); + SetDlgItemText(hDlg,IDC_LABEL_DOWNLEFT,INPUTCONFIG_LABEL_DOWNLEFT); SetDlgItemText(hDlg,IDC_LABEL_BLUE,INPUTCONFIG_LABEL_BLUE); + for(i=5;i<10;i++) + Joypad[i].Left_Up = Joypad[i].Right_Up = Joypad[i].Left_Down = Joypad[i].Right_Down = 0; + hBmp=(HBITMAP)LoadImage(NULL, TEXT("PBortas.bmp"), IMAGE_BITMAP, 0,0, LR_CREATEDIBSECTION | LR_LOADFROMFILE); - memcpy(pads, Joypad, 5*sizeof(SJoypad)); + memcpy(pads, Joypad, 10*sizeof(SJoypad)); + for( i=0;i<256;i++) - { GetAsyncKeyState(i); - } + for( C = 0; C != 16; C ++) JoystickF[C].Attached = joyGetDevCaps( JOYSTICKID1+C, &JoystickF[C].Caps, sizeof( JOYCAPS)) == JOYERR_NOERROR; + for (i=1;i<6;i++) { - sprintf(temp,INPUTCONFIG_JPCOMBO,i); SendDlgItemMessage(hDlg,IDC_JPCOMBO,CB_ADDSTRING,0,(LPARAM)(LPCTSTR)temp); } - SendDlgItemMessage(hDlg,IDC_JPCOMBO,CB_SETCURSEL,(WPARAM)0,0); - if(Joypad[index].Enabled) - { - SendDlgItemMessage(hDlg,IDC_JPTOGGLE,BM_SETCHECK,(WPARAM)BST_CHECKED,0); - } - else + for (i=6;i<11;i++) { - SendDlgItemMessage(hDlg,IDC_JPTOGGLE,BM_SETCHECK,(WPARAM)BST_UNCHECKED,0); + sprintf(temp,INPUTCONFIG_JPCOMBO INPUTCONFIG_LABEL_CONTROLLER_TURBO_PANEL_MOD,i-5); + SendDlgItemMessage(hDlg,IDC_JPCOMBO,CB_ADDSTRING,0,(LPARAM)(LPCTSTR)temp); } - SendDlgItemMessage(hDlg,IDC_UP,WM_USER+44,Joypad[index].Up,0); - SendDlgItemMessage(hDlg,IDC_LEFT,WM_USER+44,Joypad[index].Left,0); - SendDlgItemMessage(hDlg,IDC_DOWN,WM_USER+44,Joypad[index].Down,0); - SendDlgItemMessage(hDlg,IDC_RIGHT,WM_USER+44,Joypad[index].Right,0); - SendDlgItemMessage(hDlg,IDC_A,WM_USER+44,Joypad[index].A,0); - SendDlgItemMessage(hDlg,IDC_B,WM_USER+44,Joypad[index].B,0); - SendDlgItemMessage(hDlg,IDC_X,WM_USER+44,Joypad[index].X,0); - SendDlgItemMessage(hDlg,IDC_Y,WM_USER+44,Joypad[index].Y,0); - SendDlgItemMessage(hDlg,IDC_L,WM_USER+44,Joypad[index].L,0); - SendDlgItemMessage(hDlg,IDC_R,WM_USER+44,Joypad[index].R,0); - SendDlgItemMessage(hDlg,IDC_START,WM_USER+44,Joypad[index].Start,0); - SendDlgItemMessage(hDlg,IDC_SELECT,WM_USER+44,Joypad[index].Select,0); - SendDlgItemMessage(hDlg,IDC_UPLEFT,WM_USER+44,Joypad[index].Left_Up,0); - SendDlgItemMessage(hDlg,IDC_UPRIGHT,WM_USER+44,Joypad[index].Right_Up,0); - SendDlgItemMessage(hDlg,IDC_DWNLEFT,WM_USER+44,Joypad[index].Left_Down,0); - SendDlgItemMessage(hDlg,IDC_DWNRIGHT,WM_USER+44,Joypad[index].Right_Down,0); + SendDlgItemMessage(hDlg,IDC_JPCOMBO,CB_SETCURSEL,(WPARAM)0,0); + + SendDlgItemMessage(hDlg,IDC_JPTOGGLE,BM_SETCHECK, Joypad[index].Enabled ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_ALLOWLEFTRIGHT,BM_SETCHECK, !Settings.DisallowLeftRight ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + + set_buttoninfo(index,hDlg); + + EnableDisableKeyFields(index,hDlg); + + PostMessage(hDlg,WM_COMMAND, CBN_SELCHANGE<<16, 0); SetFocus(GetDlgItem(hDlg,IDC_JPCOMBO)); - return true; break; case WM_CLOSE: EndDialog(hDlg, 0); return TRUE; + case WM_USER+46: + // refresh command, for clicking away from a selected field + index = SendDlgItemMessage(hDlg,IDC_JPCOMBO,CB_GETCURSEL,0,0); + set_buttoninfo(index,hDlg); + return TRUE; case WM_USER+43: //MessageBox(hDlg,"USER+43 CAUGHT","moo",MB_OK); which = GetDlgCtrlID((HWND)lParam); @@ -7563,29 +8256,16 @@ break; } - SendDlgItemMessage(hDlg,IDC_UP,WM_USER+44,Joypad[index].Up,0); - SendDlgItemMessage(hDlg,IDC_LEFT,WM_USER+44,Joypad[index].Left,0); - SendDlgItemMessage(hDlg,IDC_DOWN,WM_USER+44,Joypad[index].Down,0); - SendDlgItemMessage(hDlg,IDC_RIGHT,WM_USER+44,Joypad[index].Right,0); - SendDlgItemMessage(hDlg,IDC_A,WM_USER+44,Joypad[index].A,0); - SendDlgItemMessage(hDlg,IDC_B,WM_USER+44,Joypad[index].B,0); - SendDlgItemMessage(hDlg,IDC_X,WM_USER+44,Joypad[index].X,0); - SendDlgItemMessage(hDlg,IDC_Y,WM_USER+44,Joypad[index].Y,0); - SendDlgItemMessage(hDlg,IDC_L,WM_USER+44,Joypad[index].L,0); - SendDlgItemMessage(hDlg,IDC_R,WM_USER+44,Joypad[index].R,0); - SendDlgItemMessage(hDlg,IDC_START,WM_USER+44,Joypad[index].Start,0); - SendDlgItemMessage(hDlg,IDC_SELECT,WM_USER+44,Joypad[index].Select,0); - SendDlgItemMessage(hDlg,IDC_UPLEFT,WM_USER+44,Joypad[index].Left_Up,0); - SendDlgItemMessage(hDlg,IDC_UPRIGHT,WM_USER+44,Joypad[index].Right_Up,0); - SendDlgItemMessage(hDlg,IDC_DWNLEFT,WM_USER+44,Joypad[index].Left_Down,0); - SendDlgItemMessage(hDlg,IDC_DWNRIGHT,WM_USER+44,Joypad[index].Right_Down,0); + + set_buttoninfo(index,hDlg); + PostMessage(hDlg,WM_NEXTDLGCTL,0,0); return true; case WM_COMMAND: switch(LOWORD(wParam)) { case IDCANCEL: - memcpy(Joypad, pads, 5*sizeof(SJoypad)); + memcpy(Joypad, pads, 10*sizeof(SJoypad)); EndDialog(hDlg,0); if(hBmp) { @@ -7593,7 +8273,9 @@ hBmp=NULL; } break; + case IDOK: + Settings.DisallowLeftRight = !IsDlgButtonChecked(hDlg, IDC_ALLOWLEFTRIGHT); EndDialog(hDlg,0); if(hBmp) { @@ -7601,65 +8283,314 @@ hBmp=NULL; } break; - case IDC_JPTOGGLE: + + case IDC_JPTOGGLE: // joypad Enable toggle index = SendDlgItemMessage(hDlg,IDC_JPCOMBO,CB_GETCURSEL,0,0); Joypad[index].Enabled=IsDlgButtonChecked(hDlg,IDC_JPTOGGLE); + set_buttoninfo(index, hDlg); // update display of conflicts break; - case IDC_DIAGTOGGLE: - if(IsWindowEnabled(GetDlgItem(hDlg,IDC_UPLEFT))==0) - { - - EnableWindow(GetDlgItem(hDlg,IDC_UPLEFT),TRUE); - - EnableWindow(GetDlgItem(hDlg,IDC_UPRIGHT),TRUE); - - EnableWindow(GetDlgItem(hDlg,IDC_DWNLEFT),TRUE); - - EnableWindow(GetDlgItem(hDlg,IDC_DWNRIGHT),TRUE); - - } - else - { - - EnableWindow(GetDlgItem(hDlg,IDC_UPLEFT),FALSE); - EnableWindow(GetDlgItem(hDlg,IDC_UPRIGHT),FALSE); - - EnableWindow(GetDlgItem(hDlg,IDC_DWNLEFT),FALSE); - - EnableWindow(GetDlgItem(hDlg,IDC_DWNRIGHT),FALSE); - } - break; } switch(HIWORD(wParam)) { case CBN_SELCHANGE: index = SendDlgItemMessage(hDlg,IDC_JPCOMBO,CB_GETCURSEL,0,0); SendDlgItemMessage(hDlg,IDC_JPCOMBO,CB_SETCURSEL,(WPARAM)index,0); - if(Joypad[index].Enabled) + if(index < 5) { - SendDlgItemMessage(hDlg,IDC_JPTOGGLE,BM_SETCHECK,(WPARAM)BST_CHECKED,0); + SendDlgItemMessage(hDlg,IDC_JPTOGGLE,BM_SETCHECK, Joypad[index].Enabled ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + EnableWindow(GetDlgItem(hDlg,IDC_JPTOGGLE),TRUE); } else { - SendDlgItemMessage(hDlg,IDC_JPTOGGLE,BM_SETCHECK,(WPARAM)BST_UNCHECKED,0); - } - SendDlgItemMessage(hDlg,IDC_UP,WM_USER+44,Joypad[index].Up,0); - SendDlgItemMessage(hDlg,IDC_LEFT,WM_USER+44,Joypad[index].Left,0); - SendDlgItemMessage(hDlg,IDC_DOWN,WM_USER+44,Joypad[index].Down,0); - SendDlgItemMessage(hDlg,IDC_RIGHT,WM_USER+44,Joypad[index].Right,0); - SendDlgItemMessage(hDlg,IDC_A,WM_USER+44,Joypad[index].A,0); - SendDlgItemMessage(hDlg,IDC_B,WM_USER+44,Joypad[index].B,0); - SendDlgItemMessage(hDlg,IDC_X,WM_USER+44,Joypad[index].X,0); - SendDlgItemMessage(hDlg,IDC_Y,WM_USER+44,Joypad[index].Y,0); - SendDlgItemMessage(hDlg,IDC_L,WM_USER+44,Joypad[index].L,0); - SendDlgItemMessage(hDlg,IDC_R,WM_USER+44,Joypad[index].R,0); - SendDlgItemMessage(hDlg,IDC_START,WM_USER+44,Joypad[index].Start,0); - SendDlgItemMessage(hDlg,IDC_SELECT,WM_USER+44,Joypad[index].Select,0); - SendDlgItemMessage(hDlg,IDC_UPLEFT,WM_USER+44,Joypad[index].Left_Up,0); - SendDlgItemMessage(hDlg,IDC_UPRIGHT,WM_USER+44,Joypad[index].Right_Up,0); - SendDlgItemMessage(hDlg,IDC_DWNLEFT,WM_USER+44,Joypad[index].Left_Down,0); - SendDlgItemMessage(hDlg,IDC_DWNRIGHT,WM_USER+44,Joypad[index].Right_Down,0); + SendDlgItemMessage(hDlg,IDC_JPTOGGLE,BM_SETCHECK, Joypad[index-5].Enabled ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + EnableWindow(GetDlgItem(hDlg,IDC_JPTOGGLE),FALSE); + } + + set_buttoninfo(index,hDlg); + + EnableDisableKeyFields(index,hDlg); + + break; + } + return FALSE; + + } + + return FALSE; +} + + +static void set_hotkeyinfo(HWND hDlg) +{ + int index = SendDlgItemMessage(hDlg,IDC_HKCOMBO,CB_GETCURSEL,0,0); + + if(index == 0) + { + // set page 1 fields + SendDlgItemMessage(hDlg,IDC_HOTKEY1,WM_USER+44,CustomKeys.SpeedUp.key,CustomKeys.SpeedUp.modifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEY2,WM_USER+44,CustomKeys.SpeedDown.key,CustomKeys.SpeedDown.modifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEY3,WM_USER+44,CustomKeys.Pause.key,CustomKeys.Pause.modifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEY4,WM_USER+44,CustomKeys.FrameAdvance.key,CustomKeys.FrameAdvance.modifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEY5,WM_USER+44,CustomKeys.FastForward.key,CustomKeys.FastForward.modifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEY6,WM_USER+44,CustomKeys.SkipUp.key,CustomKeys.SkipUp.modifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEY7,WM_USER+44,CustomKeys.SkipDown.key,CustomKeys.SkipDown.modifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEY8,WM_USER+44,CustomKeys.ScopeTurbo.key,CustomKeys.ScopeTurbo.modifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEY9,WM_USER+44,CustomKeys.ScopePause.key,CustomKeys.ScopePause.modifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEY10,WM_USER+44,CustomKeys.ShowPressed.key,CustomKeys.ShowPressed.modifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEY11,WM_USER+44,CustomKeys.FrameCount.key,CustomKeys.FrameCount.modifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEY12,WM_USER+44,CustomKeys.ReadOnly.key,CustomKeys.ReadOnly.modifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEY13,WM_USER+44,CustomKeys.SaveScreenShot.key,CustomKeys.SaveScreenShot.modifiers); + } + else + { + // set page 2 fields + SendDlgItemMessage(hDlg,IDC_HOTKEY1,WM_USER+44,CustomKeys.BGL1.key,CustomKeys.BGL1.modifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEY2,WM_USER+44,CustomKeys.BGL2.key,CustomKeys.BGL2.modifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEY3,WM_USER+44,CustomKeys.BGL3.key,CustomKeys.BGL3.modifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEY4,WM_USER+44,CustomKeys.BGL4.key,CustomKeys.BGL4.modifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEY5,WM_USER+44,CustomKeys.BGL5.key,CustomKeys.BGL5.modifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEY6,WM_USER+44,CustomKeys.ClippingWindows.key,CustomKeys.ClippingWindows.modifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEY7,WM_USER+44,CustomKeys.BGLHack.key,CustomKeys.BGLHack.modifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEY8,WM_USER+44,CustomKeys.Transparency.key,CustomKeys.Transparency.modifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEY9,WM_USER+44,CustomKeys.HDMA.key,CustomKeys.HDMA.modifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEY10,WM_USER+44,CustomKeys.GLCube.key,CustomKeys.GLCube.modifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEY11,WM_USER+44,CustomKeys.InterpMode7.key,CustomKeys.InterpMode7.modifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEY12,WM_USER+44,CustomKeys.JoypadSwap.key,CustomKeys.JoypadSwap.modifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEY13,WM_USER+44,CustomKeys.SwitchControllers.key,CustomKeys.SwitchControllers.modifiers); + } + + SendDlgItemMessage(hDlg,IDC_SLOTPLUS,WM_USER+44,CustomKeys.SlotPlus.key,CustomKeys.SlotPlus.modifiers); + SendDlgItemMessage(hDlg,IDC_SLOTMINUS,WM_USER+44,CustomKeys.SlotMinus.key,CustomKeys.SlotMinus.modifiers); + SendDlgItemMessage(hDlg,IDC_SLOTSAVE,WM_USER+44,CustomKeys.SlotSave.key,CustomKeys.SlotSave.modifiers); + SendDlgItemMessage(hDlg,IDC_SLOTLOAD,WM_USER+44,CustomKeys.SlotLoad.key,CustomKeys.SlotLoad.modifiers); + int i; + for(i = 0 ; i < 10 ; i++) SendDlgItemMessage(hDlg,IDC_SAVE1+i,WM_USER+44,CustomKeys.Save[i].key,CustomKeys.Save[i].modifiers); + for(i = 0 ; i < 10 ; i++) SendDlgItemMessage(hDlg,IDC_SAVE11+i,WM_USER+44,CustomKeys.Load[i].key,CustomKeys.Load[i].modifiers); + + if(index == 0) + { + // set page 1 label text + SetDlgItemText(hDlg,IDC_LABEL_HK1,HOTKEYS_LABEL_1_1); + SetDlgItemText(hDlg,IDC_LABEL_HK2,HOTKEYS_LABEL_1_2); + SetDlgItemText(hDlg,IDC_LABEL_HK3,HOTKEYS_LABEL_1_3); + SetDlgItemText(hDlg,IDC_LABEL_HK4,HOTKEYS_LABEL_1_4); + SetDlgItemText(hDlg,IDC_LABEL_HK5,HOTKEYS_LABEL_1_5); + SetDlgItemText(hDlg,IDC_LABEL_HK6,HOTKEYS_LABEL_1_6); + SetDlgItemText(hDlg,IDC_LABEL_HK7,HOTKEYS_LABEL_1_7); + SetDlgItemText(hDlg,IDC_LABEL_HK8,HOTKEYS_LABEL_1_8); + SetDlgItemText(hDlg,IDC_LABEL_HK9,HOTKEYS_LABEL_1_9); + SetDlgItemText(hDlg,IDC_LABEL_HK10,HOTKEYS_LABEL_1_10); + SetDlgItemText(hDlg,IDC_LABEL_HK11,HOTKEYS_LABEL_1_11); + SetDlgItemText(hDlg,IDC_LABEL_HK12,HOTKEYS_LABEL_1_12); + SetDlgItemText(hDlg,IDC_LABEL_HK13,HOTKEYS_LABEL_1_13); + } + else + { + // set page 2 label text + SetDlgItemText(hDlg,IDC_LABEL_HK1,HOTKEYS_LABEL_2_1); + SetDlgItemText(hDlg,IDC_LABEL_HK2,HOTKEYS_LABEL_2_2); + SetDlgItemText(hDlg,IDC_LABEL_HK3,HOTKEYS_LABEL_2_3); + SetDlgItemText(hDlg,IDC_LABEL_HK4,HOTKEYS_LABEL_2_4); + SetDlgItemText(hDlg,IDC_LABEL_HK5,HOTKEYS_LABEL_2_5); + SetDlgItemText(hDlg,IDC_LABEL_HK6,HOTKEYS_LABEL_2_6); + SetDlgItemText(hDlg,IDC_LABEL_HK7,HOTKEYS_LABEL_2_7); + SetDlgItemText(hDlg,IDC_LABEL_HK8,HOTKEYS_LABEL_2_8); + SetDlgItemText(hDlg,IDC_LABEL_HK9,HOTKEYS_LABEL_2_9); + SetDlgItemText(hDlg,IDC_LABEL_HK10,HOTKEYS_LABEL_2_10); + SetDlgItemText(hDlg,IDC_LABEL_HK11,HOTKEYS_LABEL_2_11); + SetDlgItemText(hDlg,IDC_LABEL_HK12,HOTKEYS_LABEL_2_12); + SetDlgItemText(hDlg,IDC_LABEL_HK13,HOTKEYS_LABEL_2_13); + } +} + +// DlgHotkeyConfig +int CALLBACK DlgHotkeyConfig(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + int i, which; + static int index=0; + + + static SCustomKeys keys; + + + //HBRUSH g_hbrBackground; + InitKeyCustomControl(); +switch(msg) + { + case WM_PAINT: + { + PAINTSTRUCT ps; + BeginPaint (hDlg, &ps); + + EndPaint (hDlg, &ps); + } + return true; + case WM_INITDIALOG: + SetWindowText(hDlg,HOTKEYS_TITLE); + + for(i=1;i<=2;i++) + { + char temp[256]; + sprintf(temp,HOTKEYS_HKCOMBO,i); + SendDlgItemMessage(hDlg,IDC_HKCOMBO,CB_ADDSTRING,0,(LPARAM)(LPCTSTR)temp); + } + + SendDlgItemMessage(hDlg,IDC_HKCOMBO,CB_SETCURSEL,(WPARAM)0,0); + + memcpy(&keys, &CustomKeys, sizeof(SCustomKeys)); + for( i=0;i<256;i++) + { + GetAsyncKeyState(i); + } + + SetDlgItemText(hDlg,IDC_LABEL_BLUE,HOTKEYS_LABEL_BLUE); + + set_hotkeyinfo(hDlg); + + PostMessage(hDlg,WM_COMMAND, CBN_SELCHANGE<<16, 0); + + SetFocus(GetDlgItem(hDlg,IDC_HKCOMBO)); + + + return true; + break; + case WM_CLOSE: + EndDialog(hDlg, 0); + return TRUE; + case WM_USER+46: + // refresh command, for clicking away from a selected field + index = SendDlgItemMessage(hDlg,IDC_HKCOMBO,CB_GETCURSEL,0,0); + set_hotkeyinfo(hDlg); + return TRUE; + case WM_USER+43: + { + //MessageBox(hDlg,"USER+43 CAUGHT","moo",MB_OK); + int modifiers = 0; + if(GetAsyncKeyState(VK_MENU) || wParam == VK_MENU) + modifiers |= CUSTKEY_ALT_MASK; + if(GetAsyncKeyState(VK_CONTROL) || wParam == VK_CONTROL) + modifiers |= CUSTKEY_CTRL_MASK; + if(GetAsyncKeyState(VK_SHIFT) || wParam == VK_SHIFT) + modifiers |= CUSTKEY_SHIFT_MASK; + + int index = SendDlgItemMessage(hDlg,IDC_HKCOMBO,CB_GETCURSEL,0,0); + + which = GetDlgCtrlID((HWND)lParam); + + switch(which) + { + case IDC_HOTKEY1: + if(index == 0) CustomKeys.SpeedUp.key = wParam, CustomKeys.SpeedUp.modifiers = modifiers; + else CustomKeys.BGL1.key = wParam, CustomKeys.BGL1.modifiers = modifiers; + break; + case IDC_HOTKEY2: + if(index == 0) CustomKeys.SpeedDown.key = wParam, CustomKeys.SpeedDown.modifiers = modifiers; + else CustomKeys.BGL2.key = wParam, CustomKeys.BGL2.modifiers = modifiers; + break; + case IDC_HOTKEY3: + if(index == 0) CustomKeys.Pause.key = wParam, CustomKeys.Pause.modifiers = modifiers; + else CustomKeys.BGL3.key = wParam, CustomKeys.BGL3.modifiers = modifiers; + break; + case IDC_HOTKEY4: + if(index == 0) CustomKeys.FrameAdvance.key = wParam, CustomKeys.FrameAdvance.modifiers = modifiers; + else CustomKeys.BGL4.key = wParam, CustomKeys.BGL4.modifiers = modifiers; + break; + case IDC_HOTKEY5: + if(index == 0) CustomKeys.FastForward.key = wParam, CustomKeys.FastForward.modifiers = modifiers; + else CustomKeys.BGL5.key = wParam, CustomKeys.BGL5.modifiers = modifiers; + break; + case IDC_HOTKEY6: + if(index == 0) CustomKeys.SkipUp.key = wParam, CustomKeys.SkipUp.modifiers = modifiers; + else CustomKeys.ClippingWindows.key = wParam, CustomKeys.ClippingWindows.modifiers = modifiers; + break; + case IDC_HOTKEY7: + if(index == 0) CustomKeys.SkipDown.key = wParam, CustomKeys.SkipDown.modifiers = modifiers; + else CustomKeys.BGLHack.key = wParam, CustomKeys.BGLHack.modifiers = modifiers; + break; + case IDC_HOTKEY8: + if(index == 0) CustomKeys.ScopeTurbo.key = wParam, CustomKeys.ScopeTurbo.modifiers = modifiers; + else CustomKeys.Transparency.key = wParam, CustomKeys.Transparency.modifiers = modifiers; + break; + case IDC_HOTKEY9: + if(index == 0) CustomKeys.ScopePause.key = wParam, CustomKeys.ScopePause.modifiers = modifiers; + else CustomKeys.HDMA.key = wParam, CustomKeys.HDMA.modifiers = modifiers; + break; + case IDC_HOTKEY10: + if(index == 0) CustomKeys.ShowPressed.key = wParam, CustomKeys.ShowPressed.modifiers = modifiers; + else CustomKeys.GLCube.key = wParam, CustomKeys.GLCube.modifiers = modifiers; + break; + case IDC_HOTKEY11: + if(index == 0) CustomKeys.FrameCount.key = wParam, CustomKeys.FrameCount.modifiers = modifiers; + else CustomKeys.InterpMode7.key = wParam, CustomKeys.InterpMode7.modifiers = modifiers; + break; + case IDC_HOTKEY12: + if(index == 0) CustomKeys.ReadOnly.key = wParam, CustomKeys.ReadOnly.modifiers = modifiers; + else CustomKeys.JoypadSwap.key = wParam, CustomKeys.JoypadSwap.modifiers = modifiers; + break; + case IDC_HOTKEY13: + if(index == 0) CustomKeys.SaveScreenShot.key = wParam, CustomKeys.SaveScreenShot.modifiers = modifiers; + else CustomKeys.SwitchControllers.key = wParam, CustomKeys.SwitchControllers.modifiers = modifiers; + break; + + case IDC_SLOTPLUS: + CustomKeys.SlotPlus.key = wParam; + CustomKeys.SlotPlus.modifiers = modifiers; + break; + + case IDC_SLOTMINUS: + CustomKeys.SlotMinus.key = wParam; + CustomKeys.SlotMinus.modifiers = modifiers; + break; + + case IDC_SLOTLOAD: + CustomKeys.SlotLoad.key = wParam; + CustomKeys.SlotLoad.modifiers = modifiers; + break; + + case IDC_SLOTSAVE: + CustomKeys.SlotSave.key = wParam; + CustomKeys.SlotSave.modifiers = modifiers; + break; + } + + if(which >= IDC_SAVE1 && which <= IDC_SAVE10) + { + CustomKeys.Save[which-IDC_SAVE1].key = wParam; + CustomKeys.Save[which-IDC_SAVE1].modifiers = modifiers; + } + if(which >= IDC_SAVE11 && which <= IDC_SAVE20) + { + CustomKeys.Load[which-IDC_SAVE11].key = wParam; + CustomKeys.Load[which-IDC_SAVE11].modifiers = modifiers; + } + + set_hotkeyinfo(hDlg); + PostMessage(hDlg,WM_NEXTDLGCTL,0,0); +// PostMessage(hDlg,WM_KILLFOCUS,0,0); + } + return true; + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case IDCANCEL: + memcpy(&CustomKeys, &keys, sizeof(SCustomKeys)); + EndDialog(hDlg,0); + break; + case IDOK: + EndDialog(hDlg,0); + break; + } + switch(HIWORD(wParam)) + { + case CBN_SELCHANGE: + index = SendDlgItemMessage(hDlg,IDC_HKCOMBO,CB_GETCURSEL,0,0); + SendDlgItemMessage(hDlg,IDC_HKCOMBO,CB_SETCURSEL,(WPARAM)index,0); + + set_hotkeyinfo(hDlg); + + SetFocus(GetDlgItem(hDlg,IDC_HKCOMBO)); + break; } return FALSE; @@ -8858,6 +9789,7 @@ } } } + break; case WM_COMMAND: { switch(LOWORD(wParam)) @@ -9113,6 +10045,7 @@ } default: return false; } + return false; } int CALLBACK DlgCheatSearchAdd(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) @@ -9353,7 +10286,7 @@ *p='\0'; SetWindowTextA(GetDlgItem(hDlg, IDC_MOVIE_DATE), tmpstr); - uint32 div = Settings.PAL ? 50 : 60; + uint32 div = Memory.ROMFramesPerSecond; uint32 l=(m.LengthFrames+(div>>1))/div; uint32 seconds=l%60; l/=60; @@ -9366,7 +10299,28 @@ SetWindowTextA(GetDlgItem(hDlg, IDC_MOVIE_FRAMES), tmpstr); sprintf(tmpstr, "%ld", m.RerecordCount); SetWindowTextA(GetDlgItem(hDlg, IDC_MOVIE_RERECORD), tmpstr); - SetWindowTextW(GetDlgItem(hDlg, IDC_MOVIE_METADATA), m.Metadata); + + // set author comment: + { +/// SetWindowTextW(GetDlgItem(hDlg, IDC_MOVIE_METADATA), m.Metadata); // won't work, because of & symbol + + wchar_t metadata [MOVIE_MAX_METADATA]; + int j, pos = 0, len = wcslen(m.Metadata); + for (j = 0; j < len ; j++) + { + wchar_t c = m.Metadata [j]; + metadata [pos++] = c; + + // & is a special character in Windows fields, + // so we have to change & to && when copying over the game title + // otherwise "Pocky & Rocky" will show up as "Pocky Rocky", for example + if(c == (wchar_t)'&') + metadata [pos++] = (wchar_t)'&'; + } + metadata [pos] = (wchar_t)'\0'; + + SetWindowTextW(GetDlgItem(hDlg, IDC_MOVIE_METADATA), metadata); + } if(m.ReadOnly) { @@ -9376,8 +10330,9 @@ else { EnableWindow(GetDlgItem(hDlg, IDC_READONLY), TRUE); - SendDlgItemMessage(hDlg,IDC_READONLY,BM_SETCHECK,BST_UNCHECKED,0); +/// SendDlgItemMessage(hDlg,IDC_READONLY,BM_SETCHECK,BST_UNCHECKED,0); } + EnableWindow(GetDlgItem(hDlg, IDC_DISPLAY_INPUT), TRUE); for(i=0; i<5; ++i) { @@ -9394,6 +10349,47 @@ SendDlgItemMessage(hDlg,IDC_RECORD_RESET,BM_SETCHECK,BST_UNCHECKED,0); SendDlgItemMessage(hDlg,IDC_RECORD_NOW,BM_SETCHECK,BST_CHECKED,0); } + + + if(m.SyncFlags & MOVIE_SYNC_DATA_EXISTS) + { + SendDlgItemMessage(hDlg,IDC_WIP1,BM_SETCHECK, (m.SyncFlags & MOVIE_SYNC_WIP1TIMING)!=0 ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_ALLOWLEFTRIGHT,BM_SETCHECK, (m.SyncFlags & MOVIE_SYNC_LEFTRIGHT)!=0 ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_ENVX,BM_SETCHECK, (m.SyncFlags & MOVIE_SYNC_VOLUMEENVX)!=0 ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_FMUT,BM_SETCHECK, (m.SyncFlags & MOVIE_SYNC_FAKEMUTE)!=0 ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_SYNC_TO_SOUND_CPU,BM_SETCHECK, (m.SyncFlags & MOVIE_SYNC_SYNCSOUND)!=0 ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SetWindowText(GetDlgItem(hDlg, IDC_LOADEDFROMMOVIE), _T(MOVIE_LABEL_SYNC_DATA_FROM_MOVIE)); + } + else + { + SendDlgItemMessage(hDlg,IDC_WIP1,BM_SETCHECK, Settings.UseWIPAPUTiming ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_ALLOWLEFTRIGHT,BM_SETCHECK, !Settings.DisallowLeftRight ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_ENVX,BM_SETCHECK, Settings.SoundEnvelopeHeightReading ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_FMUT,BM_SETCHECK, Settings.FakeMuteFix ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_SYNC_TO_SOUND_CPU,BM_SETCHECK, Settings.SoundSync ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SetWindowText(GetDlgItem(hDlg, IDC_LOADEDFROMMOVIE), _T("")); + } + + { + char str [256]; + + if(m.SyncFlags & MOVIE_SYNC_HASROMINFO) + { + sprintf(str, "Movie's ROM: crc32=%08X, name=%s", m.ROMCRC32, m.ROMName); + SetWindowText(GetDlgItem(hDlg, IDC_MOVIEROMINFO), _T(str)); + } + else + { + sprintf(str, "Movie's ROM: (not stored in movie file)"); + SetWindowText(GetDlgItem(hDlg, IDC_MOVIEROMINFO), _T(str)); + } + + bool mismatch = (m.SyncFlags & MOVIE_SYNC_HASROMINFO) && m.ROMCRC32 != Memory.ROMCRC32; + sprintf(str, "Current ROM: crc32=%08X, name=%s%s", Memory.ROMCRC32, Memory.ROMName, mismatch?" <-- MISMATCH !!!":""); + SetWindowText(GetDlgItem(hDlg, IDC_CURRENTROMINFO), _T(str)); + } + + } else { @@ -9403,8 +10399,30 @@ SetWindowText(GetDlgItem(hDlg, IDC_MOVIE_RERECORD), _T("")); SetWindowText(GetDlgItem(hDlg, IDC_MOVIE_METADATA), _T("")); EnableWindow(GetDlgItem(hDlg, IDC_READONLY), FALSE); + EnableWindow(GetDlgItem(hDlg, IDC_DISPLAY_INPUT), FALSE); SendDlgItemMessage(hDlg,IDC_READONLY,BM_SETCHECK,BST_UNCHECKED,0); + SendDlgItemMessage(hDlg,IDC_DISPLAY_INPUT,BM_SETCHECK,BST_UNCHECKED,0); + + + { + SendDlgItemMessage(hDlg,IDC_WIP1,BM_SETCHECK, Settings.UseWIPAPUTiming ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_ALLOWLEFTRIGHT,BM_SETCHECK, !Settings.DisallowLeftRight ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_ENVX,BM_SETCHECK, Settings.SoundEnvelopeHeightReading ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_FMUT,BM_SETCHECK, Settings.FakeMuteFix ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_SYNC_TO_SOUND_CPU,BM_SETCHECK, Settings.SoundSync ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + } + + { + char str [256]; + + // no movie loaded + SetWindowText(GetDlgItem(hDlg, IDC_MOVIEROMINFO), _T("")); + + sprintf(str, "Current ROM: crc32=%08X, name=%s", Memory.ROMCRC32, Memory.ROMName); + SetWindowText(GetDlgItem(hDlg, IDC_CURRENTROMINFO), _T(str)); + } } + } int CALLBACK DlgOpenMovie(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) @@ -9434,6 +10452,30 @@ { set_movieinfo("", hDlg); } +/* + if(op->SyncFlags & MOVIE_SYNC_DATA_EXISTS) + { + SendDlgItemMessage(hDlg,IDC_WIP1,BM_SETCHECK, (op->SyncFlags & MOVIE_SYNC_WIP1TIMING)!=0 ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_ALLOWLEFTRIGHT,BM_SETCHECK, (op->SyncFlags & MOVIE_SYNC_LEFTRIGHT)!=0 ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_ENVX,BM_SETCHECK, (op->SyncFlags & MOVIE_SYNC_VOLUMEENVX)!=0 ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_FMUT,BM_SETCHECK, (op->SyncFlags & MOVIE_SYNC_FAKEMUTE)!=0 ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_SYNC_TO_SOUND_CPU,BM_SETCHECK, (op->SyncFlags & MOVIE_SYNC_SYNCSOUND)!=0 ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SetWindowText(GetDlgItem(hDlg, IDC_LOADEDFROMMOVIE), _T("LOADED FROM MOVIE:")); + } + else + { + SendDlgItemMessage(hDlg,IDC_WIP1,BM_SETCHECK, Settings.UseWIPAPUTiming ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_ALLOWLEFTRIGHT,BM_SETCHECK, !Settings.DisallowLeftRight ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_ENVX,BM_SETCHECK, Settings.SoundEnvelopeHeightReading ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_FMUT,BM_SETCHECK, Settings.FakeMuteFix ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_SYNC_TO_SOUND_CPU,BM_SETCHECK, Settings.SoundSync ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SetWindowText(GetDlgItem(hDlg, IDC_LOADEDFROMMOVIE), _T("")); + } +*/ + // make read-only the default + SendDlgItemMessage(hDlg,IDC_READONLY,BM_SETCHECK,BST_CHECKED,0); + + EnableWindow(GetDlgItem(hDlg, IDC_SYNC_TO_SOUND_CPU), 0==Settings.SoundDriver); // can't sync sound to CPU unless using "Snes9x DirectSound" driver } return true; @@ -9441,6 +10483,13 @@ { switch(LOWORD(wParam)) { + case IDC_WIP1: + case IDC_ALLOWLEFTRIGHT: + case IDC_ENVX: + case IDC_FMUT: + case IDC_SYNC_TO_SOUND_CPU: + SetWindowText(GetDlgItem(hDlg, IDC_LOADEDFROMMOVIE), _T("")); + break; case IDC_BROWSE_MOVIE: { OPENFILENAME ofn; @@ -9451,10 +10500,11 @@ ZeroMemory( (LPVOID)&ofn, sizeof(OPENFILENAME) ); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hDlg; - ofn.lpstrFilter = "Snes9x Movie File\0*.smv\0All files\0*.*\0\0"; + ofn.lpstrFilter = MOVIE_FILETYPE_DESCRIPTION "\0*.smv\0All files\0*.*\0\0"; ofn.lpstrFile = szFileName; ofn.lpstrDefExt = "smv"; ofn.nMaxFile = MAX_PATH; + ofn.Flags = OFN_HIDEREADONLY; // hide previously-ignored read-only checkbox (the real read-only box in the open-movie dialog itself) if(GetOpenFileName( &ofn )) { SetWindowText(GetDlgItem(hDlg, IDC_MOVIE_PATH), szFileName); @@ -9467,8 +10517,15 @@ { if(BST_CHECKED==SendDlgItemMessage(hDlg, IDC_READONLY, BM_GETCHECK,0,0)) op->ReadOnly=TRUE; + if(BST_CHECKED==SendDlgItemMessage(hDlg, IDC_DISPLAY_INPUT, BM_GETCHECK,0,0)) + op->DisplayInput=TRUE; GetDlgItemText(hDlg, IDC_MOVIE_PATH, op->Path, MAX_PATH); } + Settings.UseWIPAPUTiming = IsDlgButtonChecked(hDlg, IDC_WIP1); + Settings.DisallowLeftRight = !IsDlgButtonChecked(hDlg, IDC_ALLOWLEFTRIGHT); + Settings.SoundEnvelopeHeightReading = IsDlgButtonChecked(hDlg, IDC_ENVX); + Settings.FakeMuteFix = IsDlgButtonChecked(hDlg, IDC_FMUT); + Settings.SoundSync = IsDlgButtonChecked(hDlg, IDC_SYNC_TO_SOUND_CPU); EndDialog(hDlg, 1); return true; @@ -9486,6 +10543,32 @@ } } +// checks if the currently loaded ROM has an SRAM file in the saves directory that we have write access to +static bool existsSRAM () +{ + const char * fname = S9xGetFilename (".srm"); + FILE * file = fopen(fname, "rb"); // check to see if it exists (w would auto-create which is bad) + if(file != NULL) + { + fclose(file); + + FILE * file = fopen(fname, "wb"); // it exists, now check to see if we can also write to it + if(file != NULL) + { + fclose(file); + return true; // success if it exists and can be written to + } + else + { + return false; // failure if it exists but can't be written to + } + } + else + { + return false; // failure if it doesn't exist + } +} + int CALLBACK DlgCreateMovie(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { static OpenMovieParams* op=NULL; @@ -9494,6 +10577,11 @@ { case WM_INITDIALOG: { + // have to save here or the SRAM file might not exist when we check for it + // (which would cause clear SRAM option to not do anything) + Memory.SaveSRAM(S9xGetFilename (".srm")); + + op=(OpenMovieParams*)lParam; SendDlgItemMessage(hDlg,IDC_RECORD_RESET,BM_SETCHECK,BST_CHECKED,0); @@ -9512,11 +10600,34 @@ TCHAR drive [_MAX_DRIVE + 1]; TCHAR dir [_MAX_DIR + 1]; TCHAR fname [_MAX_FNAME + 1]; - TCHAR ext [_MAX_EXT + 1]; + TCHAR ext [_MAX_EXT + 1]; _splitpath (Memory.ROMFilename, drive, dir, fname, ext); _makepath (filename, "", "", fname, "smv"); SetWindowText(GetDlgItem(hDlg, IDC_MOVIE_PATH), filename); } + if(op->SyncFlags & MOVIE_SYNC_DATA_EXISTS) + { + SendDlgItemMessage(hDlg,IDC_WIP1,BM_SETCHECK, (op->SyncFlags & MOVIE_SYNC_WIP1TIMING)!=0 ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_ALLOWLEFTRIGHT,BM_SETCHECK, (op->SyncFlags & MOVIE_SYNC_LEFTRIGHT)!=0 ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_ENVX,BM_SETCHECK, (op->SyncFlags & MOVIE_SYNC_VOLUMEENVX)!=0 ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_FMUT,BM_SETCHECK, (op->SyncFlags & MOVIE_SYNC_FAKEMUTE)!=0 ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_SYNC_TO_SOUND_CPU,BM_SETCHECK, (op->SyncFlags & MOVIE_SYNC_SYNCSOUND)!=0 ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SetWindowText(GetDlgItem(hDlg, IDC_LOADEDFROMMOVIE), _T("LOADED FROM MOVIE:")); + } + else + { + SendDlgItemMessage(hDlg,IDC_WIP1,BM_SETCHECK, Settings.UseWIPAPUTiming ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_ALLOWLEFTRIGHT,BM_SETCHECK, !Settings.DisallowLeftRight ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_ENVX,BM_SETCHECK, Settings.SoundEnvelopeHeightReading ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_FMUT,BM_SETCHECK, Settings.FakeMuteFix ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_SYNC_TO_SOUND_CPU,BM_SETCHECK, Settings.SoundSync ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SetWindowText(GetDlgItem(hDlg, IDC_LOADEDFROMMOVIE), _T("")); + } + + EnableWindow(GetDlgItem(hDlg, IDC_SYNC_TO_SOUND_CPU), 0==Settings.SoundDriver); // can't sync sound to CPU unless using "Snes9x DirectSound" driver + + SendDlgItemMessage(hDlg,IDC_CLEARSRAM,BM_SETCHECK, (WPARAM)BST_CHECKED, 0); + EnableWindow(GetDlgItem(hDlg, IDC_CLEARSRAM), existsSRAM() ? true : false); } return true; @@ -9534,7 +10645,7 @@ ZeroMemory( (LPVOID)&ofn, sizeof(OPENFILENAME) ); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hDlg; - ofn.lpstrFilter = "Snes9x Movie File\0*.smv\0All files\0*.*\0\0"; + ofn.lpstrFilter = MOVIE_FILETYPE_DESCRIPTION "\0*.smv\0All files\0*.*\0\0"; ofn.lpstrFile = szFileName; ofn.lpstrDefExt = "smv"; ofn.nMaxFile = MAX_PATH; @@ -9560,6 +10671,25 @@ } if(BST_CHECKED==SendDlgItemMessage(hDlg, IDC_RECORD_RESET, BM_GETCHECK,0,0)) op->Opts |= MOVIE_OPT_FROM_RESET; + + Settings.UseWIPAPUTiming = IsDlgButtonChecked(hDlg, IDC_WIP1); + Settings.DisallowLeftRight = !IsDlgButtonChecked(hDlg, IDC_ALLOWLEFTRIGHT); + Settings.SoundEnvelopeHeightReading = IsDlgButtonChecked(hDlg, IDC_ENVX); + Settings.FakeMuteFix = IsDlgButtonChecked(hDlg, IDC_FMUT); + Settings.SoundSync = IsDlgButtonChecked(hDlg, IDC_SYNC_TO_SOUND_CPU); + + op->SyncFlags = MOVIE_SYNC_DATA_EXISTS | MOVIE_SYNC_HASROMINFO; + if(Settings.UseWIPAPUTiming) op->SyncFlags |= MOVIE_SYNC_WIP1TIMING; + if(!Settings.DisallowLeftRight) op->SyncFlags |= MOVIE_SYNC_LEFTRIGHT; + if(Settings.SoundEnvelopeHeightReading) op->SyncFlags |= MOVIE_SYNC_VOLUMEENVX; + if(Settings.FakeMuteFix) op->SyncFlags |= MOVIE_SYNC_FAKEMUTE; + if(Settings.SoundSync) op->SyncFlags |= MOVIE_SYNC_SYNCSOUND; + + if(IsDlgButtonChecked(hDlg, IDC_CLEARSRAM) && IsDlgButtonChecked(hDlg, IDC_RECORD_RESET) && existsSRAM()) + { + remove(S9xGetFilename (".srm")); // delete SRAM if it exists (maybe unnecessary?) + Memory.LoadSRAM(S9xGetFilename (".srm")); // refresh memory (hard reset) + } } EndDialog(hDlg, 1); return true; @@ -9568,6 +10698,21 @@ EndDialog(hDlg, 0); return true; + case IDC_RECORD_NOW: + if(existsSRAM()) + { + EnableWindow(GetDlgItem(hDlg, IDC_CLEARSRAM), false); + SendDlgItemMessage(hDlg,IDC_CLEARSRAM,BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0); + } + break; + + case IDC_RECORD_RESET: + if(existsSRAM()) + { + EnableWindow(GetDlgItem(hDlg, IDC_CLEARSRAM), true); + } + break; + default: break; } diff -NaHudr snes9x-1.43-src/wsnes9x.h snes9x-improvement7-src-dehacked/wsnes9x.h --- snes9x-1.43-src/wsnes9x.h 2005-04-09 00:59:56.000000000 +0300 +++ snes9x-improvement7-src-dehacked/wsnes9x.h 2005-04-09 00:59:23.000000000 +0300 @@ -104,7 +104,11 @@ #include #include #ifndef __BORLANDC__ + +#ifndef __MINGW32__ #include +#endif + #include #endif #include "resource.h" @@ -167,6 +171,7 @@ bool NeedDepthConvert; bool BGR; bool TurboModeToggle; + bool InactivePause; int ScreenDepth; int RedShift; int GreenShift; @@ -217,6 +222,50 @@ TCHAR *errFrameTimer; }; +#define CUSTKEY_ALT_MASK 0x01 +#define CUSTKEY_CTRL_MASK 0x02 +#define CUSTKEY_SHIFT_MASK 0x04 + +struct SCustomKey { + WORD key; + WORD modifiers; +}; + +struct SCustomKeys { + SCustomKey SpeedUp; + SCustomKey SpeedDown; + SCustomKey Pause; + SCustomKey FrameAdvance; + SCustomKey SkipUp; + SCustomKey SkipDown; + SCustomKey ScopeTurbo; + SCustomKey ScopePause; + SCustomKey FrameCount; + SCustomKey ReadOnly; + SCustomKey Save [10]; + SCustomKey Load [10]; + SCustomKey FastForward; + SCustomKey ShowPressed; + SCustomKey SaveScreenShot; + SCustomKey SlotPlus; + SCustomKey SlotMinus; + SCustomKey SlotSave; + SCustomKey SlotLoad; + SCustomKey BGL1; + SCustomKey BGL2; + SCustomKey BGL3; + SCustomKey BGL4; + SCustomKey BGL5; + SCustomKey ClippingWindows; + SCustomKey BGLHack; + SCustomKey Transparency; + SCustomKey HDMA; + SCustomKey GLCube; + SCustomKey InterpMode7; + SCustomKey JoypadSwap; + SCustomKey SwitchControllers; +}; + struct SJoypad { BOOL Enabled; WORD Left; @@ -272,7 +321,10 @@ extern struct sGUI GUI; extern struct sLanguages Languages[]; -extern struct SJoypad Joypad[5]; +extern struct SJoypad Joypad[10]; +extern struct SJoypad ToggleJoypadStorage[5]; +extern struct SJoypad TurboToggleJoypadStorage[5]; +extern struct SCustomKeys CustomKeys; enum {