Partially working 32bpp blitting

This commit is contained in:
theoddone33
2001-05-01 22:28:23 +00:00
parent e250c3d57f
commit dd847eb513

View File

@@ -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;