From c8e54760f2c6b7004c692c2143bb226f1c171bb7 Mon Sep 17 00:00:00 2001 From: pagefault <> Date: Sun, 23 Feb 2003 03:27:58 +0000 Subject: [PATCH] Started moving out some ASM video code out of C files --- zsnes/src/link.win32 | 2 +- zsnes/src/makefile.win | 2 +- zsnes/src/video/sw_draw.asm | 24 +++++++++- zsnes/src/win/winlink.cpp | 91 ++++++++++++------------------------- 4 files changed, 53 insertions(+), 66 deletions(-) diff --git a/zsnes/src/link.win32 b/zsnes/src/link.win32 index 5cfdf7f1..f760df00 100644 --- a/zsnes/src/link.win32 +++ b/zsnes/src/link.win32 @@ -1 +1 @@ -/Fezsnesw.exe chips\dsp1proc.obj dos\sw.obj dos\gppro.obj dos\vesa12.obj dos\zsipx.obj dos\modemrtn.obj dos\joy.obj dos\debug.obj dos\vesa2.obj dos\initvid.obj cfgload.obj endmem.obj fixsin.obj init.obj ui.obj vcache.obj water.obj smoke.obj video\procvid.obj win\copyvwin.obj win\winintrf.obj win\winlink.obj win\zloaderw.obj win\ztcp.obj win\zfilew.obj win\zipxw.obj video\makev16b.obj video\makev16t.obj video\makevid.obj video\mode716.obj video\mode716b.obj video\mode716d.obj video\mode716e.obj video\mode716t.obj video\mode7.obj video\mode7ext.obj video\mv16tms.obj video\newg162.obj video\newgfx16.obj video\newgfx2.obj video\newgfx.obj video\m716text.obj video\2xsaiw.obj gui\gui.obj gui\menu.obj cpu\addrni.obj cpu\dma.obj cpu\dsp.obj cpu\dspproc.obj cpu\execute.obj cpu\irq.obj cpu\memory.obj cpu\spc700.obj cpu\stable.obj cpu\table.obj cpu\tableb.obj cpu\tablec.obj chips\dsp1emu.obj chips\fxemu2.obj chips\fxemu2b.obj chips\fxemu2c.obj chips\fxtable.obj chips\sa1proc.obj chips\sa1regs.obj chips\sfxproc.obj zip\unzip.obj zip\zzip.obj zip\zpng.obj zlib.lib libpng.lib wsock32.lib user32.lib gdi32.lib shell32.lib winmm.lib ddraw.lib dsound.lib dinput8.lib d3dx.lib /link /section:.text,erw +/Fezsnesw.exe chips\dsp1proc.obj dos\sw.obj dos\gppro.obj dos\vesa12.obj dos\zsipx.obj dos\modemrtn.obj dos\joy.obj dos\debug.obj dos\vesa2.obj dos\initvid.obj cfgload.obj endmem.obj fixsin.obj init.obj ui.obj vcache.obj water.obj smoke.obj video\procvid.obj win\copyvwin.obj win\winintrf.obj win\winlink.obj win\zloaderw.obj win\ztcp.obj win\zfilew.obj win\zipxw.obj video\makev16b.obj video\makev16t.obj video\makevid.obj video\mode716.obj video\mode716b.obj video\mode716d.obj video\mode716e.obj video\mode716t.obj video\mode7.obj video\mode7ext.obj video\mv16tms.obj video\newg162.obj video\newgfx16.obj video\newgfx2.obj video\newgfx.obj video\m716text.obj video\2xsaiw.obj video\sw_draw.obj gui\gui.obj gui\menu.obj cpu\addrni.obj cpu\dma.obj cpu\dsp.obj cpu\dspproc.obj cpu\execute.obj cpu\irq.obj cpu\memory.obj cpu\spc700.obj cpu\stable.obj cpu\table.obj cpu\tableb.obj cpu\tablec.obj chips\dsp1emu.obj chips\fxemu2.obj chips\fxemu2b.obj chips\fxemu2c.obj chips\fxtable.obj chips\sa1proc.obj chips\sa1regs.obj chips\sfxproc.obj zip\unzip.obj zip\zzip.obj zip\zpng.obj zlib.lib libpng.lib wsock32.lib user32.lib gdi32.lib shell32.lib winmm.lib ddraw.lib dsound.lib dinput8.lib d3dx.lib /link /section:.text,erw diff --git a/zsnes/src/makefile.win b/zsnes/src/makefile.win index fb49d8dc..c865a095 100644 --- a/zsnes/src/makefile.win +++ b/zsnes/src/makefile.win @@ -49,7 +49,7 @@ VIDEOBJ=${VIDEODIR}/makev16b.obj ${VIDEODIR}/makev16t.obj ${VIDEODIR}/makevid.ob ${VIDEODIR}/mode7ext.obj ${VIDEODIR}/mv16tms.obj ${VIDEODIR}/newg162.obj\ ${VIDEODIR}/newgfx16.obj ${VIDEODIR}/newgfx2.obj ${VIDEODIR}/newgfx.obj\ ${VIDEODIR}/m716text.obj ${VIDEODIR}/2xsaiw.obj\ - ${VIDEODIR}/procvid.obj + ${VIDEODIR}/procvid.obj ${VIDEODIR}/sw_draw.obj WINOBJ=${WINDIR}/copyvwin.obj ${WINDIR}/winintrf.obj ${WINDIR}/winlink.obj\ ${WINDIR}/zloaderw.obj ${WINDIR}/ztcp.obj ${WINDIR}/zipxw.obj\ diff --git a/zsnes/src/video/sw_draw.asm b/zsnes/src/video/sw_draw.asm index 606bf7e1..04c6b751 100644 --- a/zsnes/src/video/sw_draw.asm +++ b/zsnes/src/video/sw_draw.asm @@ -23,7 +23,7 @@ ALIGN 32 EXTSYM SurfaceX,SurfaceY EXTSYM ScreenPtr,SurfBufD -EXTSYM pitch, MMXSupport +EXTSYM pitch,MMXSupport SECTION .text @@ -45,6 +45,28 @@ NEWSYM ClearWin16 popad ret +NEWSYM ClearWin32 + 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, [pitch] + sub edi, [SurfaceX] + sub edi, [SurfaceX] + sub edi, [SurfaceX] + sub edi, [SurfaceX] + add ebx,1 + cmp ebx, [SurfaceY] + jne .Blank3 + pop es + ret + NEWSYM DrawWin256x224x16 pushad mov esi, [ScreenPtr] diff --git a/zsnes/src/win/winlink.cpp b/zsnes/src/win/winlink.cpp index 252a18f8..3f343c9b 100644 --- a/zsnes/src/win/winlink.cpp +++ b/zsnes/src/win/winlink.cpp @@ -120,16 +120,17 @@ int MouseMove2X; int MouseMove2Y; BYTE MouseButtonPressed; -DWORD SurfaceX=0; -DWORD SurfaceY=0; - BYTE IsActivated=1; + BYTE AltTimer=0; WORD PrevRes=0; RECT BlitArea; extern "C" { DWORD MouseButton; +DWORD SurfaceX=0; +DWORD SurfaceY=0; + } static char dinput8_dll[] = {"dinput8.dll\0"}; @@ -1409,7 +1410,7 @@ unsigned char Noise[]={ 27,232,234,138,187,246,176,81,25,241,1,127,154,190,195,1 157,205,27,21,107,63,85,164}; int X, Y; - DWORD Temp1; + DWORD pitch; MSG msg; DWORD SurfBufD; int count, x,count2; @@ -2015,14 +2016,16 @@ extern unsigned char * WinVidMemStart; extern void copy640x480x16bwin(void); extern unsigned char NGNoTransp; extern unsigned char newengen; +extern void ClearWin16(); +extern void ClearWin32(); void clearwin() { DWORD i,j,color32; DWORD *SURFDW; - Temp1=LockSurface(); - if (Temp1==0) { return; } + pitch=LockSurface(); + if (pitch==0) { return; } SurfBufD=(DWORD) &SurfBuf[0]; SURFDW=(DWORD *) &SurfBuf[0]; @@ -2030,48 +2033,10 @@ void clearwin() 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 - pop es // BUGFIX - } + ClearWin16(); 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 - pop es // BUGFIX - } + ClearWin32(); break; } UnlockSurface(); @@ -2093,7 +2058,7 @@ void drawscreenwin(void) UpdateVFrame(); if (curblank!=0) return; - if (!(Temp1 = LockSurface())) + if (!(pitch = LockSurface())) { DD_Primary->Restore(); DD_CFB->Restore(); @@ -2151,7 +2116,7 @@ void drawscreenwin(void) dec ecx jnz CopyLoop inc eax - add edi,Temp1 + add edi,pitch sub edi,512 sub esi,512 add esi,576 @@ -2177,7 +2142,7 @@ void drawscreenwin(void) mov ecx,128 rep movsd inc eax - add edi,Temp1 + add edi,pitch sub edi,512 sub esi,512 add esi,576 @@ -2213,7 +2178,7 @@ void drawscreenwin(void) jnz CopyLoop32b pop eax inc eax - add edi,Temp1 + add edi,pitch sub edi,1024 sub esi,512 add esi,576 @@ -2222,7 +2187,7 @@ void drawscreenwin(void) pop es } - SURFDW=(DWORD *) &SurfBuf[(resolutn-1)*Temp1]; + SURFDW=(DWORD *) &SurfBuf[(resolutn-1)*pitch]; color32=0x7F000000; for(i=0;i<256;i++) @@ -2230,7 +2195,7 @@ void drawscreenwin(void) SURFDW[i]=color32; } - SURFDW=(DWORD *) &SurfBuf[resolutn*Temp1]; + SURFDW=(DWORD *) &SurfBuf[resolutn*pitch]; color32=0x7F000000; for(i=0;i<256;i++) @@ -2277,7 +2242,7 @@ void drawscreenwin(void) mov ecx,160 rep stosd sub edi,640 - add edi,Temp1 + add edi,pitch add ebx,1 cmp ebx,8 jne Blank1MMX @@ -2309,7 +2274,7 @@ void drawscreenwin(void) dec ecx jnz MMXLoopC inc ebx - add edi,Temp1 + add edi,pitch sub edi,640 sub esi,512 add esi,576 @@ -2337,7 +2302,7 @@ void drawscreenwin(void) mov ecx,160 rep stosd sub edi,640 - add edi,Temp1 + add edi,pitch add ebx,1 cmp ebx,8 jne Blank1 @@ -2352,7 +2317,7 @@ void drawscreenwin(void) mov ecx,16 rep stosd inc ebx - add edi,Temp1 + add edi,pitch sub edi,640 sub esi,512 add esi,576 @@ -2368,7 +2333,7 @@ void drawscreenwin(void) case 32: for(j=0;j<8;j++) { - SURFDW=(DWORD *) &SurfBuf[j*Temp1]; + SURFDW=(DWORD *) &SurfBuf[j*pitch]; color32=0x7F000000; for(i=0;i<320;i++) @@ -2401,12 +2366,12 @@ void drawscreenwin(void) } ScreenPtr=ScreenPtr+576-512; - SURFDW=(DWORD *) &SurfBuf[(j)*Temp1]; + SURFDW=(DWORD *) &SurfBuf[(j)*pitch]; } for(j=((resolutn-1)+8);j<240;j++) { - SURFDW=(DWORD *) &SurfBuf[j*Temp1]; + SURFDW=(DWORD *) &SurfBuf[j*pitch]; color32=0x7F000000; for(i=0;i<320;i++) @@ -2431,8 +2396,8 @@ void drawscreenwin(void) switch (BitDepth) { case 16: - AddEndBytes=Temp1-1024; - NumBytesPerLine=Temp1; + AddEndBytes=pitch-1024; + NumBytesPerLine=pitch; WinVidMemStart=&SurfBuf[0]; _asm { @@ -2456,8 +2421,8 @@ void drawscreenwin(void) switch (BitDepth) { case 16: - AddEndBytes=Temp1-1024; - NumBytesPerLine=Temp1; + AddEndBytes=pitch-1024; + NumBytesPerLine=pitch; WinVidMemStart=&SurfBuf[16*640*2+64*2]; _asm {