Partially working 32bpp blitting
This commit is contained in:
@@ -130,7 +130,6 @@ void LinuxExit(void);
|
|||||||
int Main_Proc(void)
|
int Main_Proc(void)
|
||||||
{
|
{
|
||||||
int j;
|
int j;
|
||||||
// TODO: Main event loop
|
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
Uint8 JoyButton;
|
Uint8 JoyButton;
|
||||||
//STUB_FUNCTION;
|
//STUB_FUNCTION;
|
||||||
@@ -1098,7 +1097,6 @@ void drawscreenwin(void)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 32:
|
case 32:
|
||||||
// Untested - DDOI
|
|
||||||
__asm__ __volatile__ ("
|
__asm__ __volatile__ ("
|
||||||
pushw %%es
|
pushw %%es
|
||||||
movw %%ds, %%ax
|
movw %%ds, %%ax
|
||||||
@@ -1352,9 +1350,49 @@ void drawscreenwin(void)
|
|||||||
WinVidMemStart=&SurfBuf[0];
|
WinVidMemStart=&SurfBuf[0];
|
||||||
copy640x480x16bwin();
|
copy640x480x16bwin();
|
||||||
break;
|
break;
|
||||||
|
case 32:
|
||||||
|
__asm__ __volatile__ ("
|
||||||
|
pushw %%es
|
||||||
|
movw %%ds, %%ax
|
||||||
|
movw %%ax, %%es
|
||||||
|
xorl %%eax, %%eax
|
||||||
|
movl BitConv32Ptr, %%ebx
|
||||||
|
movl ScreenPtr, %%esi
|
||||||
|
movl SurfBufD, %%edi
|
||||||
|
Copying32c:
|
||||||
|
movl $256, %%ecx
|
||||||
|
pushl %%eax
|
||||||
|
xorl %%eax, %%eax
|
||||||
|
CopyLoop32c:
|
||||||
|
movw (%%esi), %%ax
|
||||||
|
addl $2, %%esi
|
||||||
|
movl (%%ebx, %%eax, 4), %%edx
|
||||||
|
movl %%edx, (%%edi)
|
||||||
|
addl $4, %%edi
|
||||||
|
movl %%edx, (%%edi)
|
||||||
|
addl $4, %%edi
|
||||||
|
loop CopyLoop32c
|
||||||
|
pushl %%esi
|
||||||
|
movl %%edi, %%esi
|
||||||
|
subl Temp1, %%esi
|
||||||
|
movl $512, %%ecx
|
||||||
|
rep
|
||||||
|
movsl
|
||||||
|
popl %%esi
|
||||||
|
popl %%eax
|
||||||
|
incl %%eax
|
||||||
|
addl Temp1, %%edi
|
||||||
|
subl $2048, %%edi
|
||||||
|
subl $512, %%esi
|
||||||
|
addl $576, %%esi
|
||||||
|
cmpl $223, %%eax
|
||||||
|
jne Copying32c
|
||||||
|
popw %%es
|
||||||
|
" : : : "cc", "memory","eax","ebx","ecx","edx","edi","esi");
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
UnlockSurface();
|
UnlockSurface();
|
||||||
fprintf(stderr, "Mode only available in 16 bit color.\n");
|
fprintf(stderr, "Mode only available in 16 or 32 bit color.\n");
|
||||||
LinuxExit();
|
LinuxExit();
|
||||||
/*
|
/*
|
||||||
cvidmode=2;
|
cvidmode=2;
|
||||||
@@ -1375,9 +1413,52 @@ void drawscreenwin(void)
|
|||||||
WinVidMemStart=&SurfBuf[16*640*2+64*2];
|
WinVidMemStart=&SurfBuf[16*640*2+64*2];
|
||||||
copy640x480x16bwin();
|
copy640x480x16bwin();
|
||||||
break;
|
break;
|
||||||
|
case 32:
|
||||||
|
__asm__ __volatile__ ("
|
||||||
|
pushw %%es
|
||||||
|
movw %%ds, %%ax
|
||||||
|
movw %%ax, %%es
|
||||||
|
xorl %%eax, %%eax
|
||||||
|
movl BitConv32Ptr, %%ebx
|
||||||
|
movl ScreenPtr, %%esi
|
||||||
|
movl SurfBufD, %%edi
|
||||||
|
addl $20608, %%edi
|
||||||
|
Copying32d:
|
||||||
|
movl $256, %%ecx
|
||||||
|
pushl %%eax
|
||||||
|
xorl %%eax, %%eax
|
||||||
|
CopyLoop32d:
|
||||||
|
movw (%%esi), %%ax
|
||||||
|
addl $2, %%esi
|
||||||
|
movl (%%ebx, %%eax, 4), %%edx
|
||||||
|
movl %%edx, (%%edi)
|
||||||
|
addl $4, %%edi
|
||||||
|
movl %%edx, (%%edi)
|
||||||
|
addl $4, %%edi
|
||||||
|
loop CopyLoop32d
|
||||||
|
pushl %%esi
|
||||||
|
movl %%edi, %%esi
|
||||||
|
subl Temp1, %%esi
|
||||||
|
addl $256, %%edi
|
||||||
|
movl $512, %%ecx
|
||||||
|
rep
|
||||||
|
movsl
|
||||||
|
popl %%esi
|
||||||
|
popl %%eax
|
||||||
|
incl %%eax
|
||||||
|
addl Temp1, %%edi
|
||||||
|
addl $256, %%edi
|
||||||
|
subl $2048, %%edi
|
||||||
|
subl $512, %%esi
|
||||||
|
addl $576, %%esi
|
||||||
|
cmpl $223, %%eax
|
||||||
|
jne Copying32d
|
||||||
|
popw %%es
|
||||||
|
" : : : "cc", "memory","eax","ebx","ecx","edx","edi","esi");
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
UnlockSurface();
|
UnlockSurface();
|
||||||
fprintf(stderr, "Mode only available in 16 bit color.\n");
|
fprintf(stderr, "Mode only available in 16 or 32 bit color.\n");
|
||||||
LinuxExit();
|
LinuxExit();
|
||||||
/*
|
/*
|
||||||
cvidmode=2;
|
cvidmode=2;
|
||||||
|
|||||||
Reference in New Issue
Block a user