HQ3x and 4x is now integrated into SDL, and has a C port. However 3x crashes.
git-svn-id: https://svn.code.sf.net/p/vbam/code/trunk@105 a31d4220-a93d-0410-bf67-fe4944624d44
This commit is contained in:
parent
75a0f1b035
commit
ba6cdac2fa
12
Makefile
12
Makefile
|
@ -34,14 +34,18 @@ SDLDIR=src/sdl
|
||||||
DMGDIR=src/gb
|
DMGDIR=src/gb
|
||||||
RESAMPLEDIR=src/libresample-0.1.3/src
|
RESAMPLEDIR=src/libresample-0.1.3/src
|
||||||
|
|
||||||
ASMOBJ=${MAINDIR}/hq3x_16${OE} ${MAINDIR}/hq3x_32${OE} ${MAINDIR}/hq4x_16${OE} ${MAINDIR}/hq4x_32${OE}
|
|
||||||
CALTERNOBJ=
|
ASMOBJ=${MAINDIR}/hq3x_16${OE} ${MAINDIR}/hq3x_32${OE} ${MAINDIR}/hq4x_16${OE} ${MAINDIR}/hq4x_32${OE} \
|
||||||
|
${MAINDIR}/hq3x32${OE}
|
||||||
|
|
||||||
|
CALTERNOBJ=${MAINDIR}/hq3x16c${OE} ${MAINDIR}/hq3x32c${OE} ${MAINDIR}/hq4x16c${OE} ${MAINDIR}/hq4x32c${OE} \
|
||||||
|
${MAINDIR}/hq_shared32${OE}
|
||||||
|
|
||||||
MAINOBJ=${MAINDIR}/2xSaI${OE} ${MAINDIR}/admame${OE} ${MAINDIR}/agbprint${OE} ${MAINDIR}/armdis${OE} \
|
MAINOBJ=${MAINDIR}/2xSaI${OE} ${MAINDIR}/admame${OE} ${MAINDIR}/agbprint${OE} ${MAINDIR}/armdis${OE} \
|
||||||
${MAINDIR}/bilinear${OE} ${MAINDIR}/bios${OE} ${MAINDIR}/Cheats${OE} ${MAINDIR}/CheatSearch${OE} \
|
${MAINDIR}/bilinear${OE} ${MAINDIR}/bios${OE} ${MAINDIR}/Cheats${OE} ${MAINDIR}/CheatSearch${OE} \
|
||||||
${MAINDIR}/EEprom${OE} ${MAINDIR}/elf${OE} ${MAINDIR}/Flash${OE} ${MAINDIR}/GBA${OE} \
|
${MAINDIR}/EEprom${OE} ${MAINDIR}/elf${OE} ${MAINDIR}/Flash${OE} ${MAINDIR}/GBA${OE} \
|
||||||
${MAINDIR}/gbafilter${OE} ${MAINDIR}/Gfx${OE} ${MAINDIR}/Globals${OE} ${MAINDIR}/interframe${OE} \
|
${MAINDIR}/gbafilter${OE} ${MAINDIR}/Gfx${OE} ${MAINDIR}/Globals${OE} ${MAINDIR}/interframe${OE} \
|
||||||
${MAINDIR}/hq2x${OE} ${MAINDIR}/Mode0${OE} \
|
${MAINDIR}/hq2x${OE} ${MAINDIR}/Mode0${OE} \
|
||||||
${MAINDIR}/Mode1${OE} ${MAINDIR}/Mode2${OE} ${MAINDIR}/Mode3${OE} ${MAINDIR}/Mode4${OE} \
|
${MAINDIR}/Mode1${OE} ${MAINDIR}/Mode2${OE} ${MAINDIR}/Mode3${OE} ${MAINDIR}/Mode4${OE} \
|
||||||
${MAINDIR}/Mode5${OE} ${MAINDIR}/motionblur${OE} ${MAINDIR}/pixel${OE} ${MAINDIR}/portable${OE} \
|
${MAINDIR}/Mode5${OE} ${MAINDIR}/motionblur${OE} ${MAINDIR}/pixel${OE} ${MAINDIR}/portable${OE} \
|
||||||
${MAINDIR}/remote${OE} ${MAINDIR}/RTC${OE} ${MAINDIR}/scanline${OE} ${MAINDIR}/simpleFilter${OE} \
|
${MAINDIR}/remote${OE} ${MAINDIR}/RTC${OE} ${MAINDIR}/scanline${OE} ${MAINDIR}/simpleFilter${OE} \
|
||||||
|
@ -55,7 +59,7 @@ ${DMGDIR}/gbSound${OE}
|
||||||
|
|
||||||
SDLOBJ=${SDLDIR}/debugger${OE} ${SDLDIR}/SDL${OE} ${SDLDIR}/dummy${OE}
|
SDLOBJ=${SDLDIR}/debugger${OE} ${SDLDIR}/SDL${OE} ${SDLDIR}/dummy${OE}
|
||||||
|
|
||||||
OBJECTS=${MAINOBJ} ${DMGOBJ} ${SDLOBJ}
|
OBJECTS=${MAINOBJ} ${DMGOBJ} ${SDLOBJ} ${CALTERNOBJ}
|
||||||
LIB=${RESAMPLEDIR}/filterkit${OE} ${RESAMPLEDIR}/resample${OE} ${RESAMPLEDIR}/resamplesubs${OE}
|
LIB=${RESAMPLEDIR}/filterkit${OE} ${RESAMPLEDIR}/resample${OE} ${RESAMPLEDIR}/resamplesubs${OE}
|
||||||
|
|
||||||
.SUFFIXES: .c .cpp .asm
|
.SUFFIXES: .c .cpp .asm
|
||||||
|
|
512
src/hq2x.dat
512
src/hq2x.dat
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
VisualBoyAdvance - a Game Boy & Game Boy Advance emulator
|
||||||
|
|
||||||
|
Copyright (C) 1999 - 2003 Forgotten
|
||||||
|
Copyright (C) 2003 - 2004 Forgotten and the VBA development team
|
||||||
|
Copyright (C) 2005 - 2006 VBA development team
|
||||||
|
|
||||||
|
|
||||||
|
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 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define _HQ3X
|
||||||
|
#define _16BIT
|
||||||
|
#include "hqxx.h"
|
||||||
|
#undef _16BIT
|
||||||
|
#undef _HQ3X
|
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
VisualBoyAdvance - a Game Boy & Game Boy Advance emulator
|
||||||
|
|
||||||
|
Copyright (C) 1999 - 2003 Forgotten
|
||||||
|
Copyright (C) 2003 - 2004 Forgotten and the VBA development team
|
||||||
|
Copyright (C) 2005 - 2006 VBA development team
|
||||||
|
|
||||||
|
|
||||||
|
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 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define _HQ3X
|
||||||
|
#define _32BIT
|
||||||
|
#include "hqxx.h"
|
||||||
|
#undef _32BIT
|
||||||
|
#undef _HQ3X
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
VisualBoyAdvance - a Game Boy & Game Boy Advance emulator
|
||||||
|
|
||||||
|
Copyright (C) 1999 - 2003 Forgotten
|
||||||
|
Copyright (C) 2003 - 2004 Forgotten and the VBA development team
|
||||||
|
Copyright (C) 2005 - 2006 VBA development team
|
||||||
|
|
||||||
|
|
||||||
|
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 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define _HQ4X
|
||||||
|
#define _16BIT
|
||||||
|
#include "hqxx.h"
|
||||||
|
#undef _16BIT
|
||||||
|
#undef _HQ4X
|
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
VisualBoyAdvance - a Game Boy & Game Boy Advance emulator
|
||||||
|
|
||||||
|
Copyright (C) 1999 - 2003 Forgotten
|
||||||
|
Copyright (C) 2003 - 2004 Forgotten and the VBA development team
|
||||||
|
Copyright (C) 2005 - 2006 VBA development team
|
||||||
|
|
||||||
|
|
||||||
|
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 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define _HQ4X
|
||||||
|
#define _32BIT
|
||||||
|
#include "hqxx.h"
|
||||||
|
#undef _32BIT
|
||||||
|
#undef _HQ4X
|
File diff suppressed because it is too large
Load Diff
|
@ -29,201 +29,46 @@ const uint64_t treshold = UINT64_C(0x0000000000300706);
|
||||||
|
|
||||||
void Interp1(unsigned char * pc, unsigned int c1, unsigned int c2)
|
void Interp1(unsigned char * pc, unsigned int c1, unsigned int c2)
|
||||||
{
|
{
|
||||||
#if (defined(_MSC_VER) && !defined(C_CORE))
|
|
||||||
#ifdef MMX
|
|
||||||
__asm
|
|
||||||
{
|
|
||||||
mov eax, pc
|
|
||||||
movd mm1, c1
|
|
||||||
movd mm2, c2
|
|
||||||
movq mm0, mm1
|
|
||||||
pslld mm0, 2
|
|
||||||
psubd mm0, mm1
|
|
||||||
paddd mm0, mm2
|
|
||||||
psrld mm0, 2
|
|
||||||
movd [eax], mm0
|
|
||||||
EMMS
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
__asm
|
|
||||||
{
|
|
||||||
mov eax, pc
|
|
||||||
mov edx, c1
|
|
||||||
shl edx, 2
|
|
||||||
add edx, c2
|
|
||||||
sub edx, c1
|
|
||||||
shr edx, 2
|
|
||||||
mov [eax], edx
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
*((int*)pc) = (c1*3+c2)/4;
|
*((int*)pc) = (c1*3+c2)/4;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Interp2(unsigned char * pc, unsigned int c1, unsigned int c2, unsigned int c3)
|
void Interp2(unsigned char * pc, unsigned int c1, unsigned int c2, unsigned int c3)
|
||||||
{
|
{
|
||||||
#if (defined(_MSC_VER) && !defined(C_CORE))
|
|
||||||
#ifdef MMX
|
|
||||||
__asm
|
|
||||||
{
|
|
||||||
mov eax, pc
|
|
||||||
movd mm0, c1
|
|
||||||
movd mm1, c2
|
|
||||||
movd mm2, c3
|
|
||||||
pslld mm0, 1
|
|
||||||
paddd mm0, mm1
|
|
||||||
paddd mm0, mm2
|
|
||||||
psrad mm0, 2
|
|
||||||
movd [eax], mm0
|
|
||||||
EMMS
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
__asm
|
|
||||||
{
|
|
||||||
mov eax, pc
|
|
||||||
mov edx, c1
|
|
||||||
shl edx, 1
|
|
||||||
add edx, c2
|
|
||||||
add edx, c3
|
|
||||||
shr edx, 2
|
|
||||||
mov [eax], edx
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
*((int*)pc) = (c1*2+c2+c3)/4;
|
*((int*)pc) = (c1*2+c2+c3)/4;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Interp3(unsigned char * pc, unsigned int c1, unsigned int c2)
|
void Interp3(unsigned char * pc, unsigned int c1, unsigned int c2)
|
||||||
{
|
{
|
||||||
#if (defined(_MSC_VER) && !defined(C_CORE))
|
|
||||||
#ifdef MMX
|
|
||||||
__asm
|
|
||||||
{
|
|
||||||
mov eax, pc
|
|
||||||
movd mm1, c1
|
|
||||||
movd mm2, c2
|
|
||||||
punpcklbw mm1, reg_blank
|
|
||||||
punpcklbw mm2, reg_blank
|
|
||||||
pmullw mm1, const7
|
|
||||||
paddw mm1, mm2
|
|
||||||
psrlw mm1, 3
|
|
||||||
packuswb mm1, reg_blank
|
|
||||||
movd [eax], mm1
|
|
||||||
EMMS
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
__asm
|
|
||||||
{
|
|
||||||
mov eax, c1
|
|
||||||
mov ebx, c2
|
|
||||||
mov ecx, eax
|
|
||||||
shl ecx, 3
|
|
||||||
sub ecx, eax
|
|
||||||
add ecx, ebx
|
|
||||||
shr ecx, 3
|
|
||||||
mov eax, pc
|
|
||||||
mov [eax], ecx
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
*((int*)pc) = (c1*7+c2)/8;
|
*((int*)pc) = (c1*7+c2)/8;
|
||||||
*((int*)pc) = ((((c1 & 0x00FF00)*7 + (c2 & 0x00FF00) ) & 0x0007F800) +
|
*((int*)pc) = ((((c1 & 0x00FF00)*7 + (c2 & 0x00FF00) ) & 0x0007F800) +
|
||||||
(((c1 & 0xFF00FF)*7 + (c2 & 0xFF00FF) ) & 0x07F807F8)) >> 3;
|
(((c1 & 0xFF00FF)*7 + (c2 & 0xFF00FF) ) & 0x07F807F8)) >> 3;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Interp4(unsigned char * pc, unsigned int c1, unsigned int c2, unsigned int c3)
|
void Interp4(unsigned char * pc, unsigned int c1, unsigned int c2, unsigned int c3)
|
||||||
{
|
{
|
||||||
#if (defined(_MSC_VER) && !defined(C_CORE))
|
|
||||||
#ifdef MMX
|
|
||||||
__asm
|
|
||||||
{
|
|
||||||
mov eax, pc
|
|
||||||
movd mm1, c1
|
|
||||||
movd mm2, c2
|
|
||||||
movd mm3, c3
|
|
||||||
punpcklbw mm1, reg_blank
|
|
||||||
punpcklbw mm2, reg_blank
|
|
||||||
punpcklbw mm3, reg_blank
|
|
||||||
psllw mm1, 1
|
|
||||||
paddw mm2, mm3
|
|
||||||
pmullw mm2, const7
|
|
||||||
paddw mm1, mm2
|
|
||||||
psrlw mm1, 4
|
|
||||||
packuswb mm1, reg_blank
|
|
||||||
movd [eax], mm1
|
|
||||||
EMMS
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
__asm
|
|
||||||
{
|
|
||||||
mov eax, [c1]
|
|
||||||
and eax, 0FF00h
|
|
||||||
shl eax, 1
|
|
||||||
mov ecx, [c2]
|
|
||||||
and ecx, 0FF00h
|
|
||||||
mov edx, [c3]
|
|
||||||
and edx, 0FF00h
|
|
||||||
add ecx, edx
|
|
||||||
imul ecx, ecx,7
|
|
||||||
add eax, ecx
|
|
||||||
and eax, 0FF000h
|
|
||||||
|
|
||||||
mov ebx, [c1]
|
|
||||||
and ebx, 0FF00FFh
|
|
||||||
shl ebx, 1
|
|
||||||
mov ecx, [c2]
|
|
||||||
and ecx, 0FF00FFh
|
|
||||||
mov edx, [c3]
|
|
||||||
and edx, 0FF00FFh
|
|
||||||
add ecx, edx
|
|
||||||
imul ecx, ecx,7
|
|
||||||
add ebx, ecx
|
|
||||||
and ebx, 0FF00FF0h
|
|
||||||
|
|
||||||
add eax, ebx
|
|
||||||
shr eax, 4
|
|
||||||
|
|
||||||
mov ebx, pc
|
|
||||||
mov [ebx], eax
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
*((int*)pc) = (c1*2+(c2+c3)*7)/16;
|
*((int*)pc) = (c1*2+(c2+c3)*7)/16;
|
||||||
*((int*)pc) = ((((c1 & 0x00FF00)*2 + ((c2 & 0x00FF00) + (c3 & 0x00FF00))*7 ) & 0x000FF000) +
|
*((int*)pc) = ((((c1 & 0x00FF00)*2 + ((c2 & 0x00FF00) + (c3 & 0x00FF00))*7 ) & 0x000FF000) +
|
||||||
(((c1 & 0xFF00FF)*2 + ((c2 & 0xFF00FF) + (c3 & 0xFF00FF))*7 ) & 0x0FF00FF0)) >> 4;
|
(((c1 & 0xFF00FF)*2 + ((c2 & 0xFF00FF) + (c3 & 0xFF00FF))*7 ) & 0x0FF00FF0)) >> 4;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Interp5(unsigned char * pc, unsigned int c1, unsigned int c2)
|
void Interp5(unsigned char * pc, unsigned int c1, unsigned int c2)
|
||||||
{
|
{
|
||||||
#if (defined(_MSC_VER) && !defined(C_CORE))
|
|
||||||
#ifdef MMX
|
|
||||||
__asm
|
|
||||||
{
|
|
||||||
mov eax, pc
|
|
||||||
movd mm0, c1
|
|
||||||
movd mm1, c2
|
|
||||||
paddd mm0, mm1
|
|
||||||
psrad mm0, 1
|
|
||||||
movd [eax], mm0
|
|
||||||
EMMS
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
__asm
|
|
||||||
{
|
|
||||||
mov eax, pc
|
|
||||||
mov edx, c1
|
|
||||||
add edx, c2
|
|
||||||
shr edx, 1
|
|
||||||
mov [eax], edx
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
*((int*)pc) = (c1+c2)/2;
|
*((int*)pc) = (c1+c2)/2;
|
||||||
#endif
|
}
|
||||||
|
|
||||||
|
void Interp6(unsigned char * pc, unsigned int c1, unsigned int c2, unsigned int c3)
|
||||||
|
{
|
||||||
|
*((int*)pc) = (c1*5+c2*2+c3)/8;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Interp7(unsigned char * pc, unsigned int c1, unsigned int c2, unsigned int c3)
|
||||||
|
{
|
||||||
|
*((int*)pc) = (c1*6+c2+c3)/8;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Interp8(unsigned char * pc, unsigned int c1, unsigned int c2)
|
||||||
|
{
|
||||||
|
*((int*)pc) = (c1*5+c2*3)/8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -235,137 +80,16 @@ bool Diff(unsigned int c1, unsigned int c2)
|
||||||
|
|
||||||
if (YUV1 == YUV2) return false; // Save some processing power
|
if (YUV1 == YUV2) return false; // Save some processing power
|
||||||
|
|
||||||
#ifdef MMX
|
|
||||||
unsigned int retval;
|
|
||||||
__asm
|
|
||||||
{
|
|
||||||
mov eax, 0x7FFFFFFF
|
|
||||||
movd mm7, eax ;mm7 = ABS_MASK = 0x7FFFFFFF
|
|
||||||
|
|
||||||
; Copy source colors in first reg
|
|
||||||
movd mm0, YUV1
|
|
||||||
movd mm1, YUV2
|
|
||||||
|
|
||||||
mov eax, 0x00FF0000
|
|
||||||
movd mm6, eax ;mm6 = Ymask = 0x00FF0000
|
|
||||||
|
|
||||||
; Calculate color Y difference
|
|
||||||
movq mm2, mm0
|
|
||||||
movq mm3, mm1
|
|
||||||
pand mm2, mm6
|
|
||||||
pand mm3, mm6
|
|
||||||
psubd mm2, mm3
|
|
||||||
pand mm2, mm7
|
|
||||||
|
|
||||||
mov eax, 0x0000FF00
|
|
||||||
movd mm6, eax ;mm6 = Umask = 0x0000FF00
|
|
||||||
|
|
||||||
; Calculate color U difference
|
|
||||||
movq mm3, mm0
|
|
||||||
movq mm4, mm1
|
|
||||||
pand mm3, mm6
|
|
||||||
pand mm4, mm6
|
|
||||||
psubd mm3, mm4
|
|
||||||
pand mm3, mm7
|
|
||||||
|
|
||||||
mov eax, 0x000000FF
|
|
||||||
movd mm6, eax ;mm6 = Vmask = 0x000000FF
|
|
||||||
|
|
||||||
; Calculate color V difference
|
|
||||||
movq mm4, mm0
|
|
||||||
movq mm5, mm1
|
|
||||||
pand mm4, mm6
|
|
||||||
pand mm5, mm6
|
|
||||||
psubd mm4, mm5
|
|
||||||
pand mm4, mm7
|
|
||||||
|
|
||||||
mov eax, 0x00300000
|
|
||||||
movd mm5, eax ;mm5 = trY = 0x00300000
|
|
||||||
mov eax, 0x00000700
|
|
||||||
movd mm6, eax ;mm6 = trU = 0x00000700
|
|
||||||
mov eax, 0x00000006
|
|
||||||
movd mm7, eax ;mm7 = trV = 0x00000006
|
|
||||||
|
|
||||||
; Compare the results
|
|
||||||
pcmpgtd mm2, trY
|
|
||||||
pcmpgtd mm3, trU
|
|
||||||
pcmpgtd mm4, trV
|
|
||||||
por mm2, mm3
|
|
||||||
por mm2, mm4
|
|
||||||
|
|
||||||
movd retval, mm2
|
|
||||||
|
|
||||||
EMMS
|
|
||||||
}
|
|
||||||
return (retval != 0);
|
|
||||||
#else
|
|
||||||
return
|
return
|
||||||
( abs32((YUV1 & Ymask) - (YUV2 & Ymask)) > trY ) ||
|
( abs32((YUV1 & Ymask) - (YUV2 & Ymask)) > trY ) ||
|
||||||
( abs32((YUV1 & Umask) - (YUV2 & Umask)) > trU ) ||
|
( abs32((YUV1 & Umask) - (YUV2 & Umask)) > trU ) ||
|
||||||
( abs32((YUV1 & Vmask) - (YUV2 & Vmask)) > trV );
|
( abs32((YUV1 & Vmask) - (YUV2 & Vmask)) > trV );
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
unsigned int RGBtoYUV(unsigned int c)
|
unsigned int RGBtoYUV(unsigned int c)
|
||||||
{ // Division through 3 slows down the emulation about 10% !!!
|
{
|
||||||
#ifdef MMX
|
// Division through 3 slows down the emulation about 10% !!!
|
||||||
unsigned int retval;
|
|
||||||
__asm
|
|
||||||
{
|
|
||||||
movd mm0, c
|
|
||||||
movq mm1, mm0
|
|
||||||
movq mm2, mm0 ;mm0=mm1=mm2=c
|
|
||||||
|
|
||||||
mov eax, 0x000000FF
|
|
||||||
movd mm5, eax ;mm5 = REDMASK = 0x000000FF
|
|
||||||
mov eax, 0x0000FF00
|
|
||||||
movd mm6, eax ;mm6 = GREENMASK = 0x0000FF00
|
|
||||||
mov eax, 0x00FF0000
|
|
||||||
movd mm7, eax ;mm7 = BLUEMASK = 0x00FF0000
|
|
||||||
|
|
||||||
|
|
||||||
pand mm0, mm5
|
|
||||||
pand mm1, mm6
|
|
||||||
pand mm2, mm7 ;mm0=R mm1=G mm2=B
|
|
||||||
|
|
||||||
movq mm3, mm0
|
|
||||||
paddd mm3, mm1
|
|
||||||
paddd mm3, mm2
|
|
||||||
; psrld mm3, 2 ;mm3=Y
|
|
||||||
; pslld mm3, 16
|
|
||||||
pslld mm3, 14 ;mm3=Y<<16
|
|
||||||
|
|
||||||
mov eax, 512
|
|
||||||
movd mm7, eax ;mm7 = 128 << 2 = 512
|
|
||||||
|
|
||||||
movq mm4, mm0
|
|
||||||
psubd mm4, mm2
|
|
||||||
; psrld mm4, 2
|
|
||||||
; paddd mm4, mm7 ;mm4=U
|
|
||||||
; pslld mm4, 8 ;mm4=U<<8
|
|
||||||
paddd mm4, mm7
|
|
||||||
pslld mm4, 6
|
|
||||||
|
|
||||||
mov eax, 128
|
|
||||||
movd mm7, eax ;mm7 = 128
|
|
||||||
|
|
||||||
movq mm5, mm1
|
|
||||||
pslld mm5, 1
|
|
||||||
psubd mm5, mm0
|
|
||||||
psubd mm5, mm2
|
|
||||||
psrld mm5, 3
|
|
||||||
paddd mm5, mm7 ;mm5=V
|
|
||||||
|
|
||||||
paddd mm5, mm4
|
|
||||||
paddd mm5, mm3
|
|
||||||
|
|
||||||
movd retval, mm5
|
|
||||||
|
|
||||||
EMMS
|
|
||||||
}
|
|
||||||
return retval;
|
|
||||||
#else
|
|
||||||
unsigned char r, g, b, Y, u, v;
|
unsigned char r, g, b, Y, u, v;
|
||||||
r = (c & 0x000000FF);
|
r = (c & 0x000000FF);
|
||||||
g = (c & 0x0000FF00) >> 8;
|
g = (c & 0x0000FF00) >> 8;
|
||||||
|
@ -374,16 +98,4 @@ unsigned int RGBtoYUV(unsigned int c)
|
||||||
u = 128 + ((r - b) >> 2);
|
u = 128 + ((r - b) >> 2);
|
||||||
v = 128 + ((-r + 2*g -b)>>3);
|
v = 128 + ((-r + 2*g -b)>>3);
|
||||||
return (Y<<16) + (u<<8) + v;
|
return (Y<<16) + (u<<8) + v;
|
||||||
|
|
||||||
// Extremely High Quality Code
|
|
||||||
//unsigned char r, g, b;
|
|
||||||
//r = c & 0xFF;
|
|
||||||
//g = (c >> 8) & 0xFF;
|
|
||||||
//b = (c >> 16) & 0xFF;
|
|
||||||
//unsigned char y, u, v;
|
|
||||||
//y = (0.256788 * r + 0.504129 * g + 0.097906 * b) + 16;
|
|
||||||
//u = (-0.148223 * r - 0.290993 * g + 0.439216 * b) + 128;
|
|
||||||
//v = (0.439216 * r - 0.367788 * g - 0.071427 * b) + 128;
|
|
||||||
//return (y << 16) + (u << 8) + v;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,384 @@
|
||||||
|
/*
|
||||||
|
VisualBoyAdvance - a Game Boy & Game Boy Advance emulator
|
||||||
|
|
||||||
|
Copyright (C) 1999 - 2003 Forgotten
|
||||||
|
Copyright (C) 2003 - 2004 Forgotten and the VBA development team
|
||||||
|
Copyright (C) 2005 - 2006 VBA development team
|
||||||
|
|
||||||
|
|
||||||
|
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 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "System.h"
|
||||||
|
|
||||||
|
#if defined(_16BIT)
|
||||||
|
#define SIZE_PIXEL 2
|
||||||
|
#define COLORTYPE uint32_t
|
||||||
|
#elif defined(_32BIT)
|
||||||
|
#define SIZE_PIXEL 4 // 32bit = 4 bytes
|
||||||
|
#define COLORTYPE unsigned int
|
||||||
|
#endif
|
||||||
|
#define abs32(value) (value & 0x7FFFFFFF)
|
||||||
|
|
||||||
|
|
||||||
|
void Interp1(unsigned char * pc, COLORTYPE c1, COLORTYPE c2);
|
||||||
|
void Interp2(unsigned char * pc, COLORTYPE c1, COLORTYPE c2, COLORTYPE c3);
|
||||||
|
void Interp3(unsigned char * pc, COLORTYPE c1, COLORTYPE c2);
|
||||||
|
void Interp4(unsigned char * pc, COLORTYPE c1, COLORTYPE c2, COLORTYPE c3);
|
||||||
|
void Interp5(unsigned char * pc, COLORTYPE c1, COLORTYPE c2);
|
||||||
|
void Interp6(unsigned char * pc, COLORTYPE c1, COLORTYPE c2, COLORTYPE c3);
|
||||||
|
void Interp7(unsigned char * pc, COLORTYPE c1, COLORTYPE c2, COLORTYPE c3);
|
||||||
|
void Interp8(unsigned char * pc, COLORTYPE c1, COLORTYPE c2);
|
||||||
|
unsigned int RGBtoYUV(COLORTYPE c);
|
||||||
|
bool Diff(COLORTYPE c1, COLORTYPE c2);
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(_HQ3X)
|
||||||
|
#define _MAGNIFICATION 3
|
||||||
|
|
||||||
|
#define PIXEL00_1M Interp1( pOut, c[5], c[1] );
|
||||||
|
#define PIXEL00_1U Interp1( pOut, c[5], c[2] );
|
||||||
|
#define PIXEL00_1L Interp1( pOut, c[5], c[4] );
|
||||||
|
#define PIXEL00_2 Interp2( pOut, c[5], c[4], c[2] );
|
||||||
|
#define PIXEL00_4 Interp4( pOut, c[5], c[4], c[2] );
|
||||||
|
#define PIXEL00_5 Interp5( pOut, c[4], c[2] );
|
||||||
|
#define PIXEL00_C *((COLORTYPE*)(pOut)) = c[5];
|
||||||
|
|
||||||
|
#define PIXEL01_1 Interp1( pOut+SIZE_PIXEL, c[5], c[2] );
|
||||||
|
#define PIXEL01_3 Interp3( pOut+SIZE_PIXEL, c[5], c[2] );
|
||||||
|
#define PIXEL01_6 Interp1( pOut+SIZE_PIXEL, c[2], c[5] );
|
||||||
|
#define PIXEL01_C *((COLORTYPE*)(pOut+SIZE_PIXEL)) = c[5];
|
||||||
|
|
||||||
|
#define PIXEL02_1M Interp1( pOut+SIZE_PIXEL+SIZE_PIXEL, c[5], c[3] );
|
||||||
|
#define PIXEL02_1U Interp1( pOut+SIZE_PIXEL+SIZE_PIXEL, c[5], c[2] );
|
||||||
|
#define PIXEL02_1R Interp1( pOut+SIZE_PIXEL+SIZE_PIXEL, c[5], c[6] );
|
||||||
|
#define PIXEL02_2 Interp2( pOut+SIZE_PIXEL+SIZE_PIXEL, c[5], c[2], c[6] );
|
||||||
|
#define PIXEL02_4 Interp4( pOut+SIZE_PIXEL+SIZE_PIXEL, c[5], c[2], c[6] );
|
||||||
|
#define PIXEL02_5 Interp5( pOut+SIZE_PIXEL+SIZE_PIXEL, c[2], c[6] );
|
||||||
|
#define PIXEL02_C *((COLORTYPE*)(pOut+SIZE_PIXEL+SIZE_PIXEL)) = c[5];
|
||||||
|
|
||||||
|
#define PIXEL10_1 Interp1( pOut+dstPitch, c[5], c[4] );
|
||||||
|
#define PIXEL10_3 Interp3( pOut+dstPitch, c[5], c[4] );
|
||||||
|
#define PIXEL10_6 Interp1( pOut+dstPitch, c[4], c[5] );
|
||||||
|
#define PIXEL10_C *((COLORTYPE*)(pOut+dstPitch)) = c[5];
|
||||||
|
|
||||||
|
#define PIXEL11 *((COLORTYPE*)(pOut+dstPitch+SIZE_PIXEL)) = c[5];
|
||||||
|
|
||||||
|
#define PIXEL12_1 Interp1( pOut+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[5], c[6] );
|
||||||
|
#define PIXEL12_3 Interp3( pOut+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[5], c[6] );
|
||||||
|
#define PIXEL12_6 Interp1( pOut+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[6], c[5] );
|
||||||
|
#define PIXEL12_C *((COLORTYPE*)(pOut+dstPitch+SIZE_PIXEL+SIZE_PIXEL)) = c[5];
|
||||||
|
|
||||||
|
#define PIXEL20_1M Interp1( pOut+dstPitch+dstPitch, c[5], c[7] );
|
||||||
|
#define PIXEL20_1D Interp1( pOut+dstPitch+dstPitch, c[5], c[8] );
|
||||||
|
#define PIXEL20_1L Interp1( pOut+dstPitch+dstPitch, c[5], c[4] );
|
||||||
|
#define PIXEL20_2 Interp2( pOut+dstPitch+dstPitch, c[5], c[8], c[4] );
|
||||||
|
#define PIXEL20_4 Interp4( pOut+dstPitch+dstPitch, c[5], c[8], c[4] );
|
||||||
|
#define PIXEL20_5 Interp5( pOut+dstPitch+dstPitch, c[8], c[4] );
|
||||||
|
#define PIXEL20_C *((COLORTYPE*)(pOut+dstPitch+dstPitch)) = c[5];
|
||||||
|
|
||||||
|
#define PIXEL21_1 Interp1( pOut+dstPitch+dstPitch+SIZE_PIXEL, c[5], c[8] );
|
||||||
|
#define PIXEL21_3 Interp3( pOut+dstPitch+dstPitch+SIZE_PIXEL, c[5], c[8] );
|
||||||
|
#define PIXEL21_6 Interp1( pOut+dstPitch+dstPitch+SIZE_PIXEL, c[8], c[5] );
|
||||||
|
#define PIXEL21_C *((COLORTYPE*)(pOut+dstPitch+dstPitch+SIZE_PIXEL)) = c[5];
|
||||||
|
|
||||||
|
#define PIXEL22_1M Interp1( pOut+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[5], c[9] );
|
||||||
|
#define PIXEL22_1D Interp1( pOut+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[5], c[8] );
|
||||||
|
#define PIXEL22_1R Interp1( pOut+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[5], c[6] );
|
||||||
|
#define PIXEL22_2 Interp2( pOut+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[5], c[6], c[8] );
|
||||||
|
#define PIXEL22_4 Interp4( pOut+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[5], c[6], c[8] );
|
||||||
|
#define PIXEL22_5 Interp5( pOut+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[6], c[8] );
|
||||||
|
#define PIXEL22_C *((COLORTYPE*)(pOut+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL)) = c[5];
|
||||||
|
|
||||||
|
#elif defined(_HQ4X)
|
||||||
|
|
||||||
|
#define _MAGNIFICATION 4
|
||||||
|
|
||||||
|
#define PIXEL00_0 *((COLORTYPE*)(pOut)) = c[5];
|
||||||
|
#define PIXEL00_11 Interp1(pOut, c[5], c[4]);
|
||||||
|
#define PIXEL00_12 Interp1(pOut, c[5], c[2]);
|
||||||
|
#define PIXEL00_20 Interp2(pOut, c[5], c[2], c[4]);
|
||||||
|
#define PIXEL00_50 Interp5(pOut, c[2], c[4]);
|
||||||
|
#define PIXEL00_80 Interp8(pOut, c[5], c[1]);
|
||||||
|
#define PIXEL00_81 Interp8(pOut, c[5], c[4]);
|
||||||
|
#define PIXEL00_82 Interp8(pOut, c[5], c[2]);
|
||||||
|
|
||||||
|
#define PIXEL01_0 *((COLORTYPE*)(pOut+SIZE_PIXEL)) = c[5];
|
||||||
|
#define PIXEL01_10 Interp1(pOut+SIZE_PIXEL, c[5], c[1]);
|
||||||
|
#define PIXEL01_12 Interp1(pOut+SIZE_PIXEL, c[5], c[2]);
|
||||||
|
#define PIXEL01_14 Interp1(pOut+SIZE_PIXEL, c[2], c[5]);
|
||||||
|
#define PIXEL01_21 Interp2(pOut+SIZE_PIXEL, c[2], c[5], c[4]);
|
||||||
|
#define PIXEL01_31 Interp3(pOut+SIZE_PIXEL, c[5], c[4]);
|
||||||
|
#define PIXEL01_50 Interp5(pOut+SIZE_PIXEL, c[2], c[5]);
|
||||||
|
#define PIXEL01_60 Interp6(pOut+SIZE_PIXEL, c[5], c[2], c[4]);
|
||||||
|
#define PIXEL01_61 Interp6(pOut+SIZE_PIXEL, c[5], c[2], c[1]);
|
||||||
|
#define PIXEL01_82 Interp8(pOut+SIZE_PIXEL, c[5], c[2]);
|
||||||
|
#define PIXEL01_83 Interp8(pOut+SIZE_PIXEL, c[2], c[4]);
|
||||||
|
|
||||||
|
#define PIXEL02_0 *((COLORTYPE*)(pOut+SIZE_PIXEL+SIZE_PIXEL)) = c[5];
|
||||||
|
#define PIXEL02_10 Interp1(pOut+SIZE_PIXEL+SIZE_PIXEL, c[5], c[3]);
|
||||||
|
#define PIXEL02_11 Interp1(pOut+SIZE_PIXEL+SIZE_PIXEL, c[5], c[2]);
|
||||||
|
#define PIXEL02_13 Interp1(pOut+SIZE_PIXEL+SIZE_PIXEL, c[2], c[5]);
|
||||||
|
#define PIXEL02_21 Interp2(pOut+SIZE_PIXEL+SIZE_PIXEL, c[2], c[5], c[6]);
|
||||||
|
#define PIXEL02_32 Interp3(pOut+SIZE_PIXEL+SIZE_PIXEL, c[5], c[6]);
|
||||||
|
#define PIXEL02_50 Interp5(pOut+SIZE_PIXEL+SIZE_PIXEL, c[2], c[5]);
|
||||||
|
#define PIXEL02_60 Interp6(pOut+SIZE_PIXEL+SIZE_PIXEL, c[5], c[2], c[6]);
|
||||||
|
#define PIXEL02_61 Interp6(pOut+SIZE_PIXEL+SIZE_PIXEL, c[5], c[2], c[3]);
|
||||||
|
#define PIXEL02_81 Interp8(pOut+SIZE_PIXEL+SIZE_PIXEL, c[5], c[2]);
|
||||||
|
#define PIXEL02_83 Interp8(pOut+SIZE_PIXEL+SIZE_PIXEL, c[2], c[6]);
|
||||||
|
|
||||||
|
#define PIXEL03_0 *((COLORTYPE*)(pOut+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL)) = c[5];
|
||||||
|
#define PIXEL03_11 Interp1(pOut+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[5], c[2]);
|
||||||
|
#define PIXEL03_12 Interp1(pOut+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[5], c[6]);
|
||||||
|
#define PIXEL03_20 Interp2(pOut+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[5], c[2], c[6]);
|
||||||
|
#define PIXEL03_50 Interp5(pOut+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[2], c[6]);
|
||||||
|
#define PIXEL03_80 Interp8(pOut+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[5], c[3]);
|
||||||
|
#define PIXEL03_81 Interp8(pOut+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[5], c[2]);
|
||||||
|
#define PIXEL03_82 Interp8(pOut+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[5], c[6]);
|
||||||
|
|
||||||
|
#define PIXEL10_0 *((COLORTYPE*)(pOut+dstPitch)) = c[5];
|
||||||
|
#define PIXEL10_10 Interp1(pOut+dstPitch, c[5], c[1]);
|
||||||
|
#define PIXEL10_11 Interp1(pOut+dstPitch, c[5], c[4]);
|
||||||
|
#define PIXEL10_13 Interp1(pOut+dstPitch, c[4], c[5]);
|
||||||
|
#define PIXEL10_21 Interp2(pOut+dstPitch, c[4], c[5], c[2]);
|
||||||
|
#define PIXEL10_32 Interp3(pOut+dstPitch, c[5], c[2]);
|
||||||
|
#define PIXEL10_50 Interp5(pOut+dstPitch, c[4], c[5]);
|
||||||
|
#define PIXEL10_60 Interp6(pOut+dstPitch, c[5], c[4], c[2]);
|
||||||
|
#define PIXEL10_61 Interp6(pOut+dstPitch, c[5], c[4], c[1]);
|
||||||
|
#define PIXEL10_81 Interp8(pOut+dstPitch, c[5], c[4]);
|
||||||
|
#define PIXEL10_83 Interp8(pOut+dstPitch, c[4], c[2]);
|
||||||
|
|
||||||
|
#define PIXEL11_0 *((COLORTYPE*)(pOut+dstPitch+SIZE_PIXEL)) = c[5];
|
||||||
|
#define PIXEL11_30 Interp3(pOut+dstPitch+SIZE_PIXEL, c[5], c[1]);
|
||||||
|
#define PIXEL11_31 Interp3(pOut+dstPitch+SIZE_PIXEL, c[5], c[4]);
|
||||||
|
#define PIXEL11_32 Interp3(pOut+dstPitch+SIZE_PIXEL, c[5], c[2]);
|
||||||
|
#define PIXEL11_70 Interp7(pOut+dstPitch+SIZE_PIXEL, c[5], c[4], c[2]);
|
||||||
|
|
||||||
|
#define PIXEL12_0 *((COLORTYPE*)(pOut+dstPitch+SIZE_PIXEL+SIZE_PIXEL)) = c[5];
|
||||||
|
#define PIXEL12_30 Interp3(pOut+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[5], c[3]);
|
||||||
|
#define PIXEL12_31 Interp3(pOut+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[5], c[2]);
|
||||||
|
#define PIXEL12_32 Interp3(pOut+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[5], c[6]);
|
||||||
|
#define PIXEL12_70 Interp7(pOut+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[5], c[6], c[2]);
|
||||||
|
|
||||||
|
#define PIXEL13_0 *((COLORTYPE*)(pOut+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL)) = c[5];
|
||||||
|
#define PIXEL13_10 Interp1(pOut+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[5], c[3]);
|
||||||
|
#define PIXEL13_12 Interp1(pOut+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[5], c[6]);
|
||||||
|
#define PIXEL13_14 Interp1(pOut+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[6], c[5]);
|
||||||
|
#define PIXEL13_21 Interp2(pOut+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[6], c[5], c[2]);
|
||||||
|
#define PIXEL13_31 Interp3(pOut+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[5], c[2]);
|
||||||
|
#define PIXEL13_50 Interp5(pOut+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[6], c[5]);
|
||||||
|
#define PIXEL13_60 Interp6(pOut+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[5], c[6], c[2]);
|
||||||
|
#define PIXEL13_61 Interp6(pOut+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[5], c[6], c[3]);
|
||||||
|
#define PIXEL13_82 Interp8(pOut+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[5], c[6]);
|
||||||
|
#define PIXEL13_83 Interp8(pOut+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[6], c[2]);
|
||||||
|
|
||||||
|
#define PIXEL20_0 *((COLORTYPE*)(pOut+dstPitch+dstPitch)) = c[5];
|
||||||
|
#define PIXEL20_10 Interp1(pOut+dstPitch+dstPitch, c[5], c[7]);
|
||||||
|
#define PIXEL20_12 Interp1(pOut+dstPitch+dstPitch, c[5], c[4]);
|
||||||
|
#define PIXEL20_14 Interp1(pOut+dstPitch+dstPitch, c[4], c[5]);
|
||||||
|
#define PIXEL20_21 Interp2(pOut+dstPitch+dstPitch, c[4], c[5], c[8]);
|
||||||
|
#define PIXEL20_31 Interp3(pOut+dstPitch+dstPitch, c[5], c[8]);
|
||||||
|
#define PIXEL20_50 Interp5(pOut+dstPitch+dstPitch, c[4], c[5]);
|
||||||
|
#define PIXEL20_60 Interp6(pOut+dstPitch+dstPitch, c[5], c[4], c[8]);
|
||||||
|
#define PIXEL20_61 Interp6(pOut+dstPitch+dstPitch, c[5], c[4], c[7]);
|
||||||
|
#define PIXEL20_82 Interp8(pOut+dstPitch+dstPitch, c[5], c[4]);
|
||||||
|
#define PIXEL20_83 Interp8(pOut+dstPitch+dstPitch, c[4], c[8]);
|
||||||
|
|
||||||
|
#define PIXEL21_0 *((COLORTYPE*)(pOut+dstPitch+dstPitch+SIZE_PIXEL)) = c[5];
|
||||||
|
#define PIXEL21_30 Interp3(pOut+dstPitch+dstPitch+SIZE_PIXEL, c[5], c[7]);
|
||||||
|
#define PIXEL21_31 Interp3(pOut+dstPitch+dstPitch+SIZE_PIXEL, c[5], c[8]);
|
||||||
|
#define PIXEL21_32 Interp3(pOut+dstPitch+dstPitch+SIZE_PIXEL, c[5], c[4]);
|
||||||
|
#define PIXEL21_70 Interp7(pOut+dstPitch+dstPitch+SIZE_PIXEL, c[5], c[4], c[8]);
|
||||||
|
#define PIXEL22_0 *((COLORTYPE*)(pOut+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL)) = c[5];
|
||||||
|
#define PIXEL22_30 Interp3(pOut+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[5], c[9]);
|
||||||
|
#define PIXEL22_31 Interp3(pOut+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[5], c[6]);
|
||||||
|
#define PIXEL22_32 Interp3(pOut+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[5], c[8]);
|
||||||
|
#define PIXEL22_70 Interp7(pOut+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[5], c[6], c[8]);
|
||||||
|
|
||||||
|
#define PIXEL23_0 *((COLORTYPE*)(pOut+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL)) = c[5];
|
||||||
|
#define PIXEL23_10 Interp1(pOut+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[5], c[9]);
|
||||||
|
#define PIXEL23_11 Interp1(pOut+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[5], c[6]);
|
||||||
|
#define PIXEL23_13 Interp1(pOut+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[6], c[5]);
|
||||||
|
#define PIXEL23_21 Interp2(pOut+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[6], c[5], c[8]);
|
||||||
|
#define PIXEL23_32 Interp3(pOut+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[5], c[8]);
|
||||||
|
#define PIXEL23_50 Interp5(pOut+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[6], c[5]);
|
||||||
|
#define PIXEL23_60 Interp6(pOut+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[5], c[6], c[8]);
|
||||||
|
#define PIXEL23_61 Interp6(pOut+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[5], c[6], c[9]);
|
||||||
|
#define PIXEL23_81 Interp8(pOut+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[5], c[6]);
|
||||||
|
#define PIXEL23_83 Interp8(pOut+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[6], c[8]);
|
||||||
|
|
||||||
|
#define PIXEL30_0 *((COLORTYPE*)(pOut+dstPitch+dstPitch+dstPitch)) = c[5];
|
||||||
|
#define PIXEL30_11 Interp1(pOut+dstPitch+dstPitch+dstPitch, c[5], c[8]);
|
||||||
|
#define PIXEL30_12 Interp1(pOut+dstPitch+dstPitch+dstPitch, c[5], c[4]);
|
||||||
|
#define PIXEL30_20 Interp2(pOut+dstPitch+dstPitch+dstPitch, c[5], c[8], c[4]);
|
||||||
|
#define PIXEL30_50 Interp5(pOut+dstPitch+dstPitch+dstPitch, c[8], c[4]);
|
||||||
|
#define PIXEL30_80 Interp8(pOut+dstPitch+dstPitch+dstPitch, c[5], c[7]);
|
||||||
|
#define PIXEL30_81 Interp8(pOut+dstPitch+dstPitch+dstPitch, c[5], c[8]);
|
||||||
|
#define PIXEL30_82 Interp8(pOut+dstPitch+dstPitch+dstPitch, c[5], c[4]);
|
||||||
|
|
||||||
|
#define PIXEL31_0 *((COLORTYPE*)(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL)) = c[5];
|
||||||
|
#define PIXEL31_10 Interp1(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL, c[5], c[7]);
|
||||||
|
#define PIXEL31_11 Interp1(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL, c[5], c[8]);
|
||||||
|
#define PIXEL31_13 Interp1(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL, c[8], c[5]);
|
||||||
|
#define PIXEL31_21 Interp2(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL, c[8], c[5], c[4]);
|
||||||
|
#define PIXEL31_32 Interp3(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL, c[5], c[4]);
|
||||||
|
#define PIXEL31_50 Interp5(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL, c[8], c[5]);
|
||||||
|
#define PIXEL31_60 Interp6(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL, c[5], c[8], c[4]);
|
||||||
|
#define PIXEL31_61 Interp6(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL, c[5], c[8], c[7]);
|
||||||
|
#define PIXEL31_81 Interp8(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL, c[5], c[8]);
|
||||||
|
#define PIXEL31_83 Interp8(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL, c[8], c[4]);
|
||||||
|
|
||||||
|
#define PIXEL32_0 *((COLORTYPE*)(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL)) = c[5];
|
||||||
|
#define PIXEL32_10 Interp1(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[5], c[9]);
|
||||||
|
#define PIXEL32_12 Interp1(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[5], c[8]);
|
||||||
|
#define PIXEL32_14 Interp1(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[8], c[5]);
|
||||||
|
#define PIXEL32_21 Interp2(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[8], c[5], c[6]);
|
||||||
|
#define PIXEL32_31 Interp3(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[5], c[6]);
|
||||||
|
#define PIXEL32_50 Interp5(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[8], c[5]);
|
||||||
|
#define PIXEL32_60 Interp6(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[5], c[8], c[6]);
|
||||||
|
#define PIXEL32_61 Interp6(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[5], c[8], c[9]);
|
||||||
|
#define PIXEL32_82 Interp8(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[5], c[8]);
|
||||||
|
#define PIXEL32_83 Interp8(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL, c[8], c[6]);
|
||||||
|
|
||||||
|
#define PIXEL33_0 *((COLORTYPE*)(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL)) = c[5];
|
||||||
|
#define PIXEL33_11 Interp1(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[5], c[6]);
|
||||||
|
#define PIXEL33_12 Interp1(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[5], c[8]);
|
||||||
|
#define PIXEL33_20 Interp2(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[5], c[8], c[6]);
|
||||||
|
#define PIXEL33_50 Interp5(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[8], c[6]);
|
||||||
|
#define PIXEL33_80 Interp8(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[5], c[9]);
|
||||||
|
#define PIXEL33_81 Interp8(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[5], c[6]);
|
||||||
|
#define PIXEL33_82 Interp8(pOut+dstPitch+dstPitch+dstPitch+SIZE_PIXEL+SIZE_PIXEL+SIZE_PIXEL, c[5], c[8]);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(_HQ3X)
|
||||||
|
#if defined(_16BIT)
|
||||||
|
void hq3x16(unsigned char * pIn, unsigned int srcPitch,
|
||||||
|
unsigned char *,
|
||||||
|
unsigned char * pOut, unsigned int dstPitch,
|
||||||
|
int Xres, int Yres)
|
||||||
|
#elif defined(_32BIT)
|
||||||
|
void hq3x32(unsigned char * pIn, unsigned int srcPitch,
|
||||||
|
unsigned char *,
|
||||||
|
unsigned char * pOut, unsigned int dstPitch,
|
||||||
|
int Xres, int Yres)
|
||||||
|
#endif
|
||||||
|
#elif defined(_HQ4X)
|
||||||
|
#if defined(_16BIT)
|
||||||
|
void hq4x16(unsigned char * pIn, unsigned int srcPitch,
|
||||||
|
unsigned char *,
|
||||||
|
unsigned char * pOut, unsigned int dstPitch,
|
||||||
|
int Xres, int Yres)
|
||||||
|
#elif defined(_32BIT)
|
||||||
|
void hq4x32(unsigned char * pIn, unsigned int srcPitch,
|
||||||
|
unsigned char *,
|
||||||
|
unsigned char * pOut, unsigned int dstPitch,
|
||||||
|
int Xres, int Yres)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
unsigned int YUV1, YUV2;
|
||||||
|
int i, j, k;
|
||||||
|
unsigned int line;
|
||||||
|
COLORTYPE c[10];
|
||||||
|
|
||||||
|
// +----+----+----+
|
||||||
|
// | | | |
|
||||||
|
// | c1 | c2 | c3 |
|
||||||
|
// +----+----+----+
|
||||||
|
// | | | |
|
||||||
|
// | c4 | c5 | c6 |
|
||||||
|
// +----+----+----+
|
||||||
|
// | | | |
|
||||||
|
// | c7 | c8 | c9 |
|
||||||
|
// +----+----+----+
|
||||||
|
|
||||||
|
for (j=0; j<Yres; j++)
|
||||||
|
{
|
||||||
|
if ( (j>0) || (j<Yres-1) ) line = srcPitch; else line = 0;
|
||||||
|
|
||||||
|
for (i=0; i<Xres; i++)
|
||||||
|
{
|
||||||
|
c[2] = *((COLORTYPE*)(pIn - line));
|
||||||
|
c[5] = *((COLORTYPE*)(pIn ));
|
||||||
|
c[8] = *((COLORTYPE*)(pIn + line));
|
||||||
|
|
||||||
|
if (i>0)
|
||||||
|
{
|
||||||
|
c[1] = *((COLORTYPE*)(pIn - line - SIZE_PIXEL));
|
||||||
|
c[4] = *((COLORTYPE*)(pIn - SIZE_PIXEL));
|
||||||
|
c[7] = *((COLORTYPE*)(pIn + line - SIZE_PIXEL));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
c[1] = c[2];
|
||||||
|
c[4] = c[5];
|
||||||
|
c[7] = c[8];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i<Xres-1)
|
||||||
|
{
|
||||||
|
c[3] = *((COLORTYPE*)(pIn - line + SIZE_PIXEL));
|
||||||
|
c[6] = *((COLORTYPE*)(pIn + SIZE_PIXEL));
|
||||||
|
c[9] = *((COLORTYPE*)(pIn + line + SIZE_PIXEL));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
c[3] = c[2];
|
||||||
|
c[6] = c[5];
|
||||||
|
c[9] = c[8];
|
||||||
|
}
|
||||||
|
|
||||||
|
int pattern = 0;
|
||||||
|
int flag = 1;
|
||||||
|
|
||||||
|
YUV1 = RGBtoYUV(c[5]);
|
||||||
|
|
||||||
|
for (k=1; k<=9; k++)
|
||||||
|
{
|
||||||
|
if (k==5) continue;
|
||||||
|
|
||||||
|
if ( c[k] != c[5] )
|
||||||
|
{
|
||||||
|
YUV2 = RGBtoYUV(c[k]);
|
||||||
|
if (
|
||||||
|
( abs32((YUV1 & 0x00FF0000) - (YUV2 & 0x00FF0000)) > 0x00300000 ) ||
|
||||||
|
( abs32((YUV1 & 0x0000FF00) - (YUV2 & 0x0000FF00)) > 0x00000700 ) ||
|
||||||
|
( abs32((YUV1 & 0x000000FF) - (YUV2 & 0x000000FF)) > 0x00000006 )
|
||||||
|
)
|
||||||
|
pattern |= flag;
|
||||||
|
}
|
||||||
|
flag <<= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(_HQ3X)
|
||||||
|
#include "hq3x_pattern.h"
|
||||||
|
#elif defined(_HQ4X)
|
||||||
|
#include "hq4x_pattern.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
pIn += SIZE_PIXEL;
|
||||||
|
pOut += _MAGNIFICATION * SIZE_PIXEL;
|
||||||
|
}
|
||||||
|
pIn += srcPitch - (Xres * SIZE_PIXEL);
|
||||||
|
pOut += dstPitch-(_MAGNIFICATION * Xres * SIZE_PIXEL);
|
||||||
|
pOut += (_MAGNIFICATION-1) * dstPitch;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef SIZE_PIXEL
|
||||||
|
#undef COLORTYPE
|
||||||
|
#undef abs32
|
|
@ -47,7 +47,7 @@ Changes in version 0.1.3:
|
||||||
|
|
||||||
* resample-sndfile clips output to -1...1 (thanks to Glenn Maynard)
|
* resample-sndfile clips output to -1...1 (thanks to Glenn Maynard)
|
||||||
|
|
||||||
Usage notes:
|
Usage notes:
|
||||||
|
|
||||||
- If the output buffer you pass is too small, resample_process
|
- If the output buffer you pass is too small, resample_process
|
||||||
may not use any input samples because its internal output
|
may not use any input samples because its internal output
|
||||||
|
|
|
@ -831,7 +831,7 @@ EOF
|
||||||
;;
|
;;
|
||||||
a.out-i386-linux)
|
a.out-i386-linux)
|
||||||
echo "${UNAME_MACHINE}-pc-linux-gnuaout"
|
echo "${UNAME_MACHINE}-pc-linux-gnuaout"
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
coff-i386)
|
coff-i386)
|
||||||
echo "${UNAME_MACHINE}-pc-linux-gnucoff"
|
echo "${UNAME_MACHINE}-pc-linux-gnucoff"
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
|
|
@ -115,7 +115,7 @@ fi
|
||||||
if [ x"$dir_arg" != x ]; then
|
if [ x"$dir_arg" != x ]; then
|
||||||
dst=$src
|
dst=$src
|
||||||
src=""
|
src=""
|
||||||
|
|
||||||
if [ -d $dst ]; then
|
if [ -d $dst ]; then
|
||||||
instcmd=:
|
instcmd=:
|
||||||
chmodcmd=""
|
chmodcmd=""
|
||||||
|
@ -125,7 +125,7 @@ if [ x"$dir_arg" != x ]; then
|
||||||
else
|
else
|
||||||
|
|
||||||
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
|
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
|
||||||
# might cause directories to be created, which would be especially bad
|
# might cause directories to be created, which would be especially bad
|
||||||
# if $src (and thus $dsttmp) contains '*'.
|
# if $src (and thus $dsttmp) contains '*'.
|
||||||
|
|
||||||
if [ -f $src -o -d $src ]
|
if [ -f $src -o -d $src ]
|
||||||
|
@ -135,7 +135,7 @@ else
|
||||||
echo "install: $src does not exist"
|
echo "install: $src does not exist"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ x"$dst" = x ]
|
if [ x"$dst" = x ]
|
||||||
then
|
then
|
||||||
echo "install: no destination specified"
|
echo "install: no destination specified"
|
||||||
|
@ -163,7 +163,7 @@ dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
|
||||||
|
|
||||||
# Skip lots of stat calls in the usual case.
|
# Skip lots of stat calls in the usual case.
|
||||||
if [ ! -d "$dstdir" ]; then
|
if [ ! -d "$dstdir" ]; then
|
||||||
defaultIFS='
|
defaultIFS='
|
||||||
'
|
'
|
||||||
IFS="${IFS-${defaultIFS}}"
|
IFS="${IFS-${defaultIFS}}"
|
||||||
|
|
||||||
|
@ -202,17 +202,17 @@ else
|
||||||
|
|
||||||
# If we're going to rename the final executable, determine the name now.
|
# If we're going to rename the final executable, determine the name now.
|
||||||
|
|
||||||
if [ x"$transformarg" = x ]
|
if [ x"$transformarg" = x ]
|
||||||
then
|
then
|
||||||
dstfile=`basename $dst`
|
dstfile=`basename $dst`
|
||||||
else
|
else
|
||||||
dstfile=`basename $dst $transformbasename |
|
dstfile=`basename $dst $transformbasename |
|
||||||
sed $transformarg`$transformbasename
|
sed $transformarg`$transformbasename
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# don't allow the sed command to completely eliminate the filename
|
# don't allow the sed command to completely eliminate the filename
|
||||||
|
|
||||||
if [ x"$dstfile" = x ]
|
if [ x"$dstfile" = x ]
|
||||||
then
|
then
|
||||||
dstfile=`basename $dst`
|
dstfile=`basename $dst`
|
||||||
else
|
else
|
||||||
|
@ -243,7 +243,7 @@ else
|
||||||
# Now rename the file to the real destination.
|
# Now rename the file to the real destination.
|
||||||
|
|
||||||
$doit $rmcmd -f $dstdir/$dstfile &&
|
$doit $rmcmd -f $dstdir/$dstfile &&
|
||||||
$doit $mvcmd $dsttmp $dstdir/$dstfile
|
$doit $mvcmd $dsttmp $dstdir/$dstfile
|
||||||
|
|
||||||
fi &&
|
fi &&
|
||||||
|
|
||||||
|
|
|
@ -7,19 +7,19 @@
|
||||||
CFG=libresample - Win32 Debug
|
CFG=libresample - Win32 Debug
|
||||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||||
!MESSAGE use the Export Makefile command and run
|
!MESSAGE use the Export Makefile command and run
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE NMAKE /f "libresample.mak".
|
!MESSAGE NMAKE /f "libresample.mak".
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE You can specify a configuration when running NMAKE
|
!MESSAGE You can specify a configuration when running NMAKE
|
||||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE NMAKE /f "libresample.mak" CFG="libresample - Win32 Debug"
|
!MESSAGE NMAKE /f "libresample.mak" CFG="libresample - Win32 Debug"
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE Possible choices for configuration are:
|
!MESSAGE Possible choices for configuration are:
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE "libresample - Win32 Release" (based on "Win32 (x86) Static Library")
|
!MESSAGE "libresample - Win32 Release" (based on "Win32 (x86) Static Library")
|
||||||
!MESSAGE "libresample - Win32 Debug" (based on "Win32 (x86) Static Library")
|
!MESSAGE "libresample - Win32 Debug" (based on "Win32 (x86) Static Library")
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
|
|
||||||
# Begin Project
|
# Begin Project
|
||||||
# PROP AllowPerConfigDependencies 0
|
# PROP AllowPerConfigDependencies 0
|
||||||
|
@ -74,7 +74,7 @@ LIB32=link.exe -lib
|
||||||
# ADD BASE LIB32 /nologo
|
# ADD BASE LIB32 /nologo
|
||||||
# ADD LIB32 /nologo /out:"libresampled.lib"
|
# ADD LIB32 /nologo /out:"libresampled.lib"
|
||||||
|
|
||||||
!ENDIF
|
!ENDIF
|
||||||
|
|
||||||
# Begin Target
|
# Begin Target
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,7 @@ int poll()
|
||||||
|
|
||||||
int config_main()
|
int config_main()
|
||||||
{
|
{
|
||||||
|
|
||||||
if(SDL_Init(SDL_INIT_TIMER|SDL_INIT_VIDEO|SDL_INIT_NOPARACHUTE)) {
|
if(SDL_Init(SDL_INIT_TIMER|SDL_INIT_VIDEO|SDL_INIT_NOPARACHUTE)) {
|
||||||
printf("Failed to init SDL: %s\n", SDL_GetError());
|
printf("Failed to init SDL: %s\n", SDL_GetError());
|
||||||
exit(-1);
|
exit(-1);
|
||||||
|
@ -87,22 +87,22 @@ int config_main()
|
||||||
// if (NULL == surface) {
|
// if (NULL == surface) {
|
||||||
// printf("Failed to set video mode: %s\n", SDL_GetError());
|
// printf("Failed to set video mode: %s\n", SDL_GetError());
|
||||||
// }
|
// }
|
||||||
|
|
||||||
int numJoy = SDL_NumJoysticks();
|
int numJoy = SDL_NumJoysticks();
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
for(i = 0; i < numJoy; i++) {
|
for(i = 0; i < numJoy; i++) {
|
||||||
SDL_JoystickOpen(i);
|
SDL_JoystickOpen(i);
|
||||||
}
|
}
|
||||||
SDL_JoystickEventState(SDL_ENABLE);
|
SDL_JoystickEventState(SDL_ENABLE);
|
||||||
|
|
||||||
/*printf("%i joysticks were found.\n\n", SDL_NumJoysticks() );
|
/*printf("%i joysticks were found.\n\n", SDL_NumJoysticks() );
|
||||||
printf("The names of the joysticks are:\n");
|
printf("The names of the joysticks are:\n");
|
||||||
|
|
||||||
for( i=0; i < SDL_NumJoysticks(); i++ )
|
for( i=0; i < SDL_NumJoysticks(); i++ )
|
||||||
{
|
{
|
||||||
printf(" %s\n", SDL_JoystickName(i));
|
printf(" %s\n", SDL_JoystickName(i));
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
return SDL_NumJoysticks();
|
return SDL_NumJoysticks();
|
||||||
}
|
}
|
||||||
|
|
|
@ -101,7 +101,7 @@ bool changeType;
|
||||||
- (void) closePrefsNull:(id)sender
|
- (void) closePrefsNull:(id)sender
|
||||||
{
|
{
|
||||||
[prefsWindow orderOut:self];
|
[prefsWindow orderOut:self];
|
||||||
|
|
||||||
paused = false;
|
paused = false;
|
||||||
SDL_PauseAudio(paused);
|
SDL_PauseAudio(paused);
|
||||||
wasPaused = false;
|
wasPaused = false;
|
||||||
|
@ -198,10 +198,10 @@ bool changeType;
|
||||||
[prefs setInteger:[realtimeClock indexOfSelectedItem] forKey:@"rtcEnabled"];
|
[prefs setInteger:[realtimeClock indexOfSelectedItem] forKey:@"rtcEnabled"];
|
||||||
[prefs setInteger:[interframe indexOfSelectedItem] forKey:@"ifbType"];
|
[prefs setInteger:[interframe indexOfSelectedItem] forKey:@"ifbType"];
|
||||||
[prefs setInteger:[changeFileType indexOfSelectedItem] forKey:@"changeType"];
|
[prefs setInteger:[changeFileType indexOfSelectedItem] forKey:@"changeType"];
|
||||||
|
|
||||||
[prefsWindow orderOut:self];
|
[prefsWindow orderOut:self];
|
||||||
[prefs synchronize];
|
[prefs synchronize];
|
||||||
|
|
||||||
paused = !paused;
|
paused = !paused;
|
||||||
SDL_PauseAudio(paused);
|
SDL_PauseAudio(paused);
|
||||||
if(paused)
|
if(paused)
|
||||||
|
@ -214,10 +214,10 @@ bool changeType;
|
||||||
BOOL isOK;
|
BOOL isOK;
|
||||||
NSString * path = [NSString stringWithString:@"~/Library/Preferences/VisualBoyAdvance.plist"];
|
NSString * path = [NSString stringWithString:@"~/Library/Preferences/VisualBoyAdvance.plist"];
|
||||||
path = [path stringByExpandingTildeInPath];
|
path = [path stringByExpandingTildeInPath];
|
||||||
|
|
||||||
if( [[NSFileManager defaultManager] fileExistsAtPath:path] )
|
if( [[NSFileManager defaultManager] fileExistsAtPath:path] )
|
||||||
isOK = [[NSFileManager defaultManager] removeFileAtPath:path handler:nil];
|
isOK = [[NSFileManager defaultManager] removeFileAtPath:path handler:nil];
|
||||||
|
|
||||||
sdlSetDefaultPreferences();
|
sdlSetDefaultPreferences();
|
||||||
[self loadConfig];
|
[self loadConfig];
|
||||||
}
|
}
|
||||||
|
@ -239,11 +239,11 @@ bool changeType;
|
||||||
{
|
{
|
||||||
NSNumber *fileType = [NSNumber numberWithUnsignedLong:'Cart'];
|
NSNumber *fileType = [NSNumber numberWithUnsignedLong:'Cart'];
|
||||||
NSNumber *fileCreator = [NSNumber numberWithUnsignedLong:'vboy'];
|
NSNumber *fileCreator = [NSNumber numberWithUnsignedLong:'vboy'];
|
||||||
|
|
||||||
NSString * fileString = [[NSString alloc] initWithCString:filename];
|
NSString * fileString = [[NSString alloc] initWithCString:filename];
|
||||||
|
|
||||||
[[NSFileManager defaultManager] changeFileAttributes:[NSDictionary dictionaryWithObject:fileType forKey:NSFileHFSTypeCode] atPath:fileString];
|
[[NSFileManager defaultManager] changeFileAttributes:[NSDictionary dictionaryWithObject:fileType forKey:NSFileHFSTypeCode] atPath:fileString];
|
||||||
|
|
||||||
[[NSFileManager defaultManager] changeFileAttributes:[NSDictionary dictionaryWithObject:fileCreator forKey:NSFileHFSCreatorCode] atPath:fileString];
|
[[NSFileManager defaultManager] changeFileAttributes:[NSDictionary dictionaryWithObject:fileCreator forKey:NSFileHFSCreatorCode] atPath:fileString];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -251,11 +251,11 @@ bool changeType;
|
||||||
{
|
{
|
||||||
NSNumber *fileType = [NSNumber numberWithUnsignedLong:'savf'];
|
NSNumber *fileType = [NSNumber numberWithUnsignedLong:'savf'];
|
||||||
NSNumber *fileCreator = [NSNumber numberWithUnsignedLong:'vboy'];
|
NSNumber *fileCreator = [NSNumber numberWithUnsignedLong:'vboy'];
|
||||||
|
|
||||||
NSString * fileString = [[NSString alloc] initWithCString:filename];
|
NSString * fileString = [[NSString alloc] initWithCString:filename];
|
||||||
|
|
||||||
[[NSFileManager defaultManager] changeFileAttributes:[NSDictionary dictionaryWithObject:fileType forKey:NSFileHFSTypeCode] atPath:fileString];
|
[[NSFileManager defaultManager] changeFileAttributes:[NSDictionary dictionaryWithObject:fileType forKey:NSFileHFSTypeCode] atPath:fileString];
|
||||||
|
|
||||||
[[NSFileManager defaultManager] changeFileAttributes:[NSDictionary dictionaryWithObject:fileCreator forKey:NSFileHFSCreatorCode] atPath:fileString];
|
[[NSFileManager defaultManager] changeFileAttributes:[NSDictionary dictionaryWithObject:fileCreator forKey:NSFileHFSCreatorCode] atPath:fileString];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -263,11 +263,11 @@ bool changeType;
|
||||||
{
|
{
|
||||||
NSNumber *fileType = [NSNumber numberWithUnsignedLong:'sgmf'];
|
NSNumber *fileType = [NSNumber numberWithUnsignedLong:'sgmf'];
|
||||||
NSNumber *fileCreator = [NSNumber numberWithUnsignedLong:'vboy'];
|
NSNumber *fileCreator = [NSNumber numberWithUnsignedLong:'vboy'];
|
||||||
|
|
||||||
NSString * fileString = [[NSString alloc] initWithCString:statename];
|
NSString * fileString = [[NSString alloc] initWithCString:statename];
|
||||||
|
|
||||||
[[NSFileManager defaultManager] changeFileAttributes:[NSDictionary dictionaryWithObject:fileType forKey:NSFileHFSTypeCode] atPath:fileString];
|
[[NSFileManager defaultManager] changeFileAttributes:[NSDictionary dictionaryWithObject:fileType forKey:NSFileHFSTypeCode] atPath:fileString];
|
||||||
|
|
||||||
[[NSFileManager defaultManager] changeFileAttributes:[NSDictionary dictionaryWithObject:fileCreator forKey:NSFileHFSCreatorCode] atPath:fileString];
|
[[NSFileManager defaultManager] changeFileAttributes:[NSDictionary dictionaryWithObject:fileCreator forKey:NSFileHFSCreatorCode] atPath:fileString];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -286,18 +286,18 @@ bool changeType;
|
||||||
{
|
{
|
||||||
char parentdir[MAXPATHLEN];
|
char parentdir[MAXPATHLEN];
|
||||||
char *c;
|
char *c;
|
||||||
|
|
||||||
strncpy ( parentdir, gArgv[0], sizeof(parentdir) );
|
strncpy ( parentdir, gArgv[0], sizeof(parentdir) );
|
||||||
c = (char*) parentdir;
|
c = (char*) parentdir;
|
||||||
|
|
||||||
while (*c != '\0') /* go to end */
|
while (*c != '\0') /* go to end */
|
||||||
c++;
|
c++;
|
||||||
|
|
||||||
while (*c != '/') /* back up to parent */
|
while (*c != '/') /* back up to parent */
|
||||||
c--;
|
c--;
|
||||||
|
|
||||||
*c++ = '\0'; /* cut off last part (binary name) */
|
*c++ = '\0'; /* cut off last part (binary name) */
|
||||||
|
|
||||||
if (shouldChdir)
|
if (shouldChdir)
|
||||||
{
|
{
|
||||||
assert ( chdir (parentdir) == 0 ); /* chdir to the binary app's parent */
|
assert ( chdir (parentdir) == 0 ); /* chdir to the binary app's parent */
|
||||||
|
@ -349,7 +349,7 @@ bool changeType;
|
||||||
/* Called when the internal event loop has just started running */
|
/* Called when the internal event loop has just started running */
|
||||||
- (void) applicationDidFinishLaunching: (NSNotification *) note
|
- (void) applicationDidFinishLaunching: (NSNotification *) note
|
||||||
{
|
{
|
||||||
|
|
||||||
gSDLMain = self;
|
gSDLMain = self;
|
||||||
|
|
||||||
/* Set the working directory to the .app's parent directory */
|
/* Set the working directory to the .app's parent directory */
|
||||||
|
@ -408,7 +408,7 @@ if (emulating)
|
||||||
else
|
else
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void) openCheatCBA:(id)sender
|
-(void) openCheatCBA:(id)sender
|
||||||
{
|
{
|
||||||
[cheatWindow makeKeyAndOrderFront:self];
|
[cheatWindow makeKeyAndOrderFront:self];
|
||||||
|
@ -453,7 +453,7 @@ sdlReadState(0);
|
||||||
|
|
||||||
// This is completely crazy. sdlEmuReset is declared in MainClass.h, which
|
// This is completely crazy. sdlEmuReset is declared in MainClass.h, which
|
||||||
// is included in SDL.mm, but then it is defined in SDL.mm. Madness.
|
// is included in SDL.mm, but then it is defined in SDL.mm. Madness.
|
||||||
// Restructure this.
|
// Restructure this.
|
||||||
-(void) resetEmulation:(id)sender
|
-(void) resetEmulation:(id)sender
|
||||||
{
|
{
|
||||||
sdlEmuReset();
|
sdlEmuReset();
|
||||||
|
@ -774,7 +774,7 @@ int main (int argc, char **argv)
|
||||||
|
|
||||||
/* Copy the arguments into a global variable */
|
/* Copy the arguments into a global variable */
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* This is passed if we are launched by double-clicking */
|
/* This is passed if we are launched by double-clicking */
|
||||||
if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) {
|
if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) {
|
||||||
gArgc = 1;
|
gArgc = 1;
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
@ -5,11 +5,11 @@ int openBiosFile( char * r )
|
||||||
NSOpenPanel *oPanel = [NSOpenPanel openPanel];
|
NSOpenPanel *oPanel = [NSOpenPanel openPanel];
|
||||||
int result;
|
int result;
|
||||||
NSArray *filesToOpen;
|
NSArray *filesToOpen;
|
||||||
|
|
||||||
[oPanel setAllowsMultipleSelection:NO];
|
[oPanel setAllowsMultipleSelection:NO];
|
||||||
[oPanel setTitle:@"Open Bios File..."];
|
[oPanel setTitle:@"Open Bios File..."];
|
||||||
result = [oPanel runModalForDirectory:nil file:nil types:nil];
|
result = [oPanel runModalForDirectory:nil file:nil types:nil];
|
||||||
if (result == NSOKButton)
|
if (result == NSOKButton)
|
||||||
{
|
{
|
||||||
filesToOpen = [oPanel filenames];
|
filesToOpen = [oPanel filenames];
|
||||||
NSString *aFile = [filesToOpen objectAtIndex:0];
|
NSString *aFile = [filesToOpen objectAtIndex:0];
|
||||||
|
@ -25,11 +25,11 @@ int openFile( char * r )
|
||||||
NSOpenPanel *oPanel = [NSOpenPanel openPanel];
|
NSOpenPanel *oPanel = [NSOpenPanel openPanel];
|
||||||
int result;
|
int result;
|
||||||
NSArray *filesToOpen;
|
NSArray *filesToOpen;
|
||||||
|
|
||||||
[oPanel setAllowsMultipleSelection:NO];
|
[oPanel setAllowsMultipleSelection:NO];
|
||||||
[oPanel setTitle:@"Open Rom..."];
|
[oPanel setTitle:@"Open Rom..."];
|
||||||
result = [oPanel runModalForDirectory:nil file:nil types:nil];
|
result = [oPanel runModalForDirectory:nil file:nil types:nil];
|
||||||
if (result == NSOKButton)
|
if (result == NSOKButton)
|
||||||
{
|
{
|
||||||
filesToOpen = [oPanel filenames];
|
filesToOpen = [oPanel filenames];
|
||||||
NSString *aFile = [filesToOpen objectAtIndex:0];
|
NSString *aFile = [filesToOpen objectAtIndex:0];
|
||||||
|
@ -37,4 +37,4 @@ int openFile( char * r )
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,6 +89,10 @@ extern void hq2x(u8*,u32,u8*,u8*,u32,int,int);
|
||||||
extern void hq2x32(u8*,u32,u8*,u8*,u32,int,int);
|
extern void hq2x32(u8*,u32,u8*,u8*,u32,int,int);
|
||||||
extern void lq2x(u8*,u32,u8*,u8*,u32,int,int);
|
extern void lq2x(u8*,u32,u8*,u8*,u32,int,int);
|
||||||
extern void lq2x32(u8*,u32,u8*,u8*,u32,int,int);
|
extern void lq2x32(u8*,u32,u8*,u8*,u32,int,int);
|
||||||
|
extern void hq3x16(u8*,u32,u8*,u8*,u32,int,int);
|
||||||
|
extern void hq3x32(u8*,u32,u8*,u8*,u32,int,int);
|
||||||
|
extern void hq4x16(u8*,u32,u8*,u8*,u32,int,int);
|
||||||
|
extern void hq4x32(u8*,u32,u8*,u8*,u32,int,int);
|
||||||
|
|
||||||
extern void SmartIB(u8*,u32,int,int);
|
extern void SmartIB(u8*,u32,int,int);
|
||||||
extern void SmartIB32(u8*,u32,int,int);
|
extern void SmartIB32(u8*,u32,int,int);
|
||||||
|
@ -154,6 +158,8 @@ int sensorY = 2047;
|
||||||
int filter = 0;
|
int filter = 0;
|
||||||
u8 *delta = NULL;
|
u8 *delta = NULL;
|
||||||
|
|
||||||
|
int filter_enlarge = 2;
|
||||||
|
|
||||||
int sdlPrintUsage = 0;
|
int sdlPrintUsage = 0;
|
||||||
int disableMMX = 0;
|
int disableMMX = 0;
|
||||||
|
|
||||||
|
@ -327,6 +333,8 @@ struct option sdlOptions[] = {
|
||||||
{ "filter-scanlines", no_argument, &filter, 11 },
|
{ "filter-scanlines", no_argument, &filter, 11 },
|
||||||
{ "filter-hq2x", no_argument, &filter, 12 },
|
{ "filter-hq2x", no_argument, &filter, 12 },
|
||||||
{ "filter-lq2x", no_argument, &filter, 13 },
|
{ "filter-lq2x", no_argument, &filter, 13 },
|
||||||
|
{ "filter-hq3x", no_argument, &filter, 14 },
|
||||||
|
{ "filter-hq4x", no_argument, &filter, 15 },
|
||||||
{ "flash-size", required_argument, 0, 'S' },
|
{ "flash-size", required_argument, 0, 'S' },
|
||||||
{ "flash-64k", no_argument, &sdlFlashSize, 0 },
|
{ "flash-64k", no_argument, &sdlFlashSize, 0 },
|
||||||
{ "flash-128k", no_argument, &sdlFlashSize, 1 },
|
{ "flash-128k", no_argument, &sdlFlashSize, 1 },
|
||||||
|
@ -1114,7 +1122,7 @@ void sdlReadPreferences(FILE *f)
|
||||||
strcpy(biosFileName, value);
|
strcpy(biosFileName, value);
|
||||||
} else if(!strcmp(key, "filter")) {
|
} else if(!strcmp(key, "filter")) {
|
||||||
filter = sdlFromHex(value);
|
filter = sdlFromHex(value);
|
||||||
if(filter < 0 || filter > 13)
|
if(filter < 0 || filter > 15)
|
||||||
filter = 0;
|
filter = 0;
|
||||||
} else if(!strcmp(key, "disableStatus")) {
|
} else if(!strcmp(key, "disableStatus")) {
|
||||||
disableStatusMessages = sdlFromHex(value) ? true : false;
|
disableStatusMessages = sdlFromHex(value) ? true : false;
|
||||||
|
@ -1899,6 +1907,8 @@ Options:\n\
|
||||||
--filter-scanlines 11 - Scanlines\n\
|
--filter-scanlines 11 - Scanlines\n\
|
||||||
--filter-hq2x 12 - hq2x\n\
|
--filter-hq2x 12 - hq2x\n\
|
||||||
--filter-lq2x 13 - lq2x\n\
|
--filter-lq2x 13 - lq2x\n\
|
||||||
|
--filter-hq3x 14 - hq3x\n\
|
||||||
|
--filter-hq4x 15 - hq4x\n\
|
||||||
-h, --help Print this help\n\
|
-h, --help Print this help\n\
|
||||||
-i, --ips=PATCH Apply given IPS patch\n\
|
-i, --ips=PATCH Apply given IPS patch\n\
|
||||||
-p, --profile=[HERTZ] Enable profiling\n\
|
-p, --profile=[HERTZ] Enable profiling\n\
|
||||||
|
@ -2178,8 +2188,14 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch (filter)
|
||||||
|
{
|
||||||
|
case 14: filter_enlarge = 3; break;
|
||||||
|
case 15: filter_enlarge = 4; break;
|
||||||
|
}
|
||||||
|
|
||||||
if(filter) {
|
if(filter) {
|
||||||
sizeOption = 1;
|
sizeOption = filter_enlarge-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int i = 0; i < 24;) {
|
for(int i = 0; i < 24;) {
|
||||||
|
@ -2467,6 +2483,12 @@ int main(int argc, char **argv)
|
||||||
case 13:
|
case 13:
|
||||||
filterFunction = lq2x;
|
filterFunction = lq2x;
|
||||||
break;
|
break;
|
||||||
|
case 14:
|
||||||
|
filterFunction = hq3x16;
|
||||||
|
break;
|
||||||
|
case 15:
|
||||||
|
filterFunction = hq4x16;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
filterFunction = NULL;
|
filterFunction = NULL;
|
||||||
break;
|
break;
|
||||||
|
@ -2515,6 +2537,12 @@ int main(int argc, char **argv)
|
||||||
case 13:
|
case 13:
|
||||||
filterFunction = lq2x32;
|
filterFunction = lq2x32;
|
||||||
break;
|
break;
|
||||||
|
case 14:
|
||||||
|
filterFunction = hq3x32;
|
||||||
|
break;
|
||||||
|
case 15:
|
||||||
|
filterFunction = hq4x32;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
filterFunction = NULL;
|
filterFunction = NULL;
|
||||||
break;
|
break;
|
||||||
|
@ -2669,19 +2697,21 @@ void systemDrawScreen()
|
||||||
}
|
}
|
||||||
|
|
||||||
if(filterFunction) {
|
if(filterFunction) {
|
||||||
if(systemColorDepth == 16)
|
if(systemColorDepth == 16) {
|
||||||
filterFunction(pix+destWidth+4,destWidth+4, delta,
|
filterFunction(pix+destWidth+4,destWidth+4, delta,
|
||||||
(u8*)surface->pixels,surface->pitch,
|
(u8*)surface->pixels,surface->pitch,
|
||||||
srcWidth,
|
srcWidth,
|
||||||
srcHeight);
|
srcHeight);
|
||||||
else
|
} else {
|
||||||
filterFunction(pix+destWidth*2+4,
|
unsigned int destw = destWidth*(filter_enlarge == 2 ? 2 : 1)+4;
|
||||||
destWidth*2+4,
|
filterFunction(pix+destw,
|
||||||
|
destw,
|
||||||
delta,
|
delta,
|
||||||
(u8*)surface->pixels,
|
(u8*)surface->pixels,
|
||||||
surface->pitch,
|
surface->pitch,
|
||||||
srcWidth,
|
srcWidth,
|
||||||
srcHeight);
|
srcHeight);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
int destPitch = surface->pitch;
|
int destPitch = surface->pitch;
|
||||||
u8 *src = pix;
|
u8 *src = pix;
|
||||||
|
|
|
@ -70,7 +70,7 @@ public:
|
||||||
virtual bool changeRenderSize(int w, int h);
|
virtual bool changeRenderSize(int w, int h);
|
||||||
virtual DISPLAY_TYPE getType() { return DIRECT_DRAW; };
|
virtual DISPLAY_TYPE getType() { return DIRECT_DRAW; };
|
||||||
virtual void setOption(const char *, int) {}
|
virtual void setOption(const char *, int) {}
|
||||||
virtual int selectFullScreenMode(GUID **);
|
virtual int selectFullScreenMode(GUID **);
|
||||||
};
|
};
|
||||||
|
|
||||||
static HRESULT WINAPI checkModesAvailable(LPDDSURFACEDESC2 surf, LPVOID lpContext)
|
static HRESULT WINAPI checkModesAvailable(LPDDSURFACEDESC2 surf, LPVOID lpContext)
|
||||||
|
@ -99,10 +99,10 @@ static int ffs(UINT mask)
|
||||||
if (mask) {
|
if (mask) {
|
||||||
while (!(mask & (1 << m)))
|
while (!(mask & (1 << m)))
|
||||||
m++;
|
m++;
|
||||||
|
|
||||||
return (m);
|
return (m);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,12 +141,12 @@ void DirectDrawDisplay::cleanup()
|
||||||
ddsOffscreen->Release();
|
ddsOffscreen->Release();
|
||||||
ddsOffscreen = NULL;
|
ddsOffscreen = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ddsPrimary != NULL) {
|
if(ddsPrimary != NULL) {
|
||||||
ddsPrimary->Release();
|
ddsPrimary->Release();
|
||||||
ddsPrimary = NULL;
|
ddsPrimary = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
pDirectDraw->Release();
|
pDirectDraw->Release();
|
||||||
pDirectDraw = NULL;
|
pDirectDraw = NULL;
|
||||||
}
|
}
|
||||||
|
@ -215,7 +215,7 @@ bool DirectDrawDisplay::initialize()
|
||||||
|
|
||||||
DWORD style = WS_POPUP | WS_VISIBLE;
|
DWORD style = WS_POPUP | WS_VISIBLE;
|
||||||
DWORD styleEx = 0;
|
DWORD styleEx = 0;
|
||||||
|
|
||||||
if(theApp.videoOption <= VIDEO_4X)
|
if(theApp.videoOption <= VIDEO_4X)
|
||||||
style |= WS_OVERLAPPEDWINDOW;
|
style |= WS_OVERLAPPEDWINDOW;
|
||||||
else
|
else
|
||||||
|
@ -224,7 +224,7 @@ bool DirectDrawDisplay::initialize()
|
||||||
if(theApp.videoOption <= VIDEO_4X)
|
if(theApp.videoOption <= VIDEO_4X)
|
||||||
AdjustWindowRectEx(&theApp.dest, style, TRUE, styleEx);
|
AdjustWindowRectEx(&theApp.dest, style, TRUE, styleEx);
|
||||||
else
|
else
|
||||||
AdjustWindowRectEx(&theApp.dest, style, FALSE, styleEx);
|
AdjustWindowRectEx(&theApp.dest, style, FALSE, styleEx);
|
||||||
|
|
||||||
int winSizeX = theApp.dest.right-theApp.dest.left;
|
int winSizeX = theApp.dest.right-theApp.dest.left;
|
||||||
int winSizeY = theApp.dest.bottom-theApp.dest.top;
|
int winSizeY = theApp.dest.bottom-theApp.dest.top;
|
||||||
|
@ -248,17 +248,17 @@ bool DirectDrawDisplay::initialize()
|
||||||
x,y,winSizeX,winSizeY,
|
x,y,winSizeX,winSizeY,
|
||||||
NULL,
|
NULL,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
if (!(HWND)*pWnd) {
|
if (!(HWND)*pWnd) {
|
||||||
winlog("Error creating Window %08x\n", GetLastError());
|
winlog("Error creating Window %08x\n", GetLastError());
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
theApp.updateMenuBar();
|
theApp.updateMenuBar();
|
||||||
|
|
||||||
theApp.adjustDestRect();
|
theApp.adjustDestRect();
|
||||||
|
|
||||||
GUID *guid = NULL;
|
GUID *guid = NULL;
|
||||||
if(theApp.ddrawEmulationOnly)
|
if(theApp.ddrawEmulationOnly)
|
||||||
guid = (GUID *)DDCREATE_EMULATIONONLY;
|
guid = (GUID *)DDCREATE_EMULATIONONLY;
|
||||||
|
@ -267,8 +267,8 @@ bool DirectDrawDisplay::initialize()
|
||||||
guid = theApp.pVideoDriverGUID;
|
guid = theApp.pVideoDriverGUID;
|
||||||
|
|
||||||
ddrawDLL = LoadLibrary("DDRAW.DLL");
|
ddrawDLL = LoadLibrary("DDRAW.DLL");
|
||||||
HRESULT (WINAPI *DDrawCreateEx)(GUID *,LPVOID *,REFIID,IUnknown *);
|
HRESULT (WINAPI *DDrawCreateEx)(GUID *,LPVOID *,REFIID,IUnknown *);
|
||||||
if(ddrawDLL != NULL) {
|
if(ddrawDLL != NULL) {
|
||||||
DDrawCreateEx = (HRESULT (WINAPI *)(GUID *,LPVOID *,REFIID,IUnknown *))
|
DDrawCreateEx = (HRESULT (WINAPI *)(GUID *,LPVOID *,REFIID,IUnknown *))
|
||||||
GetProcAddress(ddrawDLL, "DirectDrawCreateEx");
|
GetProcAddress(ddrawDLL, "DirectDrawCreateEx");
|
||||||
|
|
||||||
|
@ -282,12 +282,12 @@ bool DirectDrawDisplay::initialize()
|
||||||
}
|
}
|
||||||
|
|
||||||
theApp.ddrawUsingEmulationOnly = theApp.ddrawEmulationOnly;
|
theApp.ddrawUsingEmulationOnly = theApp.ddrawEmulationOnly;
|
||||||
|
|
||||||
HRESULT hret = DDrawCreateEx(guid,
|
HRESULT hret = DDrawCreateEx(guid,
|
||||||
(void **)&pDirectDraw,
|
(void **)&pDirectDraw,
|
||||||
IID_IDirectDraw7,
|
IID_IDirectDraw7,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
if(hret != DD_OK) {
|
if(hret != DD_OK) {
|
||||||
winlog("Error creating DirectDraw object %08x\n", hret);
|
winlog("Error creating DirectDraw object %08x\n", hret);
|
||||||
if(theApp.ddrawEmulationOnly) {
|
if(theApp.ddrawEmulationOnly) {
|
||||||
|
@ -314,14 +314,14 @@ bool DirectDrawDisplay::initialize()
|
||||||
for(i = 0; i < (int)hel.dwSize; i+=4)
|
for(i = 0; i < (int)hel.dwSize; i+=4)
|
||||||
winlog("HEL CAPS %2d: %08x\n", i>>2, *p++);
|
winlog("HEL CAPS %2d: %08x\n", i>>2, *p++);
|
||||||
}
|
}
|
||||||
|
|
||||||
theApp.mode320Available = false;
|
theApp.mode320Available = false;
|
||||||
theApp.mode640Available = false;
|
theApp.mode640Available = false;
|
||||||
theApp.mode800Available = false;
|
theApp.mode800Available = false;
|
||||||
// check for available fullscreen modes
|
// check for available fullscreen modes
|
||||||
pDirectDraw->EnumDisplayModes(DDEDM_STANDARDVGAMODES, NULL, NULL,
|
pDirectDraw->EnumDisplayModes(DDEDM_STANDARDVGAMODES, NULL, NULL,
|
||||||
checkModesAvailable);
|
checkModesAvailable);
|
||||||
|
|
||||||
DWORD flags = DDSCL_NORMAL;
|
DWORD flags = DDSCL_NORMAL;
|
||||||
|
|
||||||
if(theApp.videoOption >= VIDEO_320x240)
|
if(theApp.videoOption >= VIDEO_320x240)
|
||||||
|
@ -329,16 +329,16 @@ bool DirectDrawDisplay::initialize()
|
||||||
DDSCL_ALLOWREBOOT |
|
DDSCL_ALLOWREBOOT |
|
||||||
DDSCL_EXCLUSIVE |
|
DDSCL_EXCLUSIVE |
|
||||||
DDSCL_FULLSCREEN;
|
DDSCL_FULLSCREEN;
|
||||||
|
|
||||||
hret = pDirectDraw->SetCooperativeLevel(pWnd->m_hWnd,
|
hret = pDirectDraw->SetCooperativeLevel(pWnd->m_hWnd,
|
||||||
flags);
|
flags);
|
||||||
|
|
||||||
if(hret != DD_OK) {
|
if(hret != DD_OK) {
|
||||||
winlog("Error SetCooperativeLevel %08x\n", hret);
|
winlog("Error SetCooperativeLevel %08x\n", hret);
|
||||||
// errorMessage(myLoadString(IDS_ERROR_DISP_DRAWLEVEL), hret);
|
// errorMessage(myLoadString(IDS_ERROR_DISP_DRAWLEVEL), hret);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(theApp.videoOption > VIDEO_4X) {
|
if(theApp.videoOption > VIDEO_4X) {
|
||||||
hret = pDirectDraw->SetDisplayMode(theApp.fsWidth,
|
hret = pDirectDraw->SetDisplayMode(theApp.fsWidth,
|
||||||
theApp.fsHeight,
|
theApp.fsHeight,
|
||||||
|
@ -351,7 +351,7 @@ bool DirectDrawDisplay::initialize()
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DDSURFACEDESC2 ddsd;
|
DDSURFACEDESC2 ddsd;
|
||||||
ZeroMemory(&ddsd,sizeof(ddsd));
|
ZeroMemory(&ddsd,sizeof(ddsd));
|
||||||
ddsd.dwSize = sizeof(ddsd);
|
ddsd.dwSize = sizeof(ddsd);
|
||||||
|
@ -365,10 +365,10 @@ bool DirectDrawDisplay::initialize()
|
||||||
ddsd.dwBackBufferCount = 2;
|
ddsd.dwBackBufferCount = 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hret = pDirectDraw->CreateSurface(&ddsd, &ddsPrimary, NULL);
|
hret = pDirectDraw->CreateSurface(&ddsd, &ddsPrimary, NULL);
|
||||||
if(hret != DD_OK) {
|
if(hret != DD_OK) {
|
||||||
winlog("Error primary CreateSurface %08x\n", hret);
|
winlog("Error primary CreateSurface %08x\n", hret);
|
||||||
// errorMessage(myLoadString(IDS_ERROR_DISP_DRAWSURFACE), hret);
|
// errorMessage(myLoadString(IDS_ERROR_DISP_DRAWSURFACE), hret);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -391,7 +391,7 @@ bool DirectDrawDisplay::initialize()
|
||||||
// the second is the backbuffer and the third is the flip
|
// the second is the backbuffer and the third is the flip
|
||||||
// surface
|
// surface
|
||||||
caps.dwCaps = DDSCAPS_BACKBUFFER;
|
caps.dwCaps = DDSCAPS_BACKBUFFER;
|
||||||
|
|
||||||
hret = ddsPrimary->GetAttachedSurface(&caps, &ddsFlip);
|
hret = ddsPrimary->GetAttachedSurface(&caps, &ddsFlip);
|
||||||
if(hret != DD_OK) {
|
if(hret != DD_OK) {
|
||||||
winlog("Failed to get attached surface %08x", hret);
|
winlog("Failed to get attached surface %08x", hret);
|
||||||
|
@ -446,8 +446,8 @@ bool DirectDrawDisplay::initialize()
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
pWnd->DragAcceptFiles(TRUE);
|
pWnd->DragAcceptFiles(TRUE);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DirectDrawDisplay::changeRenderSize(int w, int h)
|
bool DirectDrawDisplay::changeRenderSize(int w, int h)
|
||||||
|
@ -468,7 +468,7 @@ bool DirectDrawDisplay::changeRenderSize(int w, int h)
|
||||||
bool DirectDrawDisplay::initializeOffscreen(int w, int h)
|
bool DirectDrawDisplay::initializeOffscreen(int w, int h)
|
||||||
{
|
{
|
||||||
DDSURFACEDESC2 ddsd;
|
DDSURFACEDESC2 ddsd;
|
||||||
|
|
||||||
ZeroMemory(&ddsd, sizeof(ddsd));
|
ZeroMemory(&ddsd, sizeof(ddsd));
|
||||||
ddsd.dwSize = sizeof(ddsd);
|
ddsd.dwSize = sizeof(ddsd);
|
||||||
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
|
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
|
||||||
|
@ -481,10 +481,10 @@ bool DirectDrawDisplay::initializeOffscreen(int w, int h)
|
||||||
HRESULT hret = pDirectDraw->CreateSurface(&ddsd, &ddsOffscreen, NULL);
|
HRESULT hret = pDirectDraw->CreateSurface(&ddsd, &ddsOffscreen, NULL);
|
||||||
|
|
||||||
if(hret != DD_OK) {
|
if(hret != DD_OK) {
|
||||||
winlog("Error offscreen CreateSurface %08x\n", hret);
|
winlog("Error offscreen CreateSurface %08x\n", hret);
|
||||||
if(theApp.ddrawUseVideoMemory) {
|
if(theApp.ddrawUseVideoMemory) {
|
||||||
regSetDwordValue("ddrawUseVideoMemory", 0);
|
regSetDwordValue("ddrawUseVideoMemory", 0);
|
||||||
}
|
}
|
||||||
// errorMessage(myLoadString(IDS_ERROR_DISP_DRAWSURFACE2), hret);
|
// errorMessage(myLoadString(IDS_ERROR_DISP_DRAWSURFACE2), hret);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -499,7 +499,7 @@ bool DirectDrawDisplay::initializeOffscreen(int w, int h)
|
||||||
winlog("Offscreen CAPS 3: %08x\n", caps.dwCaps3);
|
winlog("Offscreen CAPS 3: %08x\n", caps.dwCaps3);
|
||||||
winlog("Offscreen CAPS 4: %08x\n", caps.dwCaps4);
|
winlog("Offscreen CAPS 4: %08x\n", caps.dwCaps4);
|
||||||
}
|
}
|
||||||
|
|
||||||
DDPIXELFORMAT px;
|
DDPIXELFORMAT px;
|
||||||
|
|
||||||
px.dwSize = sizeof(px);
|
px.dwSize = sizeof(px);
|
||||||
|
@ -512,7 +512,7 @@ bool DirectDrawDisplay::initializeOffscreen(int w, int h)
|
||||||
winlog("Pixel format %d %08x\n", ii, pdword[ii]);
|
winlog("Pixel format %d %08x\n", ii, pdword[ii]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(px.dwRGBBitCount) {
|
switch(px.dwRGBBitCount) {
|
||||||
case 15:
|
case 15:
|
||||||
case 16:
|
case 16:
|
||||||
|
@ -534,7 +534,7 @@ bool DirectDrawDisplay::initializeOffscreen(int w, int h)
|
||||||
winlog("G Mask: %08x\n", px.dwGBitMask);
|
winlog("G Mask: %08x\n", px.dwGBitMask);
|
||||||
winlog("B Mask: %08x\n", px.dwBBitMask);
|
winlog("B Mask: %08x\n", px.dwBBitMask);
|
||||||
}
|
}
|
||||||
|
|
||||||
systemRedShift = ffs(px.dwRBitMask);
|
systemRedShift = ffs(px.dwRBitMask);
|
||||||
systemGreenShift = ffs(px.dwGBitMask);
|
systemGreenShift = ffs(px.dwGBitMask);
|
||||||
systemBlueShift = ffs(px.dwBBitMask);
|
systemBlueShift = ffs(px.dwBBitMask);
|
||||||
|
@ -545,7 +545,7 @@ bool DirectDrawDisplay::initializeOffscreen(int w, int h)
|
||||||
else
|
else
|
||||||
cpu_mmx = 0;
|
cpu_mmx = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if((px.dwFlags&DDPF_RGB) != 0 &&
|
if((px.dwFlags&DDPF_RGB) != 0 &&
|
||||||
px.dwRBitMask == 0xF800 &&
|
px.dwRBitMask == 0xF800 &&
|
||||||
px.dwGBitMask == 0x07E0 &&
|
px.dwGBitMask == 0x07E0 &&
|
||||||
|
@ -584,7 +584,7 @@ bool DirectDrawDisplay::initializeOffscreen(int w, int h)
|
||||||
winlog("G shift: %d\n", systemGreenShift);
|
winlog("G shift: %d\n", systemGreenShift);
|
||||||
winlog("B shift: %d\n", systemBlueShift);
|
winlog("B shift: %d\n", systemBlueShift);
|
||||||
}
|
}
|
||||||
|
|
||||||
utilUpdateSystemColorMaps();
|
utilUpdateSystemColorMaps();
|
||||||
width = w;
|
width = w;
|
||||||
height = h;
|
height = h;
|
||||||
|
@ -605,7 +605,7 @@ void DirectDrawDisplay::clear()
|
||||||
ddsFlip->Blt(NULL, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &fx);
|
ddsFlip->Blt(NULL, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &fx);
|
||||||
ddsPrimary->Flip(NULL, 0);
|
ddsPrimary->Flip(NULL, 0);
|
||||||
ddsFlip->Blt(NULL, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &fx);
|
ddsFlip->Blt(NULL, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &fx);
|
||||||
ddsPrimary->Flip(NULL, 0);
|
ddsPrimary->Flip(NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DirectDrawDisplay::renderMenu()
|
void DirectDrawDisplay::renderMenu()
|
||||||
|
@ -630,7 +630,7 @@ void DirectDrawDisplay::render()
|
||||||
return;
|
return;
|
||||||
|
|
||||||
DDSURFACEDESC2 ddsDesc;
|
DDSURFACEDESC2 ddsDesc;
|
||||||
|
|
||||||
ZeroMemory(&ddsDesc, sizeof(ddsDesc));
|
ZeroMemory(&ddsDesc, sizeof(ddsDesc));
|
||||||
|
|
||||||
ddsDesc.dwSize = sizeof(ddsDesc);
|
ddsDesc.dwSize = sizeof(ddsDesc);
|
||||||
|
@ -648,7 +648,7 @@ void DirectDrawDisplay::render()
|
||||||
hret = ddsPrimary->Restore();
|
hret = ddsPrimary->Restore();
|
||||||
if(hret == DD_OK) {
|
if(hret == DD_OK) {
|
||||||
hret = ddsOffscreen->Restore();
|
hret = ddsOffscreen->Restore();
|
||||||
|
|
||||||
if(hret == DD_OK) {
|
if(hret == DD_OK) {
|
||||||
hret = ddsOffscreen->Lock(NULL,
|
hret = ddsOffscreen->Lock(NULL,
|
||||||
&ddsDesc,
|
&ddsDesc,
|
||||||
|
@ -658,11 +658,11 @@ void DirectDrawDisplay::render()
|
||||||
#endif
|
#endif
|
||||||
DDLOCK_SURFACEMEMORYPTR,
|
DDLOCK_SURFACEMEMORYPTR,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(hret == DD_OK) {
|
if(hret == DD_OK) {
|
||||||
if(theApp.filterFunction) {
|
if(theApp.filterFunction) {
|
||||||
if(systemColorDepth == 16)
|
if(systemColorDepth == 16)
|
||||||
|
@ -681,11 +681,11 @@ void DirectDrawDisplay::render()
|
||||||
ddsDesc.lPitch,
|
ddsDesc.lPitch,
|
||||||
theApp.filterWidth,
|
theApp.filterWidth,
|
||||||
theApp.filterHeight);
|
theApp.filterHeight);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
int copyX = 240;
|
int copyX = 240;
|
||||||
int copyY = 160;
|
int copyY = 160;
|
||||||
|
|
||||||
if(theApp.cartridgeType == 1) {
|
if(theApp.cartridgeType == 1) {
|
||||||
if(gbBorderOn) {
|
if(gbBorderOn) {
|
||||||
copyX = 256;
|
copyX = 256;
|
||||||
|
@ -699,7 +699,7 @@ void DirectDrawDisplay::render()
|
||||||
__asm {
|
__asm {
|
||||||
mov eax, copyX;
|
mov eax, copyX;
|
||||||
mov ebx, copyY;
|
mov ebx, copyY;
|
||||||
|
|
||||||
mov esi, pix;
|
mov esi, pix;
|
||||||
mov edi, ddsDesc.lpSurface;
|
mov edi, ddsDesc.lpSurface;
|
||||||
mov edx, ddsDesc.lPitch;
|
mov edx, ddsDesc.lPitch;
|
||||||
|
@ -723,7 +723,7 @@ void DirectDrawDisplay::render()
|
||||||
gbaOtherColor:
|
gbaOtherColor:
|
||||||
cmp systemColorDepth, 32;
|
cmp systemColorDepth, 32;
|
||||||
jnz gbaOtherColor2;
|
jnz gbaOtherColor2;
|
||||||
|
|
||||||
sub edx, eax;
|
sub edx, eax;
|
||||||
sub edx, eax;
|
sub edx, eax;
|
||||||
sub edx, eax;
|
sub edx, eax;
|
||||||
|
@ -769,7 +769,7 @@ void DirectDrawDisplay::render()
|
||||||
ddsDesc.lPitch,
|
ddsDesc.lPitch,
|
||||||
theApp.rect.left+10,
|
theApp.rect.left+10,
|
||||||
theApp.rect.bottom-10,
|
theApp.rect.bottom-10,
|
||||||
buffer);
|
buffer);
|
||||||
}
|
}
|
||||||
} else if(theApp.ddrawDebug)
|
} else if(theApp.ddrawDebug)
|
||||||
winlog("Error during lock: %08x\n", hret);
|
winlog("Error during lock: %08x\n", hret);
|
||||||
|
@ -798,10 +798,10 @@ void DirectDrawDisplay::render()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
hret = ddsPrimary->Blt(&theApp.dest, ddsOffscreen, NULL,DDBLT_ASYNC,NULL);
|
hret = ddsPrimary->Blt(&theApp.dest, ddsOffscreen, NULL,DDBLT_ASYNC,NULL);
|
||||||
|
|
||||||
if(hret == DDERR_SURFACELOST) {
|
if(hret == DDERR_SURFACELOST) {
|
||||||
hret = ddsPrimary->Restore();
|
hret = ddsPrimary->Restore();
|
||||||
|
|
||||||
if(hret == DD_OK) {
|
if(hret == DD_OK) {
|
||||||
hret = ddsPrimary->Blt(&theApp.dest, ddsOffscreen, NULL, DDBLT_ASYNC, NULL);
|
hret = ddsPrimary->Blt(&theApp.dest, ddsOffscreen, NULL, DDBLT_ASYNC, NULL);
|
||||||
}
|
}
|
||||||
|
@ -818,7 +818,7 @@ void DirectDrawDisplay::render()
|
||||||
HDC hdc;
|
HDC hdc;
|
||||||
ddsPrimary->GetDC(&hdc);
|
ddsPrimary->GetDC(&hdc);
|
||||||
SetTextColor(hdc, RGB(255,0,0));
|
SetTextColor(hdc, RGB(255,0,0));
|
||||||
SetBkMode(hdc,TRANSPARENT);
|
SetBkMode(hdc,TRANSPARENT);
|
||||||
TextOut(hdc, theApp.dest.left+10, theApp.dest.bottom - 20, theApp.screenMessageBuffer,
|
TextOut(hdc, theApp.dest.left+10, theApp.dest.bottom - 20, theApp.screenMessageBuffer,
|
||||||
strlen(theApp.screenMessageBuffer));
|
strlen(theApp.screenMessageBuffer));
|
||||||
ddsPrimary->ReleaseDC(hdc);
|
ddsPrimary->ReleaseDC(hdc);
|
||||||
|
@ -826,11 +826,11 @@ void DirectDrawDisplay::render()
|
||||||
theApp.screenMessage = false;
|
theApp.screenMessage = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(hret != DD_OK) {
|
if(hret != DD_OK) {
|
||||||
if(theApp.ddrawDebug)
|
if(theApp.ddrawDebug)
|
||||||
winlog("Error on update screen: %08x\n", hret);
|
winlog("Error on update screen: %08x\n", hret);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int DirectDrawDisplay::selectFullScreenMode(GUID **pGUID)
|
int DirectDrawDisplay::selectFullScreenMode(GUID **pGUID)
|
||||||
|
|
|
@ -96,7 +96,7 @@ USHORT joypad[4][13] = {
|
||||||
},
|
},
|
||||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
|
||||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
|
||||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
USHORT motion[4] = {
|
USHORT motion[4] = {
|
||||||
|
@ -140,7 +140,7 @@ void winReadKeys()
|
||||||
joypad[i][KEY_BUTTON_L] = key;
|
joypad[i][KEY_BUTTON_L] = key;
|
||||||
key = winReadKey("R", i);
|
key = winReadKey("R", i);
|
||||||
if(key != -1)
|
if(key != -1)
|
||||||
joypad[i][KEY_BUTTON_R] = key;
|
joypad[i][KEY_BUTTON_R] = key;
|
||||||
key = winReadKey("Start", i);
|
key = winReadKey("Start", i);
|
||||||
if(key != -1)
|
if(key != -1)
|
||||||
joypad[i][KEY_BUTTON_START] = key;
|
joypad[i][KEY_BUTTON_START] = key;
|
||||||
|
@ -188,16 +188,16 @@ void winSaveKeys()
|
||||||
winSaveKey("Up", i, joypad[i][KEY_UP]);
|
winSaveKey("Up", i, joypad[i][KEY_UP]);
|
||||||
winSaveKey("Speed", i, joypad[i][KEY_BUTTON_SPEED]);
|
winSaveKey("Speed", i, joypad[i][KEY_BUTTON_SPEED]);
|
||||||
winSaveKey("Capture", i, joypad[i][KEY_BUTTON_CAPTURE]);
|
winSaveKey("Capture", i, joypad[i][KEY_BUTTON_CAPTURE]);
|
||||||
winSaveKey("GS", i, joypad[i][KEY_BUTTON_GS]);
|
winSaveKey("GS", i, joypad[i][KEY_BUTTON_GS]);
|
||||||
winSaveKey("Down", i, joypad[i][KEY_DOWN]);
|
winSaveKey("Down", i, joypad[i][KEY_DOWN]);
|
||||||
winSaveKey("A", i, joypad[i][KEY_BUTTON_A]);
|
winSaveKey("A", i, joypad[i][KEY_BUTTON_A]);
|
||||||
winSaveKey("B", i, joypad[i][KEY_BUTTON_B]);
|
winSaveKey("B", i, joypad[i][KEY_BUTTON_B]);
|
||||||
winSaveKey("L", i, joypad[i][KEY_BUTTON_L]);
|
winSaveKey("L", i, joypad[i][KEY_BUTTON_L]);
|
||||||
winSaveKey("R", i, joypad[i][KEY_BUTTON_R]);
|
winSaveKey("R", i, joypad[i][KEY_BUTTON_R]);
|
||||||
winSaveKey("Start", i, joypad[i][KEY_BUTTON_START]);
|
winSaveKey("Start", i, joypad[i][KEY_BUTTON_START]);
|
||||||
winSaveKey("Select", i, joypad[i][KEY_BUTTON_SELECT]);
|
winSaveKey("Select", i, joypad[i][KEY_BUTTON_SELECT]);
|
||||||
}
|
}
|
||||||
regSetDwordValue("joyVersion", 1);
|
regSetDwordValue("joyVersion", 1);
|
||||||
|
|
||||||
regSetDwordValue("Motion_Left",
|
regSetDwordValue("Motion_Left",
|
||||||
motion[KEY_LEFT]);
|
motion[KEY_LEFT]);
|
||||||
|
@ -212,10 +212,10 @@ void winSaveKeys()
|
||||||
static BOOL CALLBACK EnumAxesCallback( const DIDEVICEOBJECTINSTANCE* pdidoi,
|
static BOOL CALLBACK EnumAxesCallback( const DIDEVICEOBJECTINSTANCE* pdidoi,
|
||||||
VOID* pContext )
|
VOID* pContext )
|
||||||
{
|
{
|
||||||
DIPROPRANGE diprg;
|
DIPROPRANGE diprg;
|
||||||
diprg.diph.dwSize = sizeof(DIPROPRANGE);
|
diprg.diph.dwSize = sizeof(DIPROPRANGE);
|
||||||
diprg.diph.dwHeaderSize = sizeof(DIPROPHEADER);
|
diprg.diph.dwHeaderSize = sizeof(DIPROPHEADER);
|
||||||
diprg.diph.dwHow = DIPH_BYOFFSET;
|
diprg.diph.dwHow = DIPH_BYOFFSET;
|
||||||
diprg.diph.dwObj = pdidoi->dwOfs; // Specify the enumerated axis
|
diprg.diph.dwObj = pdidoi->dwOfs; // Specify the enumerated axis
|
||||||
|
|
||||||
diprg.lMin = -32768;
|
diprg.lMin = -32768;
|
||||||
|
@ -239,7 +239,7 @@ static BOOL CALLBACK EnumAxesCallback( const DIDEVICEOBJECTINSTANCE* pdidoi,
|
||||||
didz.dwData = 5000;
|
didz.dwData = 5000;
|
||||||
|
|
||||||
currentDevice->device->SetProperty(DIPROP_DEADZONE, &didz.diph);
|
currentDevice->device->SetProperty(DIPROP_DEADZONE, &didz.diph);
|
||||||
|
|
||||||
LONG center = (diprg.lMin + diprg.lMax)/2;
|
LONG center = (diprg.lMin + diprg.lMax)/2;
|
||||||
LONG threshold = (diprg.lMax - center)/2;
|
LONG threshold = (diprg.lMax - center)/2;
|
||||||
|
|
||||||
|
@ -257,31 +257,31 @@ static BOOL CALLBACK EnumAxesCallback( const DIDEVICEOBJECTINSTANCE* pdidoi,
|
||||||
static BOOL CALLBACK EnumPovsCallback( const DIDEVICEOBJECTINSTANCE* pdidoi,
|
static BOOL CALLBACK EnumPovsCallback( const DIDEVICEOBJECTINSTANCE* pdidoi,
|
||||||
VOID* pContext )
|
VOID* pContext )
|
||||||
{
|
{
|
||||||
return DIENUM_CONTINUE;
|
return DIENUM_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL CALLBACK DIEnumDevicesCallback(LPCDIDEVICEINSTANCE pInst,
|
static BOOL CALLBACK DIEnumDevicesCallback(LPCDIDEVICEINSTANCE pInst,
|
||||||
LPVOID lpvContext)
|
LPVOID lpvContext)
|
||||||
{
|
{
|
||||||
ZeroMemory(&pDevices[numDevices],sizeof(deviceInfo));
|
ZeroMemory(&pDevices[numDevices],sizeof(deviceInfo));
|
||||||
|
|
||||||
HRESULT hRet = pDirectInput->CreateDevice(pInst->guidInstance,
|
HRESULT hRet = pDirectInput->CreateDevice(pInst->guidInstance,
|
||||||
&pDevices[numDevices].device,
|
&pDevices[numDevices].device,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
if(hRet != DI_OK)
|
if(hRet != DI_OK)
|
||||||
return DIENUM_STOP;
|
return DIENUM_STOP;
|
||||||
|
|
||||||
DIDEVCAPS caps;
|
DIDEVCAPS caps;
|
||||||
caps.dwSize=sizeof(DIDEVCAPS);
|
caps.dwSize=sizeof(DIDEVCAPS);
|
||||||
|
|
||||||
hRet = pDevices[numDevices].device->GetCapabilities(&caps);
|
hRet = pDevices[numDevices].device->GetCapabilities(&caps);
|
||||||
|
|
||||||
if(hRet == DI_OK) {
|
if(hRet == DI_OK) {
|
||||||
if(caps.dwFlags & DIDC_POLLEDDATAFORMAT ||
|
if(caps.dwFlags & DIDC_POLLEDDATAFORMAT ||
|
||||||
caps.dwFlags & DIDC_POLLEDDEVICE)
|
caps.dwFlags & DIDC_POLLEDDEVICE)
|
||||||
pDevices[numDevices].isPolled = TRUE;
|
pDevices[numDevices].isPolled = TRUE;
|
||||||
|
|
||||||
pDevices[numDevices].nButtons = caps.dwButtons;
|
pDevices[numDevices].nButtons = caps.dwButtons;
|
||||||
pDevices[numDevices].nAxes = caps.dwAxes;
|
pDevices[numDevices].nAxes = caps.dwAxes;
|
||||||
pDevices[numDevices].nPovs = caps.dwPOVs;
|
pDevices[numDevices].nPovs = caps.dwPOVs;
|
||||||
|
@ -299,10 +299,10 @@ static BOOL CALLBACK DIEnumDevicesCallback(LPCDIDEVICEINSTANCE pInst,
|
||||||
winlog("******************************\n");
|
winlog("******************************\n");
|
||||||
winlog("Joystick %2d name : %s\n", numDevices, pInst->tszProductName);
|
winlog("Joystick %2d name : %s\n", numDevices, pInst->tszProductName);
|
||||||
}
|
}
|
||||||
|
|
||||||
numDevices++;
|
numDevices++;
|
||||||
|
|
||||||
|
|
||||||
return DIENUM_CONTINUE;
|
return DIENUM_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -310,7 +310,7 @@ BOOL CALLBACK DIEnumDevicesCallback2(LPCDIDEVICEINSTANCE pInst,
|
||||||
LPVOID lpvContext)
|
LPVOID lpvContext)
|
||||||
{
|
{
|
||||||
numDevices++;
|
numDevices++;
|
||||||
|
|
||||||
return DIENUM_CONTINUE;
|
return DIENUM_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -344,103 +344,103 @@ static void checkKeys()
|
||||||
pDevices[dev].needed = 1;
|
pDevices[dev].needed = 1;
|
||||||
else
|
else
|
||||||
joypad[i][KEY_LEFT] = DIK_LEFT;
|
joypad[i][KEY_LEFT] = DIK_LEFT;
|
||||||
|
|
||||||
dev = joypad[i][KEY_RIGHT] >> 8;
|
dev = joypad[i][KEY_RIGHT] >> 8;
|
||||||
if(dev < numDevices && dev >= 0)
|
if(dev < numDevices && dev >= 0)
|
||||||
pDevices[dev].needed = 1;
|
pDevices[dev].needed = 1;
|
||||||
else
|
else
|
||||||
joypad[i][KEY_RIGHT] = DIK_RIGHT;
|
joypad[i][KEY_RIGHT] = DIK_RIGHT;
|
||||||
|
|
||||||
dev = joypad[i][KEY_UP] >> 8;
|
dev = joypad[i][KEY_UP] >> 8;
|
||||||
if(dev < numDevices && dev >= 0)
|
if(dev < numDevices && dev >= 0)
|
||||||
pDevices[dev].needed = 1;
|
pDevices[dev].needed = 1;
|
||||||
else
|
else
|
||||||
joypad[i][KEY_UP] = DIK_UP;
|
joypad[i][KEY_UP] = DIK_UP;
|
||||||
|
|
||||||
dev = joypad[i][KEY_DOWN] >> 8;
|
dev = joypad[i][KEY_DOWN] >> 8;
|
||||||
if(dev < numDevices && dev >= 0)
|
if(dev < numDevices && dev >= 0)
|
||||||
pDevices[dev].needed = 1;
|
pDevices[dev].needed = 1;
|
||||||
else
|
else
|
||||||
joypad[i][KEY_DOWN] = DIK_DOWN;
|
joypad[i][KEY_DOWN] = DIK_DOWN;
|
||||||
|
|
||||||
dev = joypad[i][KEY_BUTTON_A] >> 8;
|
dev = joypad[i][KEY_BUTTON_A] >> 8;
|
||||||
if(dev < numDevices && dev >= 0)
|
if(dev < numDevices && dev >= 0)
|
||||||
pDevices[dev].needed = 1;
|
pDevices[dev].needed = 1;
|
||||||
else
|
else
|
||||||
joypad[i][KEY_BUTTON_A] = DIK_Z;
|
joypad[i][KEY_BUTTON_A] = DIK_Z;
|
||||||
|
|
||||||
dev = joypad[i][KEY_BUTTON_B] >> 8;
|
dev = joypad[i][KEY_BUTTON_B] >> 8;
|
||||||
if(dev < numDevices && dev >= 0)
|
if(dev < numDevices && dev >= 0)
|
||||||
pDevices[dev].needed = 1;
|
pDevices[dev].needed = 1;
|
||||||
else
|
else
|
||||||
joypad[i][KEY_BUTTON_B] = DIK_X;
|
joypad[i][KEY_BUTTON_B] = DIK_X;
|
||||||
|
|
||||||
dev = joypad[i][KEY_BUTTON_L] >> 8;
|
dev = joypad[i][KEY_BUTTON_L] >> 8;
|
||||||
if(dev < numDevices && dev >= 0)
|
if(dev < numDevices && dev >= 0)
|
||||||
pDevices[dev].needed = 1;
|
pDevices[dev].needed = 1;
|
||||||
else
|
else
|
||||||
joypad[i][KEY_BUTTON_L] = DIK_A;
|
joypad[i][KEY_BUTTON_L] = DIK_A;
|
||||||
|
|
||||||
dev = joypad[i][KEY_BUTTON_R] >> 8;
|
dev = joypad[i][KEY_BUTTON_R] >> 8;
|
||||||
if(dev < numDevices && dev >= 0)
|
if(dev < numDevices && dev >= 0)
|
||||||
pDevices[dev].needed = 1;
|
pDevices[dev].needed = 1;
|
||||||
else
|
else
|
||||||
joypad[i][KEY_BUTTON_R] = DIK_S;
|
joypad[i][KEY_BUTTON_R] = DIK_S;
|
||||||
|
|
||||||
dev = joypad[i][KEY_BUTTON_START] >> 8;
|
dev = joypad[i][KEY_BUTTON_START] >> 8;
|
||||||
if(dev < numDevices && dev >= 0)
|
if(dev < numDevices && dev >= 0)
|
||||||
pDevices[dev].needed = 1;
|
pDevices[dev].needed = 1;
|
||||||
else
|
else
|
||||||
joypad[i][KEY_BUTTON_START] = DIK_RETURN;
|
joypad[i][KEY_BUTTON_START] = DIK_RETURN;
|
||||||
|
|
||||||
dev = joypad[i][KEY_BUTTON_SELECT] >> 8;
|
dev = joypad[i][KEY_BUTTON_SELECT] >> 8;
|
||||||
if(dev < numDevices && dev >= 0)
|
if(dev < numDevices && dev >= 0)
|
||||||
pDevices[dev].needed = 1;
|
pDevices[dev].needed = 1;
|
||||||
else
|
else
|
||||||
joypad[i][KEY_BUTTON_SELECT] = DIK_BACK;
|
joypad[i][KEY_BUTTON_SELECT] = DIK_BACK;
|
||||||
|
|
||||||
dev = joypad[i][KEY_BUTTON_SPEED] >> 8;
|
dev = joypad[i][KEY_BUTTON_SPEED] >> 8;
|
||||||
if(dev < numDevices && dev >= 0)
|
if(dev < numDevices && dev >= 0)
|
||||||
pDevices[dev].needed = 1;
|
pDevices[dev].needed = 1;
|
||||||
else
|
else
|
||||||
joypad[i][KEY_BUTTON_SPEED] = DIK_SPACE;
|
joypad[i][KEY_BUTTON_SPEED] = DIK_SPACE;
|
||||||
|
|
||||||
dev = joypad[i][KEY_BUTTON_CAPTURE] >> 8;
|
dev = joypad[i][KEY_BUTTON_CAPTURE] >> 8;
|
||||||
if(dev < numDevices && dev >= 0)
|
if(dev < numDevices && dev >= 0)
|
||||||
pDevices[dev].needed = 1;
|
pDevices[dev].needed = 1;
|
||||||
else
|
else
|
||||||
joypad[i][KEY_BUTTON_CAPTURE] = DIK_F12;
|
joypad[i][KEY_BUTTON_CAPTURE] = DIK_F12;
|
||||||
|
|
||||||
dev = joypad[i][KEY_BUTTON_GS] >> 8;
|
dev = joypad[i][KEY_BUTTON_GS] >> 8;
|
||||||
if(dev < numDevices && dev >= 0)
|
if(dev < numDevices && dev >= 0)
|
||||||
pDevices[dev].needed = 1;
|
pDevices[dev].needed = 1;
|
||||||
else
|
else
|
||||||
joypad[i][KEY_BUTTON_GS] = DIK_C;
|
joypad[i][KEY_BUTTON_GS] = DIK_C;
|
||||||
}
|
}
|
||||||
|
|
||||||
dev = motion[KEY_UP] >> 8;
|
dev = motion[KEY_UP] >> 8;
|
||||||
if(dev < numDevices && dev >= 0)
|
if(dev < numDevices && dev >= 0)
|
||||||
pDevices[dev].needed = 1;
|
pDevices[dev].needed = 1;
|
||||||
else
|
else
|
||||||
motion[KEY_UP] = DIK_NUMPAD8;
|
motion[KEY_UP] = DIK_NUMPAD8;
|
||||||
|
|
||||||
dev = motion[KEY_DOWN] >> 8;
|
dev = motion[KEY_DOWN] >> 8;
|
||||||
if(dev < numDevices && dev >= 0)
|
if(dev < numDevices && dev >= 0)
|
||||||
pDevices[dev].needed = 1;
|
pDevices[dev].needed = 1;
|
||||||
else
|
else
|
||||||
motion[KEY_DOWN] = DIK_NUMPAD2;
|
motion[KEY_DOWN] = DIK_NUMPAD2;
|
||||||
|
|
||||||
dev = motion[KEY_LEFT] >> 8;
|
dev = motion[KEY_LEFT] >> 8;
|
||||||
if(dev < numDevices && dev >= 0)
|
if(dev < numDevices && dev >= 0)
|
||||||
pDevices[dev].needed = 1;
|
pDevices[dev].needed = 1;
|
||||||
else
|
else
|
||||||
motion[KEY_LEFT] = DIK_NUMPAD4;
|
motion[KEY_LEFT] = DIK_NUMPAD4;
|
||||||
|
|
||||||
dev = motion[KEY_RIGHT] >> 8;
|
dev = motion[KEY_RIGHT] >> 8;
|
||||||
if(dev < numDevices && dev >= 0)
|
if(dev < numDevices && dev >= 0)
|
||||||
pDevices[dev].needed = 1;
|
pDevices[dev].needed = 1;
|
||||||
else
|
else
|
||||||
motion[KEY_RIGHT] = DIK_NUMPAD6;
|
motion[KEY_RIGHT] = DIK_NUMPAD6;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define KEYDOWN(buffer,key) (buffer[key] & 0x80)
|
#define KEYDOWN(buffer,key) (buffer[key] & 0x80)
|
||||||
|
@ -451,14 +451,14 @@ static bool readKeyboard()
|
||||||
HRESULT hret = pDevices[0].device->
|
HRESULT hret = pDevices[0].device->
|
||||||
GetDeviceState(256,
|
GetDeviceState(256,
|
||||||
(LPVOID)pDevices[0].data);
|
(LPVOID)pDevices[0].data);
|
||||||
|
|
||||||
if(hret == DIERR_INPUTLOST || hret == DIERR_NOTACQUIRED) {
|
if(hret == DIERR_INPUTLOST || hret == DIERR_NOTACQUIRED) {
|
||||||
hret = pDevices[0].device->Acquire();
|
hret = pDevices[0].device->Acquire();
|
||||||
if(hret != DI_OK)
|
if(hret != DI_OK)
|
||||||
return false;
|
return false;
|
||||||
hret = pDevices[0].device->GetDeviceState(256,(LPVOID)pDevices[0].data);
|
hret = pDevices[0].device->GetDeviceState(256,(LPVOID)pDevices[0].data);
|
||||||
}
|
}
|
||||||
|
|
||||||
return hret == DI_OK;
|
return hret == DI_OK;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -469,19 +469,19 @@ static bool readJoystick(int joy)
|
||||||
if(pDevices[joy].needed) {
|
if(pDevices[joy].needed) {
|
||||||
if(pDevices[joy].isPolled)
|
if(pDevices[joy].isPolled)
|
||||||
((LPDIRECTINPUTDEVICE2)pDevices[joy].device)->Poll();
|
((LPDIRECTINPUTDEVICE2)pDevices[joy].device)->Poll();
|
||||||
|
|
||||||
HRESULT hret = pDevices[joy].device->
|
HRESULT hret = pDevices[joy].device->
|
||||||
GetDeviceState(sizeof(DIJOYSTATE),
|
GetDeviceState(sizeof(DIJOYSTATE),
|
||||||
(LPVOID)&pDevices[joy].state);
|
(LPVOID)&pDevices[joy].state);
|
||||||
|
|
||||||
if(hret == DIERR_INPUTLOST || hret == DIERR_NOTACQUIRED) {
|
if(hret == DIERR_INPUTLOST || hret == DIERR_NOTACQUIRED) {
|
||||||
hret = pDevices[joy].device->Acquire();
|
hret = pDevices[joy].device->Acquire();
|
||||||
|
|
||||||
if(hret == DI_OK) {
|
if(hret == DI_OK) {
|
||||||
|
|
||||||
if(pDevices[joy].isPolled)
|
if(pDevices[joy].isPolled)
|
||||||
((LPDIRECTINPUTDEVICE2)pDevices[joy].device)->Poll();
|
((LPDIRECTINPUTDEVICE2)pDevices[joy].device)->Poll();
|
||||||
|
|
||||||
hret = pDevices[joy].device->
|
hret = pDevices[joy].device->
|
||||||
GetDeviceState(sizeof(DIJOYSTATE),
|
GetDeviceState(sizeof(DIJOYSTATE),
|
||||||
(LPVOID)&pDevices[joy].state);
|
(LPVOID)&pDevices[joy].state);
|
||||||
|
@ -496,15 +496,15 @@ static bool readJoystick(int joy)
|
||||||
|
|
||||||
static void checkKeyboard()
|
static void checkKeyboard()
|
||||||
{
|
{
|
||||||
HRESULT hret = pDevices[0].device->Acquire();
|
HRESULT hret = pDevices[0].device->Acquire();
|
||||||
hret = pDevices[0].device->
|
hret = pDevices[0].device->
|
||||||
GetDeviceState(256,
|
GetDeviceState(256,
|
||||||
(LPVOID)pDevices[0].data);
|
(LPVOID)pDevices[0].data);
|
||||||
|
|
||||||
if(hret == DIERR_INPUTLOST || hret == DIERR_NOTACQUIRED) {
|
if(hret == DIERR_INPUTLOST || hret == DIERR_NOTACQUIRED) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(hret == DI_OK) {
|
if(hret == DI_OK) {
|
||||||
for(int i = 0; i < 256; i++) {
|
for(int i = 0; i < 256; i++) {
|
||||||
if(KEYDOWN(pDevices[0].data, i)) {
|
if(KEYDOWN(pDevices[0].data, i)) {
|
||||||
|
@ -526,14 +526,14 @@ static void checkJoypads()
|
||||||
int i =0;
|
int i =0;
|
||||||
|
|
||||||
DIJOYSTATE joystick;
|
DIJOYSTATE joystick;
|
||||||
|
|
||||||
for(i = 1; i < numDevices; i++) {
|
for(i = 1; i < numDevices; i++) {
|
||||||
HRESULT hret = pDevices[i].device->Acquire();
|
HRESULT hret = pDevices[i].device->Acquire();
|
||||||
|
|
||||||
|
|
||||||
if(pDevices[i].isPolled)
|
if(pDevices[i].isPolled)
|
||||||
((LPDIRECTINPUTDEVICE2)pDevices[i].device)->Poll();
|
((LPDIRECTINPUTDEVICE2)pDevices[i].device)->Poll();
|
||||||
|
|
||||||
hret = pDevices[i].device->GetDeviceState(sizeof(joystick), &joystick);
|
hret = pDevices[i].device->GetDeviceState(sizeof(joystick), &joystick);
|
||||||
|
|
||||||
int j;
|
int j;
|
||||||
|
@ -543,14 +543,14 @@ static void checkJoypads()
|
||||||
pDevices[i].first = FALSE;
|
pDevices[i].first = FALSE;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(j = 0; j < pDevices[i].nButtons; j++) {
|
for(j = 0; j < pDevices[i].nButtons; j++) {
|
||||||
if(((pDevices[i].state.rgbButtons[j] ^ joystick.rgbButtons[j])
|
if(((pDevices[i].state.rgbButtons[j] ^ joystick.rgbButtons[j])
|
||||||
& joystick.rgbButtons[j]) & 0x80) {
|
& joystick.rgbButtons[j]) & 0x80) {
|
||||||
HWND focus = GetFocus();
|
HWND focus = GetFocus();
|
||||||
|
|
||||||
SendMessage(focus, JOYCONFIG_MESSAGE, i,j+128);
|
SendMessage(focus, JOYCONFIG_MESSAGE, i,j+128);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(j = 0; j < pDevices[i].nAxes && j < 8; j++) {
|
for(j = 0; j < pDevices[i].nAxes && j < 8; j++) {
|
||||||
|
@ -563,31 +563,31 @@ static void checkJoypads()
|
||||||
break;
|
break;
|
||||||
case DIJOFS_Y:
|
case DIJOFS_Y:
|
||||||
value = joystick.lY;
|
value = joystick.lY;
|
||||||
old = pDevices[i].state.lY;
|
old = pDevices[i].state.lY;
|
||||||
break;
|
break;
|
||||||
case DIJOFS_Z:
|
case DIJOFS_Z:
|
||||||
value = joystick.lZ;
|
value = joystick.lZ;
|
||||||
old = pDevices[i].state.lZ;
|
old = pDevices[i].state.lZ;
|
||||||
break;
|
break;
|
||||||
case DIJOFS_RX:
|
case DIJOFS_RX:
|
||||||
value = joystick.lRx;
|
value = joystick.lRx;
|
||||||
old = pDevices[i].state.lRx;
|
old = pDevices[i].state.lRx;
|
||||||
break;
|
break;
|
||||||
case DIJOFS_RY:
|
case DIJOFS_RY:
|
||||||
value = joystick.lRy;
|
value = joystick.lRy;
|
||||||
old = pDevices[i].state.lRy;
|
old = pDevices[i].state.lRy;
|
||||||
break;
|
break;
|
||||||
case DIJOFS_RZ:
|
case DIJOFS_RZ:
|
||||||
value = joystick.lRz;
|
value = joystick.lRz;
|
||||||
old = pDevices[i].state.lRz;
|
old = pDevices[i].state.lRz;
|
||||||
break;
|
break;
|
||||||
case DIJOFS_SLIDER(0):
|
case DIJOFS_SLIDER(0):
|
||||||
value = joystick.rglSlider[0];
|
value = joystick.rglSlider[0];
|
||||||
old = pDevices[i].state.rglSlider[0];
|
old = pDevices[i].state.rglSlider[0];
|
||||||
break;
|
break;
|
||||||
case DIJOFS_SLIDER(1):
|
case DIJOFS_SLIDER(1):
|
||||||
value = joystick.rglSlider[1];
|
value = joystick.rglSlider[1];
|
||||||
old = pDevices[i].state.rglSlider[1];
|
old = pDevices[i].state.rglSlider[1];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(value != old) {
|
if(value != old) {
|
||||||
|
@ -601,7 +601,7 @@ static void checkJoypads()
|
||||||
for(j = 0;j < 4 && j < pDevices[i].nPovs; j++) {
|
for(j = 0;j < 4 && j < pDevices[i].nPovs; j++) {
|
||||||
if(LOWORD(pDevices[i].state.rgdwPOV[j]) != LOWORD(joystick.rgdwPOV[j])) {
|
if(LOWORD(pDevices[i].state.rgdwPOV[j]) != LOWORD(joystick.rgdwPOV[j])) {
|
||||||
int state = getPovState(joystick.rgdwPOV[j]);
|
int state = getPovState(joystick.rgdwPOV[j]);
|
||||||
|
|
||||||
if(state & POV_UP)
|
if(state & POV_UP)
|
||||||
SendMessage(GetFocus(), JOYCONFIG_MESSAGE, i, (j<<2)+0x20);
|
SendMessage(GetFocus(), JOYCONFIG_MESSAGE, i, (j<<2)+0x20);
|
||||||
else if(state & POV_DOWN)
|
else if(state & POV_DOWN)
|
||||||
|
@ -622,7 +622,7 @@ BOOL checkKey(int key)
|
||||||
int dev = (key >> 8);
|
int dev = (key >> 8);
|
||||||
|
|
||||||
int k = (key & 255);
|
int k = (key & 255);
|
||||||
|
|
||||||
if(dev == 0) {
|
if(dev == 0) {
|
||||||
return KEYDOWN(pDevices[0].data,k);
|
return KEYDOWN(pDevices[0].data,k);
|
||||||
} else {
|
} else {
|
||||||
|
@ -706,7 +706,7 @@ DirectInput::~DirectInput()
|
||||||
free(pDevices);
|
free(pDevices);
|
||||||
pDevices = NULL;
|
pDevices = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
pDirectInput->Release();
|
pDirectInput->Release();
|
||||||
pDirectInput = NULL;
|
pDirectInput = NULL;
|
||||||
}
|
}
|
||||||
|
@ -724,11 +724,11 @@ bool DirectInput::initialize()
|
||||||
0,
|
0,
|
||||||
"VBA.ini");
|
"VBA.ini");
|
||||||
dinputDLL = LoadLibrary("DINPUT.DLL");
|
dinputDLL = LoadLibrary("DINPUT.DLL");
|
||||||
HRESULT (WINAPI *DInputCreate)(HINSTANCE,DWORD,LPDIRECTINPUT *,IUnknown *);
|
HRESULT (WINAPI *DInputCreate)(HINSTANCE,DWORD,LPDIRECTINPUT *,IUnknown *);
|
||||||
if(dinputDLL != NULL) {
|
if(dinputDLL != NULL) {
|
||||||
DInputCreate = (HRESULT (WINAPI *)(HINSTANCE,DWORD,LPDIRECTINPUT *,IUnknown *))
|
DInputCreate = (HRESULT (WINAPI *)(HINSTANCE,DWORD,LPDIRECTINPUT *,IUnknown *))
|
||||||
GetProcAddress(dinputDLL, "DirectInputCreateA");
|
GetProcAddress(dinputDLL, "DirectInputCreateA");
|
||||||
|
|
||||||
if(DInputCreate == NULL) {
|
if(DInputCreate == NULL) {
|
||||||
directXMessage("DirectInputCreateA");
|
directXMessage("DirectInputCreateA");
|
||||||
return false;
|
return false;
|
||||||
|
@ -737,7 +737,7 @@ bool DirectInput::initialize()
|
||||||
directXMessage("DINPUT.DLL");
|
directXMessage("DINPUT.DLL");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT hret = DInputCreate(AfxGetInstanceHandle(),
|
HRESULT hret = DInputCreate(AfxGetInstanceHandle(),
|
||||||
DIRECTINPUT_VERSION,
|
DIRECTINPUT_VERSION,
|
||||||
&pDirectInput,
|
&pDirectInput,
|
||||||
|
@ -752,8 +752,8 @@ bool DirectInput::initialize()
|
||||||
NULL,
|
NULL,
|
||||||
DIEDFL_ATTACHEDONLY);
|
DIEDFL_ATTACHEDONLY);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
pDevices = (deviceInfo *)calloc(numDevices, sizeof(deviceInfo));
|
pDevices = (deviceInfo *)calloc(numDevices, sizeof(deviceInfo));
|
||||||
|
|
||||||
hret = pDirectInput->CreateDevice(GUID_SysKeyboard,&pDevices[0].device,NULL);
|
hret = pDirectInput->CreateDevice(GUID_SysKeyboard,&pDevices[0].device,NULL);
|
||||||
|
@ -765,23 +765,23 @@ bool DirectInput::initialize()
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
numDevices = 1;
|
numDevices = 1;
|
||||||
|
|
||||||
hret = pDirectInput->EnumDevices(DIDEVTYPE_JOYSTICK,
|
hret = pDirectInput->EnumDevices(DIDEVTYPE_JOYSTICK,
|
||||||
DIEnumDevicesCallback,
|
DIEnumDevicesCallback,
|
||||||
NULL,
|
NULL,
|
||||||
DIEDFL_ATTACHEDONLY);
|
DIEDFL_ATTACHEDONLY);
|
||||||
|
|
||||||
// hret = pDevices[0].device->SetCooperativeLevel(hWindow,
|
// hret = pDevices[0].device->SetCooperativeLevel(hWindow,
|
||||||
// DISCL_FOREGROUND|
|
// DISCL_FOREGROUND|
|
||||||
// DISCL_NONEXCLUSIVE);
|
// DISCL_NONEXCLUSIVE);
|
||||||
|
|
||||||
if(hret != DI_OK) {
|
if(hret != DI_OK) {
|
||||||
// errorMessage(myLoadString(IDS_ERROR_DISP_LEVEL), hret);
|
// errorMessage(myLoadString(IDS_ERROR_DISP_LEVEL), hret);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
hret = pDevices[0].device->SetDataFormat(&c_dfDIKeyboard);
|
hret = pDevices[0].device->SetDataFormat(&c_dfDIKeyboard);
|
||||||
|
|
||||||
if(hret != DI_OK) {
|
if(hret != DI_OK) {
|
||||||
|
@ -813,13 +813,13 @@ bool DirectInput::initialize()
|
||||||
positive);
|
positive);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
currentDevice = NULL;
|
currentDevice = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(i = 0; i < numDevices; i++)
|
for(i = 0; i < numDevices; i++)
|
||||||
pDevices[i].device->Acquire();
|
pDevices[i].device->Acquire();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -843,7 +843,7 @@ u32 DirectInput::readDevice(int which)
|
||||||
int i = theApp.joypadDefault;
|
int i = theApp.joypadDefault;
|
||||||
if(which >= 0 && which <= 3)
|
if(which >= 0 && which <= 3)
|
||||||
i = which;
|
i = which;
|
||||||
|
|
||||||
if(checkKey(joypad[i][KEY_BUTTON_A]))
|
if(checkKey(joypad[i][KEY_BUTTON_A]))
|
||||||
res |= 1;
|
res |= 1;
|
||||||
if(checkKey(joypad[i][KEY_BUTTON_B]))
|
if(checkKey(joypad[i][KEY_BUTTON_B]))
|
||||||
|
@ -864,7 +864,7 @@ u32 DirectInput::readDevice(int which)
|
||||||
res |= 256;
|
res |= 256;
|
||||||
if(checkKey(joypad[i][KEY_BUTTON_L]))
|
if(checkKey(joypad[i][KEY_BUTTON_L]))
|
||||||
res |= 512;
|
res |= 512;
|
||||||
|
|
||||||
if(checkKey(joypad[i][KEY_BUTTON_GS]))
|
if(checkKey(joypad[i][KEY_BUTTON_GS]))
|
||||||
res |= 4096;
|
res |= 4096;
|
||||||
|
|
||||||
|
@ -916,9 +916,9 @@ CString DirectInput::getKeyName(int key)
|
||||||
ZeroMemory(&di,sizeof(DIDEVICEOBJECTINSTANCE));
|
ZeroMemory(&di,sizeof(DIDEVICEOBJECTINSTANCE));
|
||||||
|
|
||||||
di.dwSize = sizeof(DIDEVICEOBJECTINSTANCE);
|
di.dwSize = sizeof(DIDEVICEOBJECTINSTANCE);
|
||||||
|
|
||||||
CString winBuffer = winResLoadString(IDS_ERROR);
|
CString winBuffer = winResLoadString(IDS_ERROR);
|
||||||
|
|
||||||
if(d == 0) {
|
if(d == 0) {
|
||||||
pDevices[0].device->GetObjectInfo(&di,key,DIPH_BYOFFSET);
|
pDevices[0].device->GetObjectInfo(&di,key,DIPH_BYOFFSET);
|
||||||
winBuffer = di.tszName;
|
winBuffer = di.tszName;
|
||||||
|
@ -1001,7 +1001,7 @@ void DirectInput::checkMotionKeys()
|
||||||
if(theApp.sensorX > 2047)
|
if(theApp.sensorX > 2047)
|
||||||
theApp.sensorX = 2047;
|
theApp.sensorX = 2047;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(checkKey(motion[KEY_UP])) {
|
if(checkKey(motion[KEY_UP])) {
|
||||||
theApp.sensorY += 3;
|
theApp.sensorY += 3;
|
||||||
if(theApp.sensorY > 2197)
|
if(theApp.sensorY > 2197)
|
||||||
|
@ -1022,7 +1022,7 @@ void DirectInput::checkMotionKeys()
|
||||||
theApp.sensorY += 2;
|
theApp.sensorY += 2;
|
||||||
if(theApp.sensorY > 2047)
|
if(theApp.sensorY > 2047)
|
||||||
theApp.sensorY = 2047;
|
theApp.sensorY = 2047;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Input *newDirectInput()
|
Input *newDirectInput()
|
||||||
|
|
|
@ -27,18 +27,18 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||||
// TEXTINCLUDE
|
// TEXTINCLUDE
|
||||||
//
|
//
|
||||||
|
|
||||||
1 TEXTINCLUDE
|
1 TEXTINCLUDE
|
||||||
BEGIN
|
BEGIN
|
||||||
"resource.h\0"
|
"resource.h\0"
|
||||||
END
|
END
|
||||||
|
|
||||||
2 TEXTINCLUDE
|
2 TEXTINCLUDE
|
||||||
BEGIN
|
BEGIN
|
||||||
"#include ""afxres.h""\r\n"
|
"#include ""afxres.h""\r\n"
|
||||||
"#include ""resource2.h""\0"
|
"#include ""resource2.h""\0"
|
||||||
END
|
END
|
||||||
|
|
||||||
3 TEXTINCLUDE
|
3 TEXTINCLUDE
|
||||||
BEGIN
|
BEGIN
|
||||||
"#include ""vba.rc2""\0"
|
"#include ""vba.rc2""\0"
|
||||||
END
|
END
|
||||||
|
@ -1123,7 +1123,7 @@ END
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifdef APSTUDIO_INVOKED
|
#ifdef APSTUDIO_INVOKED
|
||||||
GUIDELINES DESIGNINFO
|
GUIDELINES DESIGNINFO
|
||||||
BEGIN
|
BEGIN
|
||||||
IDD_OPENDLG, DIALOG
|
IDD_OPENDLG, DIALOG
|
||||||
BEGIN
|
BEGIN
|
||||||
|
@ -1474,7 +1474,7 @@ END
|
||||||
// Menu
|
// Menu
|
||||||
//
|
//
|
||||||
|
|
||||||
IDR_MENU MENU
|
IDR_MENU MENU
|
||||||
BEGIN
|
BEGIN
|
||||||
POPUP "&File"
|
POPUP "&File"
|
||||||
BEGIN
|
BEGIN
|
||||||
|
@ -1884,7 +1884,7 @@ END
|
||||||
// Accelerator
|
// Accelerator
|
||||||
//
|
//
|
||||||
|
|
||||||
IDR_ACCELERATOR ACCELERATORS
|
IDR_ACCELERATOR ACCELERATORS
|
||||||
BEGIN
|
BEGIN
|
||||||
"C", ID_CHEATS_SEARCHFORCHEATS, VIRTKEY, CONTROL, NOINVERT
|
"C", ID_CHEATS_SEARCHFORCHEATS, VIRTKEY, CONTROL, NOINVERT
|
||||||
"N", ID_DEBUG_NEXTFRAME, VIRTKEY, CONTROL, NOINVERT
|
"N", ID_DEBUG_NEXTFRAME, VIRTKEY, CONTROL, NOINVERT
|
||||||
|
@ -1947,7 +1947,7 @@ END
|
||||||
// String Table
|
// String Table
|
||||||
//
|
//
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
BEGIN
|
BEGIN
|
||||||
IDS_UNSUPPORTED_VBA_SGM "Unsupported VisualBoyAdvance save game version %d"
|
IDS_UNSUPPORTED_VBA_SGM "Unsupported VisualBoyAdvance save game version %d"
|
||||||
IDS_CANNOT_LOAD_SGM "Cannot load save game for %s"
|
IDS_CANNOT_LOAD_SGM "Cannot load save game for %s"
|
||||||
|
@ -1959,7 +1959,7 @@ BEGIN
|
||||||
IDS_NO_IMAGE_ON_ZIP "No image found on ZIP file %s"
|
IDS_NO_IMAGE_ON_ZIP "No image found on ZIP file %s"
|
||||||
IDS_ERROR_OPENING_IMAGE "Error opening image %s"
|
IDS_ERROR_OPENING_IMAGE "Error opening image %s"
|
||||||
IDS_ERROR_READING_IMAGE "Error reading image %s"
|
IDS_ERROR_READING_IMAGE "Error reading image %s"
|
||||||
IDS_UNSUPPORTED_BIOS_FUNCTION
|
IDS_UNSUPPORTED_BIOS_FUNCTION
|
||||||
"Unsupported BIOS function %02x called from %08x. A BIOS file is needed in order to get correct behaviour."
|
"Unsupported BIOS function %02x called from %08x. A BIOS file is needed in order to get correct behaviour."
|
||||||
IDS_INVALID_BIOS_FILE_SIZE "Invalid BIOS file size"
|
IDS_INVALID_BIOS_FILE_SIZE "Invalid BIOS file size"
|
||||||
IDS_INVALID_CHEAT_CODE "Invalid cheat code '%s'. Supported formats are:\nXXXXXXXX:YY, XXXXXXXX:YYYY, XXXXXXXX:YYYYYYYY."
|
IDS_INVALID_CHEAT_CODE "Invalid cheat code '%s'. Supported formats are:\nXXXXXXXX:YY, XXXXXXXX:YYYY, XXXXXXXX:YYYYYYYY."
|
||||||
|
@ -1967,7 +1967,7 @@ BEGIN
|
||||||
IDS_UNKNOWN_THUMB_OPCODE "Unknown opcode %04x from %08x"
|
IDS_UNKNOWN_THUMB_OPCODE "Unknown opcode %04x from %08x"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
BEGIN
|
BEGIN
|
||||||
IDS_ERROR_CREATING_FILE "Error creating file %s"
|
IDS_ERROR_CREATING_FILE "Error creating file %s"
|
||||||
IDS_FAILED_TO_READ_SGM "Battery file's size incompatible with the ROM settings %s (%d).\nWarning : save of the battery file is now disabled !"
|
IDS_FAILED_TO_READ_SGM "Battery file's size incompatible with the ROM settings %s (%d).\nWarning : save of the battery file is now disabled !"
|
||||||
|
@ -1987,11 +1987,11 @@ BEGIN
|
||||||
IDS_UNSUPPORTED_CHEAT_LIST_VERSION "Unsupported cheat list version %d"
|
IDS_UNSUPPORTED_CHEAT_LIST_VERSION "Unsupported cheat list version %d"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
BEGIN
|
BEGIN
|
||||||
IDS_DIRECTX_7_REQUIRED "DirectX 7.0 or greater is required to run.\nDownload at http://www.microsoft.com/directx.\n\nError found at: %s"
|
IDS_DIRECTX_7_REQUIRED "DirectX 7.0 or greater is required to run.\nDownload at http://www.microsoft.com/directx.\n\nError found at: %s"
|
||||||
IDS_DISABLING_VIDEO_MEMORY "Disabling Use Video Memory setting"
|
IDS_DISABLING_VIDEO_MEMORY "Disabling Use Video Memory setting"
|
||||||
IDS_SETTING_WILL_BE_EFFECTIVE
|
IDS_SETTING_WILL_BE_EFFECTIVE
|
||||||
"Setting will be effective the next time you start the emulator"
|
"Setting will be effective the next time you start the emulator"
|
||||||
IDS_DISABLING_EMULATION_ONLY "Disabling Emulation Only setting"
|
IDS_DISABLING_EMULATION_ONLY "Disabling Emulation Only setting"
|
||||||
IDS_FAILED_TO_OPEN_FILE "Failed to open file %s"
|
IDS_FAILED_TO_OPEN_FILE "Failed to open file %s"
|
||||||
|
@ -2003,13 +2003,13 @@ BEGIN
|
||||||
IDS_CANNOT_SETFORMAT_PRIMARY "Cannot SetFormat for primary %08x"
|
IDS_CANNOT_SETFORMAT_PRIMARY "Cannot SetFormat for primary %08x"
|
||||||
IDS_CANNOT_CREATESOUNDBUFFER_SEC "Cannot CreateSoundBuffer secondary %08x"
|
IDS_CANNOT_CREATESOUNDBUFFER_SEC "Cannot CreateSoundBuffer secondary %08x"
|
||||||
IDS_CANNOT_PLAY_PRIMARY "Cannot Play primary %08x"
|
IDS_CANNOT_PLAY_PRIMARY "Cannot Play primary %08x"
|
||||||
IDS_SEARCH_PRODUCED_TOO_MANY
|
IDS_SEARCH_PRODUCED_TOO_MANY
|
||||||
"Search produced %d results. Please refine better"
|
"Search produced %d results. Please refine better"
|
||||||
IDS_NUMBER_CANNOT_BE_EMPTY "Number cannot be empty"
|
IDS_NUMBER_CANNOT_BE_EMPTY "Number cannot be empty"
|
||||||
IDS_INVALID_ADDRESS "Invalid address: %08x"
|
IDS_INVALID_ADDRESS "Invalid address: %08x"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
BEGIN
|
BEGIN
|
||||||
IDS_MISALIGNED_HALFWORD "Misaligned half-word address: %08x"
|
IDS_MISALIGNED_HALFWORD "Misaligned half-word address: %08x"
|
||||||
IDS_MISALIGNED_WORD "Misaligned word address: %08x"
|
IDS_MISALIGNED_WORD "Misaligned word address: %08x"
|
||||||
|
@ -2029,7 +2029,7 @@ BEGIN
|
||||||
IDS_SELECT_BATTERY_DIR "Select Battery directory:"
|
IDS_SELECT_BATTERY_DIR "Select Battery directory:"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
BEGIN
|
BEGIN
|
||||||
IDS_SELECT_SAVE_DIR "Select Save Directory:"
|
IDS_SELECT_SAVE_DIR "Select Save Directory:"
|
||||||
IDS_SELECT_CAPTURE_DIR "Select Capture directory:"
|
IDS_SELECT_CAPTURE_DIR "Select Capture directory:"
|
||||||
|
@ -2049,7 +2049,7 @@ BEGIN
|
||||||
IDS_LOADED_STATE_N "Loaded state %d"
|
IDS_LOADED_STATE_N "Loaded state %d"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
BEGIN
|
BEGIN
|
||||||
IDS_WROTE_STATE "Wrote state"
|
IDS_WROTE_STATE "Wrote state"
|
||||||
IDS_WROTE_STATE_N "Wrote state %d"
|
IDS_WROTE_STATE_N "Wrote state %d"
|
||||||
|
@ -2069,7 +2069,7 @@ BEGIN
|
||||||
IDS_UNKNOWN "Unknown"
|
IDS_UNKNOWN "Unknown"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
BEGIN
|
BEGIN
|
||||||
IDS_NONE "None"
|
IDS_NONE "None"
|
||||||
IDS_FAILED_TO_LOAD_LIBRARY "Failed to load library %s"
|
IDS_FAILED_TO_LOAD_LIBRARY "Failed to load library %s"
|
||||||
|
@ -2089,11 +2089,11 @@ BEGIN
|
||||||
IDS_SELECT_BATTERY_FILE "Select battery file"
|
IDS_SELECT_BATTERY_FILE "Select battery file"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
BEGIN
|
BEGIN
|
||||||
IDS_UNSUPPORTED_CHEAT_LIST_TYPE "Unsupported cheat list type %d"
|
IDS_UNSUPPORTED_CHEAT_LIST_TYPE "Unsupported cheat list type %d"
|
||||||
IDS_INVALID_GSA_CODE "Invalid GSA code. Format is XXXXXXXXYYYYYYYY."
|
IDS_INVALID_GSA_CODE "Invalid GSA code. Format is XXXXXXXXYYYYYYYY."
|
||||||
IDS_CANNOT_IMPORT_SNAPSHOT_FOR
|
IDS_CANNOT_IMPORT_SNAPSHOT_FOR
|
||||||
"Cannot import snapshot for %s. Current game is %s"
|
"Cannot import snapshot for %s. Current game is %s"
|
||||||
IDS_UNSUPPORTED_SNAPSHOT_FILE "Unsupported snapshot file %s"
|
IDS_UNSUPPORTED_SNAPSHOT_FILE "Unsupported snapshot file %s"
|
||||||
IDS_UNSUPPORTED_ARM_MODE "Unsupported ARM mode %02x"
|
IDS_UNSUPPORTED_ARM_MODE "Unsupported ARM mode %02x"
|
||||||
|
@ -2104,7 +2104,7 @@ BEGIN
|
||||||
IDS_OUT_OF_MEMORY "Failed to allocate memory for %s"
|
IDS_OUT_OF_MEMORY "Failed to allocate memory for %s"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
BEGIN
|
BEGIN
|
||||||
IDS_FILTER_GBS "Gameboy Snapshot_*.GBS__"
|
IDS_FILTER_GBS "Gameboy Snapshot_*.GBS__"
|
||||||
IDS_FILTER_GCF "Gameshark Code File_*.GCF__"
|
IDS_FILTER_GCF "Gameshark Code File_*.GCF__"
|
||||||
|
@ -2124,7 +2124,7 @@ BEGIN
|
||||||
IDS_ERROR_LISTENING "Error listening on socket."
|
IDS_ERROR_LISTENING "Error listening on socket."
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
BEGIN
|
BEGIN
|
||||||
IDS_ERROR_CREATING_SOCKET "Error creating socket."
|
IDS_ERROR_CREATING_SOCKET "Error creating socket."
|
||||||
IDS_ACK_NOT_RECEIVED "ACK not received from GDB."
|
IDS_ACK_NOT_RECEIVED "ACK not received from GDB."
|
||||||
|
@ -2134,7 +2134,7 @@ BEGIN
|
||||||
IDS_SELECT_DUMP_FILE "Select dump file name"
|
IDS_SELECT_DUMP_FILE "Select dump file name"
|
||||||
IDS_FILTER_AVI "AVI File_*.AVI__"
|
IDS_FILTER_AVI "AVI File_*.AVI__"
|
||||||
IDS_SELECT_AVI_NAME "Select AVI file name"
|
IDS_SELECT_AVI_NAME "Select AVI file name"
|
||||||
IDS_INVALID_THROTTLE_VALUE
|
IDS_INVALID_THROTTLE_VALUE
|
||||||
"Invalid throttle value. Please enter a number between 5 and 1000."
|
"Invalid throttle value. Please enter a number between 5 and 1000."
|
||||||
IDS_FILTER_INI "Skin INI File_*.INI__"
|
IDS_FILTER_INI "Skin INI File_*.INI__"
|
||||||
IDS_SELECT_SKIN_FILE "Select the skin file name"
|
IDS_SELECT_SKIN_FILE "Select the skin file name"
|
||||||
|
@ -2145,9 +2145,9 @@ BEGIN
|
||||||
IDS_END_OF_MOVIE "end of movie"
|
IDS_END_OF_MOVIE "end of movie"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
BEGIN
|
BEGIN
|
||||||
IDS_INVALID_INTERVAL_VALUE
|
IDS_INVALID_INTERVAL_VALUE
|
||||||
"Invalid rewind interval value. Please enter a number between 0 and 600 seconds."
|
"Invalid rewind interval value. Please enter a number between 0 and 600 seconds."
|
||||||
IDS_REGISTRY "VisualBoyAdvance no longer uses the registry to store its settings. Your previous settings have been exported into the file: %s"
|
IDS_REGISTRY "VisualBoyAdvance no longer uses the registry to store its settings. Your previous settings have been exported into the file: %s"
|
||||||
IDS_MOVIE_PLAY "Playing a movie will load a save state which may erase your previous battery saves. Please be sure to have a saved state if you don't want to loose any previous data."
|
IDS_MOVIE_PLAY "Playing a movie will load a save state which may erase your previous battery saves. Please be sure to have a saved state if you don't want to loose any previous data."
|
||||||
|
|
Loading…
Reference in New Issue