Keys now map correctly
This commit is contained in:
@@ -136,10 +136,10 @@ _int64 start, end, freq, update_ticks_pc, start2, end2, update_ticks_pc2;
|
||||
|
||||
extern unsigned char pressed[];
|
||||
|
||||
void drawscreenwin(void);
|
||||
void Init_2xSaI(UINT32 BitFormat);
|
||||
DWORD LastUsedPos=0;
|
||||
DWORD CurMode=-1;
|
||||
void drawscreenwin(void);
|
||||
void Init_2xSaI(UINT32 BitFormat);
|
||||
DWORD LastUsedPos=0;
|
||||
DWORD CurMode=-1;
|
||||
|
||||
DWORD InputEn=0;
|
||||
BOOL InputAcquire(void)
|
||||
@@ -207,17 +207,14 @@ int Main_Proc(void)
|
||||
switch(event.type)
|
||||
{
|
||||
case SDL_KEYDOWN:
|
||||
if(event.key.keysym.sym == SDLK_ESCAPE)
|
||||
{
|
||||
SDL_Quit();
|
||||
exit(0);
|
||||
} else {
|
||||
if (pressed[event.key.keysym.sym]!=2)
|
||||
pressed[event.key.keysym.sym]=1;
|
||||
}
|
||||
if (event.key.keysym.scancode-8 > 0) {
|
||||
if (pressed[event.key.keysym.scancode-8]!=2)
|
||||
pressed[event.key.keysym.scancode-8]=1;
|
||||
}
|
||||
break;
|
||||
case SDL_KEYUP:
|
||||
pressed[event.key.keysym.sym]=0;
|
||||
if (event.key.keysym.scancode-8 > 0)
|
||||
pressed[event.key.keysym.scancode-8]=0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1775,19 +1772,19 @@ void clearwin()
|
||||
DWORD i,j,color32;
|
||||
DWORD *SURFDW;
|
||||
|
||||
#ifdef __LINUX__
|
||||
Temp1=LockSurface();
|
||||
if(Temp1==0) { return; }
|
||||
STUB_FUNCTION;
|
||||
|
||||
SurfBufD=(DWORD) &SurfBuf[0];
|
||||
SURFDW=(DWORD *) &SurfBuf[0];
|
||||
switch(BitDepth)
|
||||
{
|
||||
case 16:
|
||||
/*
|
||||
// TODO - This code crashes zsnes - DDOI
|
||||
STUB_FUNCTION;
|
||||
/*
|
||||
__asm__ __volatile__ ("
|
||||
pushl %%es
|
||||
pushw %%es
|
||||
movw %%ds, %%ax
|
||||
movw %%ax, %%es
|
||||
xorl %%eax, %%eax
|
||||
@@ -1796,17 +1793,21 @@ void clearwin()
|
||||
Blank2:
|
||||
xorl %%eax, %%eax
|
||||
movl SurfaceX, %%ecx
|
||||
rep stosw
|
||||
rep
|
||||
stosw
|
||||
addl Temp1, %%edi
|
||||
subl SurfaceX, %%edi
|
||||
subl SurfaceX, %%edi
|
||||
addl $1, %%ebx
|
||||
cmpl SurfaceX, %%ebx
|
||||
jne Blank2
|
||||
popw %%es
|
||||
" : : : "cc", "memory", "eax", "ebx", "ecx","edi", "esi");
|
||||
*/
|
||||
break;
|
||||
*/
|
||||
case 32:
|
||||
// TODO - intel2gas this - DDOI
|
||||
STUB_FUNCTION;
|
||||
/*
|
||||
_asm {
|
||||
push es
|
||||
@@ -1832,60 +1833,6 @@ void clearwin()
|
||||
break;
|
||||
}
|
||||
UnlockSurface();
|
||||
#else
|
||||
Temp1=LockSurface();
|
||||
if(Temp1==0) { return; }
|
||||
|
||||
SurfBufD=(DWORD) &SurfBuf[0];
|
||||
SURFDW=(DWORD *) &SurfBuf[0];
|
||||
|
||||
switch(BitDepth)
|
||||
{
|
||||
case 16:
|
||||
_asm {
|
||||
push es
|
||||
mov ax,ds
|
||||
mov es,ax
|
||||
xor eax,eax
|
||||
mov edi,SurfBufD
|
||||
xor ebx,ebx
|
||||
Blank2:
|
||||
xor eax,eax
|
||||
mov ecx,SurfaceX
|
||||
rep stosw
|
||||
add edi,Temp1
|
||||
sub edi,SurfaceX
|
||||
sub edi,SurfaceX
|
||||
add ebx,1
|
||||
cmp ebx,SurfaceY
|
||||
jne Blank2
|
||||
}
|
||||
break;
|
||||
case 32:
|
||||
_asm {
|
||||
push es
|
||||
mov ax,ds
|
||||
mov es,ax
|
||||
xor eax,eax
|
||||
mov edi,SurfBufD
|
||||
xor ebx,ebx
|
||||
Blank3:
|
||||
xor eax,eax
|
||||
mov ecx,SurfaceX
|
||||
rep stosd
|
||||
add edi,Temp1
|
||||
sub edi,SurfaceX
|
||||
sub edi,SurfaceX
|
||||
sub edi,SurfaceX
|
||||
sub edi,SurfaceX
|
||||
add ebx,1
|
||||
cmp ebx,SurfaceY
|
||||
jne Blank3
|
||||
}
|
||||
break;
|
||||
}
|
||||
UnlockSurface();
|
||||
#endif
|
||||
}
|
||||
|
||||
void drawscreenwin(void)
|
||||
@@ -1900,8 +1847,6 @@ void drawscreenwin(void)
|
||||
// the value of newengen is equal to 1.
|
||||
// (see ProcessTransparencies in newgfx16.asm
|
||||
// for ZSNES' current transparency code)
|
||||
#ifdef __LINUX__
|
||||
//STUB_FUNCTION;
|
||||
UpdateVFrame();
|
||||
if(curblank!=0) return;
|
||||
|
||||
@@ -2050,10 +1995,113 @@ void drawscreenwin(void)
|
||||
switch(BitDepth)
|
||||
{
|
||||
case 16:
|
||||
// TODO - convert this assembly - DDOI
|
||||
if (FPUCopy) {
|
||||
STUB_FUNCTION;
|
||||
/*
|
||||
_asm {
|
||||
push es
|
||||
mov ax,ds
|
||||
mov es,ax
|
||||
xor eax,eax
|
||||
xor ebx,ebx
|
||||
mov esi,ScreenPtr
|
||||
mov edi,SurfBufD
|
||||
Blank1MMX:
|
||||
xor eax,eax
|
||||
mov ecx,160
|
||||
rep stosd
|
||||
sub edi,640
|
||||
add edi,Temp1
|
||||
add ebx,1
|
||||
cmp ebx,8
|
||||
jne Blank1MMX
|
||||
xor ebx,ebx
|
||||
pxor mm0,mm0
|
||||
Copying2MMX:
|
||||
mov ecx,4
|
||||
MMXLoopA:
|
||||
movq [edi],mm0
|
||||
movq [edi+8],mm0
|
||||
add edi,16
|
||||
dec ecx
|
||||
jnz MMXLoopA
|
||||
mov ecx,32
|
||||
MMXLoopB:
|
||||
movq mm1,[esi]
|
||||
movq mm2,[esi+8]
|
||||
movq [edi],mm1
|
||||
movq [edi+8],mm2
|
||||
add esi,16
|
||||
add edi,16
|
||||
dec ecx
|
||||
jnz MMXLoopB
|
||||
mov ecx,4
|
||||
MMXLoopC:
|
||||
movq [edi],mm0
|
||||
movq [edi+8],mm0
|
||||
add edi,16
|
||||
dec ecx
|
||||
jnz MMXLoopC
|
||||
inc ebx
|
||||
add edi,Temp1
|
||||
sub edi,640
|
||||
sub esi,512
|
||||
add esi,576
|
||||
cmp ebx,223
|
||||
jne Copying2MMX
|
||||
|
||||
xor eax,eax
|
||||
mov ecx,128
|
||||
rep stosd
|
||||
pop es
|
||||
emms
|
||||
}
|
||||
*/
|
||||
} else {
|
||||
STUB_FUNCTION;
|
||||
/*
|
||||
_asm {
|
||||
push es
|
||||
mov ax,ds
|
||||
mov es,ax
|
||||
xor eax,eax
|
||||
xor ebx,ebx
|
||||
mov esi,ScreenPtr
|
||||
mov edi,SurfBufD
|
||||
Blank1:
|
||||
xor eax,eax
|
||||
mov ecx,160
|
||||
rep stosd
|
||||
sub edi,640
|
||||
add edi,Temp1
|
||||
add ebx,1
|
||||
cmp ebx,8
|
||||
jne Blank1
|
||||
xor ebx,ebx
|
||||
Copying2:
|
||||
xor eax,eax
|
||||
mov ecx,16
|
||||
rep stosd
|
||||
mov ecx,128
|
||||
rep movsd
|
||||
xor eax,eax
|
||||
mov ecx,16
|
||||
rep stosd
|
||||
inc ebx
|
||||
add edi,Temp1
|
||||
sub edi,640
|
||||
sub esi,512
|
||||
add esi,576
|
||||
cmp ebx,223
|
||||
jne Copying2
|
||||
|
||||
xor eax,eax
|
||||
mov ecx,128
|
||||
rep stosd
|
||||
pop es
|
||||
}
|
||||
*/
|
||||
}
|
||||
break;
|
||||
case 32:
|
||||
@@ -2159,392 +2207,6 @@ void drawscreenwin(void)
|
||||
}
|
||||
|
||||
UnlockSurface();
|
||||
#else
|
||||
UpdateVFrame();
|
||||
if(curblank!=0) return;
|
||||
|
||||
Temp1=LockSurface();
|
||||
if(Temp1==0) { return; }
|
||||
|
||||
ScreenPtr=vidbuffer;
|
||||
ScreenPtr+=16*2+32*2+256*2;
|
||||
SurfBufD=(DWORD) &SurfBuf[0];
|
||||
SURFDW=(DWORD *) &SurfBuf[0];
|
||||
if(SurfaceX==256&&SurfaceY==224)
|
||||
{
|
||||
switch(BitDepth)
|
||||
{
|
||||
case 16:
|
||||
if (FPUCopy){
|
||||
_asm {
|
||||
push es
|
||||
mov ax,ds
|
||||
mov es,ax
|
||||
xor eax,eax
|
||||
mov esi,ScreenPtr
|
||||
mov edi,SurfBufD
|
||||
Copying3:
|
||||
mov ecx,32
|
||||
CopyLoop:
|
||||
movq mm0,[esi]
|
||||
movq mm1,[esi+8]
|
||||
movq [edi],mm0
|
||||
movq [edi+8],mm1
|
||||
add esi,16
|
||||
add edi,16
|
||||
dec ecx
|
||||
jnz CopyLoop
|
||||
inc eax
|
||||
add edi,Temp1
|
||||
sub edi,512
|
||||
sub esi,512
|
||||
add esi,576
|
||||
cmp eax,223
|
||||
jne Copying3
|
||||
|
||||
xor eax,eax
|
||||
mov ecx,128
|
||||
rep stosd
|
||||
pop es
|
||||
emms
|
||||
}
|
||||
} else {
|
||||
_asm {
|
||||
push es
|
||||
mov ax,ds
|
||||
mov es,ax
|
||||
xor eax,eax
|
||||
mov esi,ScreenPtr
|
||||
mov edi,SurfBufD
|
||||
Copying:
|
||||
mov ecx,128
|
||||
rep movsd
|
||||
inc eax
|
||||
add edi,Temp1
|
||||
sub edi,512
|
||||
sub esi,512
|
||||
add esi,576
|
||||
cmp eax,223
|
||||
jne Copying
|
||||
|
||||
xor eax,eax
|
||||
mov ecx,128
|
||||
rep stosd
|
||||
pop es
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 32:
|
||||
_asm {
|
||||
push es
|
||||
mov ax,ds
|
||||
mov es,ax
|
||||
xor eax,eax
|
||||
mov ebx,BitConv32Ptr
|
||||
mov esi,ScreenPtr
|
||||
mov edi,SurfBufD
|
||||
Copying32b:
|
||||
mov ecx,256
|
||||
push eax
|
||||
xor eax,eax
|
||||
CopyLoop32b:
|
||||
mov ax,[esi]
|
||||
add esi,2
|
||||
mov edx,[ebx+eax*4]
|
||||
mov [edi],edx
|
||||
add edi,4
|
||||
loop CopyLoop32b
|
||||
pop eax
|
||||
inc eax
|
||||
add edi,Temp1
|
||||
sub edi,1024
|
||||
sub esi,512
|
||||
add esi,576
|
||||
cmp eax,223
|
||||
jne Copying32b
|
||||
pop es
|
||||
}
|
||||
|
||||
|
||||
/* for(j=0;j<223;j++)
|
||||
{
|
||||
for(i=0;i<256;i++)
|
||||
{
|
||||
color32=(((*(WORD *)(ScreenPtr))&0xF800)<<8)+
|
||||
(((*(WORD *)(ScreenPtr))&0x07E0)<<5)+
|
||||
(((*(WORD *)(ScreenPtr))&0x001F)<<3)+0x7F000000;
|
||||
SURFDW[i]=color32;
|
||||
ScreenPtr+=2;
|
||||
}
|
||||
ScreenPtr=ScreenPtr+576-512;
|
||||
SURFDW=(DWORD *) &SurfBuf[j*Temp1];
|
||||
} */
|
||||
|
||||
SURFDW=(DWORD *) &SurfBuf[222*Temp1];
|
||||
color32=0x7F000000;
|
||||
|
||||
for(i=0;i<256;i++)
|
||||
{
|
||||
SURFDW[i]=color32;
|
||||
}
|
||||
|
||||
SURFDW=(DWORD *) &SurfBuf[223*Temp1];
|
||||
color32=0x7F000000;
|
||||
|
||||
for(i=0;i<256;i++)
|
||||
{
|
||||
SURFDW[i]=color32;
|
||||
}
|
||||
break;
|
||||
case 24:
|
||||
MessageBox (NULL, "Sorry. ZSNESw does not work in windowed 24 bit
|
||||
color modes. \nClick 'OK' to switch to a full screen mode.", "DDRAW Error" ,
|
||||
MB_ICONERROR );
|
||||
cvidmode=3;
|
||||
initwinvideo();
|
||||
Sleep(1000);
|
||||
drawscreenwin();
|
||||
break;
|
||||
default:
|
||||
UnlockSurface();
|
||||
MessageBox (NULL, "Mode only available in 16 and 32 bit color",
|
||||
"DDRAW Error" , MB_ICONERROR );
|
||||
cvidmode=2;
|
||||
initwinvideo();
|
||||
Sleep(1000);
|
||||
drawscreenwin();
|
||||
// exit(0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(SurfaceX==320&&SurfaceY==240)
|
||||
{
|
||||
switch(BitDepth)
|
||||
{
|
||||
case 16:
|
||||
if (FPUCopy){
|
||||
_asm {
|
||||
push es
|
||||
mov ax,ds
|
||||
mov es,ax
|
||||
xor eax,eax
|
||||
xor ebx,ebx
|
||||
mov esi,ScreenPtr
|
||||
mov edi,SurfBufD
|
||||
Blank1MMX:
|
||||
xor eax,eax
|
||||
mov ecx,160
|
||||
rep stosd
|
||||
sub edi,640
|
||||
add edi,Temp1
|
||||
add ebx,1
|
||||
cmp ebx,8
|
||||
jne Blank1MMX
|
||||
xor ebx,ebx
|
||||
pxor mm0,mm0
|
||||
Copying2MMX:
|
||||
mov ecx,4
|
||||
MMXLoopA:
|
||||
movq [edi],mm0
|
||||
movq [edi+8],mm0
|
||||
add edi,16
|
||||
dec ecx
|
||||
jnz MMXLoopA
|
||||
mov ecx,32
|
||||
MMXLoopB:
|
||||
movq mm1,[esi]
|
||||
movq mm2,[esi+8]
|
||||
movq [edi],mm1
|
||||
movq [edi+8],mm2
|
||||
add esi,16
|
||||
add edi,16
|
||||
dec ecx
|
||||
jnz MMXLoopB
|
||||
mov ecx,4
|
||||
MMXLoopC:
|
||||
movq [edi],mm0
|
||||
movq [edi+8],mm0
|
||||
add edi,16
|
||||
dec ecx
|
||||
jnz MMXLoopC
|
||||
inc ebx
|
||||
add edi,Temp1
|
||||
sub edi,640
|
||||
sub esi,512
|
||||
add esi,576
|
||||
cmp ebx,223
|
||||
jne Copying2MMX
|
||||
|
||||
xor eax,eax
|
||||
mov ecx,128
|
||||
rep stosd
|
||||
pop es
|
||||
emms
|
||||
}
|
||||
} else {
|
||||
_asm {
|
||||
push es
|
||||
mov ax,ds
|
||||
mov es,ax
|
||||
xor eax,eax
|
||||
xor ebx,ebx
|
||||
mov esi,ScreenPtr
|
||||
mov edi,SurfBufD
|
||||
Blank1:
|
||||
xor eax,eax
|
||||
mov ecx,160
|
||||
rep stosd
|
||||
sub edi,640
|
||||
add edi,Temp1
|
||||
add ebx,1
|
||||
cmp ebx,8
|
||||
jne Blank1
|
||||
xor ebx,ebx
|
||||
Copying2:
|
||||
xor eax,eax
|
||||
mov ecx,16
|
||||
rep stosd
|
||||
mov ecx,128
|
||||
rep movsd
|
||||
xor eax,eax
|
||||
mov ecx,16
|
||||
rep stosd
|
||||
inc ebx
|
||||
add edi,Temp1
|
||||
sub edi,640
|
||||
sub esi,512
|
||||
add esi,576
|
||||
cmp ebx,223
|
||||
jne Copying2
|
||||
|
||||
xor eax,eax
|
||||
mov ecx,128
|
||||
rep stosd
|
||||
pop es
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 32:
|
||||
for(j=0;j<8;j++)
|
||||
{
|
||||
SURFDW=(DWORD *) &SurfBuf[j*Temp1];
|
||||
color32=0x7F000000;
|
||||
|
||||
for(i=0;i<320;i++)
|
||||
{
|
||||
SURFDW[i]=color32;
|
||||
}
|
||||
}
|
||||
|
||||
for(j=8;j<223+8;j++)
|
||||
{
|
||||
color32=0x7F000000;
|
||||
for(i=0;i<32;i++)
|
||||
{
|
||||
SURFDW[i]=color32;
|
||||
}
|
||||
|
||||
for(i=32;i<(256+32);i++)
|
||||
{
|
||||
color32=(((*(WORD *)(ScreenPtr))&0xF800)<<8)+
|
||||
(((*(WORD *)(ScreenPtr))&0x07E0)<<5)+
|
||||
(((*(WORD *)(ScreenPtr))&0x001F)<<3)+0x7F000000;
|
||||
// SURFDW[i]=color32;
|
||||
ScreenPtr+=2;
|
||||
}
|
||||
|
||||
color32=0x7F000000;
|
||||
for(i=(256+32);i<320;i++)
|
||||
{
|
||||
SURFDW[i]=color32;
|
||||
}
|
||||
|
||||
ScreenPtr=ScreenPtr+576-512;
|
||||
SURFDW=(DWORD *) &SurfBuf[(j)*Temp1];
|
||||
}
|
||||
|
||||
for(j=(223+8);j<240;j++)
|
||||
{
|
||||
SURFDW=(DWORD *) &SurfBuf[j*Temp1];
|
||||
|
||||
color32=0x7F000000;
|
||||
for(i=0;i<320;i++)
|
||||
{
|
||||
SURFDW[i]=color32;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
UnlockSurface();
|
||||
MessageBox (NULL, "Mode only available in 16 and 32 bit color",
|
||||
"DDRAW Error" , MB_ICONERROR );
|
||||
cvidmode=2;
|
||||
initwinvideo();
|
||||
Sleep(1000);
|
||||
drawscreenwin();
|
||||
// exit(0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(SurfaceX==512&&SurfaceY==448)
|
||||
{
|
||||
switch(BitDepth)
|
||||
{
|
||||
case 16:
|
||||
AddEndBytes=Temp1-1024;
|
||||
NumBytesPerLine=Temp1;
|
||||
WinVidMemStart=&SurfBuf[0];
|
||||
_asm
|
||||
{
|
||||
pushad
|
||||
call copy640x480x16bwin
|
||||
popad
|
||||
}
|
||||
break;
|
||||
default:
|
||||
UnlockSurface();
|
||||
MessageBox (NULL, "Mode only available in 16 bit color", "DDRAW
|
||||
Error" , MB_ICONERROR );
|
||||
cvidmode=2;
|
||||
initwinvideo();
|
||||
Sleep(1000);
|
||||
drawscreenwin();
|
||||
// exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
if(SurfaceX==640&&SurfaceY==480)
|
||||
{
|
||||
switch(BitDepth)
|
||||
{
|
||||
case 16:
|
||||
AddEndBytes=Temp1-1024;
|
||||
NumBytesPerLine=Temp1;
|
||||
WinVidMemStart=&SurfBuf[16*640*2+64*2];
|
||||
_asm
|
||||
{
|
||||
pushad
|
||||
call copy640x480x16bwin
|
||||
popad
|
||||
}
|
||||
break;
|
||||
default:
|
||||
UnlockSurface();
|
||||
MessageBox (NULL, "Mode only available in 16 bit color", "DDRAW
|
||||
Error" , MB_ICONERROR );
|
||||
cvidmode=2;
|
||||
initwinvideo();
|
||||
Sleep(1000);
|
||||
drawscreenwin();
|
||||
// exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
UnlockSurface();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user