Added MaxSt's HQ3X filter

This commit is contained in:
pagefault
2003-07-16 21:10:05 +00:00
parent e36ddb574a
commit 0ff6b8a6ac
12 changed files with 5486 additions and 120 deletions

View File

@@ -26,7 +26,7 @@ ZIPDIR=zip
CHIPSOBJ=${CHIPDIR}/sfxproc.o ${CHIPDIR}/fxemu2.o ${CHIPDIR}/dsp1proc.o\ CHIPSOBJ=${CHIPDIR}/sfxproc.o ${CHIPDIR}/fxemu2.o ${CHIPDIR}/dsp1proc.o\
${CHIPDIR}/fxemu2b.o ${CHIPDIR}/fxemu2c.o ${CHIPDIR}/fxtable.o\ ${CHIPDIR}/fxemu2b.o ${CHIPDIR}/fxemu2c.o ${CHIPDIR}/fxtable.o\
${CHIPDIR}/sa1proc.o ${CHIPDIR}/sa1regs.o ${CHIPDIR}/dsp1emu.o ${CHIPDIR}/sa1proc.o ${CHIPDIR}/sa1regs.o $CHIPDIR}/dsp1emu.o
CPUOBJ=${CPUDIR}/addrni.o ${CPUDIR}/dma.o ${CPUDIR}/dsp.o ${CPUDIR}/dspproc.o\ CPUOBJ=${CPUDIR}/addrni.o ${CPUDIR}/dma.o ${CPUDIR}/dsp.o ${CPUDIR}/dspproc.o\
${CPUDIR}/execute.o ${CPUDIR}/irq.o ${CPUDIR}/memory.o \ ${CPUDIR}/execute.o ${CPUDIR}/irq.o ${CPUDIR}/memory.o \
@@ -41,9 +41,11 @@ VIDEOBJ=${VIDEODIR}/makev16b.o ${VIDEODIR}/makev16t.o ${VIDEODIR}/makevid.o\
${VIDEODIR}/mode7ext.o ${VIDEODIR}/mv16tms.o ${VIDEODIR}/newg162.o\ ${VIDEODIR}/mode7ext.o ${VIDEODIR}/mv16tms.o ${VIDEODIR}/newg162.o\
${VIDEODIR}/newgfx16.o ${VIDEODIR}/newgfx2.o ${VIDEODIR}/newgfx.o\ ${VIDEODIR}/newgfx16.o ${VIDEODIR}/newgfx2.o ${VIDEODIR}/newgfx.o\
${VIDEODIR}/m716text.o ${VIDEODIR}/2xsaiw.o\ ${VIDEODIR}/m716text.o ${VIDEODIR}/2xsaiw.o\
${VIDEODIR}/procvid.o ${VIDEODIR}/sw_draw.o ${VIDEODIR}/procvid.o ${VIDEODIR}/sw_draw.o\
$${VIDEODIR}/hq3x16.o ${VIDEODIR}/hq3x32.o
WINOBJ=${WINDIR}/copyvwin.o ${WINDIR}/sdlintrf.o ${WINDIR}/sdllink.o \ WINOBJ=${WINDIR}/copyvwin.o \
${WINDIR}/sdlintrf.o ${WINDIR}/sdllink.o \
@GL_DRAW@ ${WINDIR}/sw_draw.o \ @GL_DRAW@ ${WINDIR}/sw_draw.o \
${WINDIR}/zloaderw.o ${WINDIR}/ztcp.o ${WINDIR}/zipxw.o \ ${WINDIR}/zloaderw.o ${WINDIR}/ztcp.o ${WINDIR}/zipxw.o \
${WINDIR}/zfilew.o ${WINDIR}/protect.o ${WINDIR}/zfilew.o ${WINDIR}/protect.o
@@ -80,6 +82,9 @@ water.o: water.c
smoke.o: smoke.c smoke.o: smoke.c
burn.o: burn.c burn.o: burn.c
${VIDEODIR}/procvid.o: ${VIDEODIR}/procvid.asm macros.mac ${VIDEODIR}/copyvid.inc ${VIDEODIR}/2xsaimmx.inc ${VIDEODIR}/procvid.o: ${VIDEODIR}/procvid.asm macros.mac ${VIDEODIR}/copyvid.inc ${VIDEODIR}/2xsaimmx.inc
${VIDEODIR}/sw_draw.obj: ${VIDEODIR}/sw_draw.asm macros.mac
${VIDEODIR}/hq3x16.obj: ${VIDEODIR}/hq3x16.asm macros.mac
${VIDEODIR}/hq3x32.obj: ${VIDEODIR}/hq3x32.asm macros.mac
${CHIPDIR}/dsp1proc.o: ${CHIPDIR}/dsp1proc.asm macros.mac ${CHIPDIR}/dsp1proc.o: ${CHIPDIR}/dsp1proc.asm macros.mac
${CHIPDIR}/sa1regs.o: ${CHIPDIR}/sa1regs.asm macros.mac\ ${CHIPDIR}/sa1regs.o: ${CHIPDIR}/sa1regs.asm macros.mac\
${CPUDIR}/regs.mac ${CPUDIR}/regsw.mac ${CPUDIR}/regs.mac ${CPUDIR}/regsw.mac

View File

@@ -70,7 +70,7 @@ EXTSYM soundon, StereoSound, SoundCompD, SoundQuality, MusicRelVol
EXTSYM endprog, continueprog, spcBuffera, spcRamcmp, cbitmode, makepal EXTSYM endprog, continueprog, spcBuffera, spcRamcmp, cbitmode, makepal
EXTSYM t1cc, LoadDir, SRAMDir, LoadDrive,SRAMDrive, initsnes, romloadskip EXTSYM t1cc, LoadDir, SRAMDir, LoadDrive,SRAMDrive, initsnes, romloadskip
EXTSYM fname, makeextension, sram, clearmem2, loadfileGUI, GUIloadfailed EXTSYM fname, makeextension, sram, clearmem2, loadfileGUI, GUIloadfailed
EXTSYM SetupROM, CheckROMType, romdata, ForcePal, ramsize, ramsizeand, curromsize EXTSYM SetupROM,CheckROMType, romdata, ForcePal, ramsize, ramsizeand, curromsize
EXTSYM romispal, totlines, cfgloadsdir, init65816, procexecloop EXTSYM romispal, totlines, cfgloadsdir, init65816, procexecloop
EXTSYM spcRam, spcPCRam, spcS, spcRamDP, spcA, spcX, spcY, spcP, spcNZ EXTSYM spcRam, spcPCRam, spcS, spcRamDP, spcA, spcX, spcY, spcP, spcNZ
EXTSYM Voice0Status, Voice1Status, Voice2Status, Voice3Status, Voice4Status EXTSYM Voice0Status, Voice1Status, Voice2Status, Voice3Status, Voice4Status
@@ -158,6 +158,7 @@ EXTSYM TCPIPSendPacket,TCPIPSendPacketUDP
EXTSYM TCPIPDisconnect,TCPIPStatus EXTSYM TCPIPDisconnect,TCPIPStatus
EXTSYM TCPIPStoreByte EXTSYM TCPIPStoreByte
EXTSYM TCPIPGetByte,GUIBIFIL EXTSYM TCPIPGetByte,GUIBIFIL
EXTSYM GUIHQ3X
EXTSYM firstsaveinc EXTSYM firstsaveinc
EXTSYM nssdip1,nssdip2,nssdip3,nssdip4,nssdip5,nssdip6 EXTSYM nssdip1,nssdip2,nssdip3,nssdip4,nssdip5,nssdip6
%ifdef __LINUX__ %ifdef __LINUX__
@@ -585,7 +586,7 @@ NEWSYM SmallMsgText, db 0
NEWSYM AllowMultipleInst, db 0 NEWSYM AllowMultipleInst, db 0
NEWSYM FilteredGUI, db 0 NEWSYM FilteredGUI, db 0
NEWSYM BilinearFilter, db 0 NEWSYM BilinearFilter, db 0
NEWSYM TripleBufferWin, db 0 NEWSYM hq3xFilter, db 0
NEWSYM ExclusiveSound, db 0 NEWSYM ExclusiveSound, db 0
NEWSYM DisableScreenSaver, db 0 NEWSYM DisableScreenSaver, db 0
@@ -1540,6 +1541,7 @@ NEWSYM StartGUI
jmp .no2xSaIdis jmp .no2xSaIdis
.2xSaIdis .2xSaIdis
mov byte[En2xSaI],0 mov byte[En2xSaI],0
mov byte[hq3xFilter],0
.no2xSaIdis .no2xSaIdis
cmp byte[En2xSaI],0 cmp byte[En2xSaI],0
je .no2xsaidis je .no2xsaidis
@@ -1547,9 +1549,16 @@ NEWSYM StartGUI
.no2xsaidis .no2xsaidis
cmp byte[En2xSaI],0 cmp byte[En2xSaI],0
je .no2xsaien je .no2xsaien
mov byte[hq3xFilter],0
mov byte[scanlines],0 mov byte[scanlines],0
mov byte[antienab],0 mov byte[antienab],0
.no2xsaien .no2xsaien
cmp byte[hq3xFilter],0
je .nohq3x
mov byte[En2xSaI],0
mov byte[scanlines],0
mov byte[antienab],0
.nohq3x
;.dosport ;.dosport
mov ecx,64 mov ecx,64

View File

@@ -1019,6 +1019,8 @@ GUIVideoKeys:
jne .nofullscanlines jne .nofullscanlines
cmp byte[En2xSaI],0 cmp byte[En2xSaI],0
jne .nofullscanlines jne .nofullscanlines
cmp byte[hq3xFilter],0
jne .nofullscanlines
call ClearScreen call ClearScreen
GUIkeystoggleoptn byte[scanlines],1 GUIkeystoggleoptn byte[scanlines],1
%ifdef __MSDOS__ %ifdef __MSDOS__
@@ -1043,6 +1045,8 @@ GUIVideoKeys:
jne .nohalfscanlines jne .nohalfscanlines
cmp byte[En2xSaI],0 cmp byte[En2xSaI],0
jne .nohalfscanlines jne .nohalfscanlines
cmp byte[hq3xFilter],0
jne .nohalfscanlines
call ClearScreen call ClearScreen
GUIkeystoggleoptn byte[scanlines],3 GUIkeystoggleoptn byte[scanlines],3
%ifdef __MSDOS__ %ifdef __MSDOS__
@@ -1058,6 +1062,8 @@ GUIVideoKeys:
jne .noquarterscanlines jne .noquarterscanlines
cmp byte[En2xSaI],0 cmp byte[En2xSaI],0
jne .noquarterscanlines jne .noquarterscanlines
cmp byte[hq3xFilter],0
jne .noquarterscanlines
call ClearScreen call ClearScreen
GUIkeystoggleoptn byte[scanlines],2 GUIkeystoggleoptn byte[scanlines],2
%ifdef __MSDOS__ %ifdef __MSDOS__
@@ -1069,6 +1075,20 @@ GUIVideoKeys:
;call GUISetPal ;call GUISetPal
%endif %endif
.noquarterscanlines .noquarterscanlines
cmp dh,'Q'
jne .nohq3xfilter
xor ebx,ebx
mov bl,[cvidmode]
cmp byte[GUIHQ3X+ebx],0
je .nohq3xfilter
xor byte[hq3xFilter],1
jz .nohq3xfilter
mov byte[scanlines],0
mov byte[cfgscanline],0
mov byte[En2xSaI],0
mov byte[antienab],0
mov byte[cfginterp],0
.nohq3xfilter
cmp dh,'X' cmp dh,'X'
jne .no2xsai jne .no2xsai
xor ebx,ebx xor ebx,ebx
@@ -1176,19 +1196,6 @@ GUIVideoKeys:
je .nobilinearfilter je .nobilinearfilter
xor byte[BilinearFilter],1 xor byte[BilinearFilter],1
.nobilinearfilter .nobilinearfilter
%ifdef __WIN32__
cmp dh,'T'
jne .notriplebufferwin
xor eax,eax
mov al,[cvidmode]
cmp byte[GUITBWVID+eax],0
je near .notriplebufferwin
xor byte[TripleBufferWin],1
; mov byte[vsyncon],0
; mov byte[cfgvsync],0
call initDirectDraw
.notriplebufferwin
%endif
%ifdef __MSDOS__ %ifdef __MSDOS__
cmp dh,'T' cmp dh,'T'
jne .notriplebuffer jne .notriplebuffer
@@ -1212,7 +1219,6 @@ GUIVideoKeys:
mov al,[vsyncon] mov al,[vsyncon]
mov [cfgvsync],al mov [cfgvsync],al
%ifdef __WIN32__ %ifdef __WIN32__
; mov byte[TripleBufferWin],0
call initDirectDraw call initDirectDraw
%endif %endif
%ifdef __MSDOS__ %ifdef __MSDOS__

View File

@@ -1380,6 +1380,21 @@ GUIWinClicked:
%%noclick %%noclick
%endmacro %endmacro
%macro GUIClickCButtonHQ 3
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor %3,1
jz %%noclick
mov byte[En2xSaI],0
%%noclick
%endmacro
%macro GUIClickCButtonT 4 %macro GUIClickCButtonT 4
cmp eax,%1+1 cmp eax,%1+1
jl %%noclick jl %%noclick
@@ -2301,8 +2316,8 @@ DisplayGUIVideoClick:
xor ebx,ebx xor ebx,ebx
mov bl,[cvidmode] mov bl,[cvidmode]
cmp byte[GUISLVID+ebx],0 cmp byte[GUISLVID+ebx],0
GUIClickCButton4 21,114,byte[scanlines],byte[cfgscanline],1
je near .nocheckboxb je near .nocheckboxb
GUIClickCButton4 21,114,byte[scanlines],byte[cfgscanline],1
.nocheckboxb .nocheckboxb
xor ebx,ebx xor ebx,ebx
mov bl,[cvidmode] mov bl,[cvidmode]
@@ -2330,14 +2345,12 @@ DisplayGUIVideoClick:
GUIClickCButton4 61,114,byte[scanlines],byte[cfgscanline],3 GUIClickCButton4 61,114,byte[scanlines],byte[cfgscanline],3
GUIClickCButton4 101,114,byte[scanlines],byte[cfgscanline],2 GUIClickCButton4 101,114,byte[scanlines],byte[cfgscanline],2
.nohsline .nohsline
%ifdef __WIN32__
xor ebx,ebx xor ebx,ebx
mov bl,[cvidmode] mov bl,[cvidmode]
cmp byte[GUITBWVID+ebx],0 cmp byte[GUIHQ3X+ebx],0
je near .notriplebufferwin je .nocheckboxhq3x
GUIClickCButtonf 11,123,byte[TripleBufferWin],initDirectDraw GUIClickCButtonHQ 11,123,byte[hq3xFilter]
.notriplebufferwin .nocheckboxhq3x
%endif
xor ebx,ebx xor ebx,ebx
mov bl,[cvidmode] mov bl,[cvidmode]
cmp byte[GUI2xVID+ebx],0 cmp byte[GUI2xVID+ebx],0

View File

@@ -1643,6 +1643,7 @@ DisplayGUIVideo:
jmp .no2xSaIdis jmp .no2xSaIdis
.2xSaIdis .2xSaIdis
mov byte[En2xSaI],0 mov byte[En2xSaI],0
mov byte[hq3xFilter],0
.no2xSaIdis .no2xSaIdis
cmp byte[En2xSaI],0 cmp byte[En2xSaI],0
je .no2xsaidis je .no2xsaidis
@@ -1650,9 +1651,16 @@ DisplayGUIVideo:
.no2xsaidis .no2xsaidis
cmp byte[En2xSaI],0 cmp byte[En2xSaI],0
je .no2xsaien je .no2xsaien
mov byte[hq3xFilter],0
mov byte[scanlines],0 mov byte[scanlines],0
mov byte[antienab],0 mov byte[antienab],0
.no2xsaien .no2xsaien
cmp byte[hq3xFilter],0
je .nohq3xen
mov byte[En2xSaI],0
mov byte[scanlines],0
mov byte[antienab],0
.nohq3xen
; Video Modes List/Scanlines/Interpolation/Full(Small) Screen ; Video Modes List/Scanlines/Interpolation/Full(Small) Screen
GUIDrawWindowBox 5,GUIVideoDisp GUIDrawWindowBox 5,GUIVideoDisp
mov byte[GUItextcolor],217 mov byte[GUItextcolor],217
@@ -1687,12 +1695,6 @@ DisplayGUIVideo:
GUIOuttextwin2u 5,76,119,GUIVideoTexta2,0 GUIOuttextwin2u 5,76,119,GUIVideoTexta2,0
GUIOuttextwin2u 5,116,119,GUIVideoTexta3,0 GUIOuttextwin2u 5,116,119,GUIVideoTexta3,0
.notexta .notexta
xor eax,eax
mov al,[cvidmode]
cmp byte[GUITBWVID+eax],0
je near .nottbw
GUIOuttextwin2u 5,26,128,GUIVideoText7,0
.nottbw
xor eax,eax xor eax,eax
mov al,[cvidmode] mov al,[cvidmode]
cmp byte[GUI2xVID+eax],0 cmp byte[GUI2xVID+eax],0
@@ -1758,6 +1760,12 @@ DisplayGUIVideo:
je .notext8 je .notext8
GUIOuttextwin2u 5,26,178,GUIVideoText8b,0 GUIOuttextwin2u 5,26,178,GUIVideoText8b,0
.notext8 .notext8
xor eax,eax
mov al,[cvidmode]
cmp byte[GUIHQ3X+eax],0
je near .notext11
GUIOuttextwin2u 5,26,128,GUIVideoTexthq3x,1
.notext11
GUIOuttextwin2u 5,26,188,GUIVideoText8c,0 GUIOuttextwin2u 5,26,188,GUIVideoText8c,0
%ifndef __LINUX__ %ifndef __LINUX__
GUIOuttextwin2u 5,130,188,GUIVideoText9,0 GUIOuttextwin2u 5,130,188,GUIVideoText9,0
@@ -1788,12 +1796,6 @@ DisplayGUIVideo:
GUIOuttextwin2 5,75,118,GUIVideoTexta2 GUIOuttextwin2 5,75,118,GUIVideoTexta2
GUIOuttextwin2 5,115,118,GUIVideoTexta3 GUIOuttextwin2 5,115,118,GUIVideoTexta3
.notextab .notextab
xor eax,eax
mov al,[cvidmode]
cmp byte[GUITBWVID+eax],0
je near .nottbwb
GUIOuttextwin2 5,25,127,GUIVideoText7
.nottbwb
xor eax,eax xor eax,eax
mov al,[cvidmode] mov al,[cvidmode]
cmp byte[GUI2xVID+eax],0 cmp byte[GUI2xVID+eax],0
@@ -1859,6 +1861,12 @@ DisplayGUIVideo:
je .notext8b je .notext8b
GUIOuttextwin2 5,25,177,GUIVideoText8b GUIOuttextwin2 5,25,177,GUIVideoText8b
.notext8b .notext8b
xor eax,eax
mov al,[cvidmode]
cmp byte[GUIHQ3X+eax],0
je near .notext11b
GUIOuttextwin2 5,25,127,GUIVideoTexthq3x
.notext11b
GUIOuttextwin2 5,25,187,GUIVideoText8c GUIOuttextwin2 5,25,187,GUIVideoText8c
%ifndef __LINUX__ %ifndef __LINUX__
GUIOuttextwin2 5,129,187,GUIVideoText9 GUIOuttextwin2 5,129,187,GUIVideoText9
@@ -1901,17 +1909,6 @@ DisplayGUIVideo:
.nocheckboxv2 .nocheckboxv2
GUIDisplayIconWin 5,101,114,[GUITemp] GUIDisplayIconWin 5,101,114,[GUITemp]
.nocheckboxw .nocheckboxw
xor eax,eax
mov al,[cvidmode]
cmp byte[GUITBWVID+eax],0
je near .nocheckboxslw2
mov dword[GUITemp],GUIIconDataCheckBoxUC
cmp byte[TripleBufferWin],1
jne .nocheckboxslw
mov dword[GUITemp],GUIIconDataCheckBoxC
.nocheckboxslw
GUIDisplayIconWin 5,11,123,[GUITemp]
.nocheckboxslw2
xor eax,eax xor eax,eax
mov al,[cvidmode] mov al,[cvidmode]
cmp byte[GUI2xVID+eax],0 cmp byte[GUI2xVID+eax],0
@@ -2031,6 +2028,17 @@ DisplayGUIVideo:
.nocheckbox3 .nocheckbox3
GUIDisplayIconWin 5,11,98,[GUITemp] GUIDisplayIconWin 5,11,98,[GUITemp]
.nocheckbox3b .nocheckbox3b
xor eax,eax
mov al,[cvidmode]
cmp byte[GUIHQ3X+eax],0
je near .nocheckbox2hq3x
mov dword[GUITemp],GUIIconDataCheckBoxUC
cmp byte[hq3xFilter],0
je .nocheckbox1hq3x
mov dword[GUITemp],GUIIconDataCheckBoxC
.nocheckbox1hq3x
GUIDisplayIconWin 5,11,123,[GUITemp]
.nocheckbox2hq3x
DrawGUIWinBox 5,5,26,115,69,167 DrawGUIWinBox 5,5,26,115,69,167
DrawSlideBarWin 5,117,34,[GUIcurrentvideoviewloc],[NumVideoModes],5,28,GUIVStA DrawSlideBarWin 5,117,34,[GUIcurrentvideoviewloc],[NumVideoModes],5,28,GUIVStA
cmp byte[GUICHold],5 cmp byte[GUICHold],5
@@ -2150,6 +2158,7 @@ GUIVideoTextd2 db 'SUPER 2XSAI ENGINE',0
GUIVideoTextbf db 'BILINEAR FILTER',0 GUIVideoTextbf db 'BILINEAR FILTER',0
GUIVideoText3 db 'INTERPOLATION',0 ; -y GUIVideoText3 db 'INTERPOLATION',0 ; -y
GUIVideoText4 db 'EAGLE ENGINE',0 ; -y GUIVideoText4 db 'EAGLE ENGINE',0 ; -y
GUIVideoTexthq3x db 'HQ3X FILTER',0
GUIVideoText5 db 'FULL SCREEN',0 ; -c GUIVideoText5 db 'FULL SCREEN',0 ; -c
GUIVideoText5b db 'WIDE SCREEN',0 ; -c GUIVideoText5b db 'WIDE SCREEN',0 ; -c
GUIVideoText6 db 'SMALL SCREEN',0 ; -c GUIVideoText6 db 'SMALL SCREEN',0 ; -c
@@ -5241,10 +5250,10 @@ GUIGUIAboutText3 db ' ZSKNIGHT',0
GUIGUIAboutText4 db ' _DEMO_',0 GUIGUIAboutText4 db ' _DEMO_',0
GUIGUIAboutText6c db ' PAGEFAULT',0 GUIGUIAboutText6c db ' PAGEFAULT',0
GUIGUIAboutText5 db 'ASSISTANT CODERS : ',0 GUIGUIAboutText5 db 'ASSISTANT CODERS : ',0
GUIGUIAboutText6 db ' PHAROS NACH',0 GUIGUIAboutText6 db ' PHAROS',0
GUIGUIAboutText6b db ' TEUF HPSOLO',0 GUIGUIAboutText6b db ' TEUF',0
GUIGUIAboutText6d db ' THEODDONE33 STAINLESS',0 GUIGUIAboutText6d db ' THEODDONE33',0
GUIGUIAboutText6e db ' ',0 GUIGUIAboutText6e db ' STAINLESS',0
%ifdef __MSDOS__ %ifdef __MSDOS__
GUIGUIAboutText7 db 'DOS VERSION',0 GUIGUIAboutText7 db 'DOS VERSION',0

View File

@@ -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 initc.obj ui.obj vcache.obj water.obj smoke.obj burn.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 /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 initc.obj ui.obj vcache.obj water.obj smoke.obj burn.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 video/hq3x16.obj video/hq3x32.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

View File

@@ -49,11 +49,12 @@ VIDEOBJ=${VIDEODIR}/makev16b.obj ${VIDEODIR}/makev16t.obj ${VIDEODIR}/makevid.ob
${VIDEODIR}/mode7ext.obj ${VIDEODIR}/mv16tms.obj ${VIDEODIR}/newg162.obj\ ${VIDEODIR}/mode7ext.obj ${VIDEODIR}/mv16tms.obj ${VIDEODIR}/newg162.obj\
${VIDEODIR}/newgfx16.obj ${VIDEODIR}/newgfx2.obj ${VIDEODIR}/newgfx.obj\ ${VIDEODIR}/newgfx16.obj ${VIDEODIR}/newgfx2.obj ${VIDEODIR}/newgfx.obj\
${VIDEODIR}/m716text.obj ${VIDEODIR}/2xsaiw.obj\ ${VIDEODIR}/m716text.obj ${VIDEODIR}/2xsaiw.obj\
${VIDEODIR}/procvid.obj ${VIDEODIR}/sw_draw.obj ${VIDEODIR}/procvid.obj ${VIDEODIR}/sw_draw.obj\
${VIDEODIR}/hq3x16.obj ${VIDEODIR}/hq3x32.obj
WINOBJ=${WINDIR}/copyvwin.obj ${WINDIR}/winintrf.obj ${WINDIR}/winlink.obj\ WINOBJ=${WINDIR}/copyvwin.obj \
${WINDIR}/zloaderw.obj ${WINDIR}/ztcp.obj ${WINDIR}/zipxw.obj\ ${WINDIR}/winintrf.obj ${WINDIR}/winlink.obj ${WINDIR}/zloaderw.obj\
${WINDIR}/zfilew.obj ${WINDIR}/ztcp.obj ${WINDIR}/zipxw.obj ${WINDIR}/zfilew.obj
WINDOSOBJ=${DOSDIR}/debug.obj ${DOSDIR}/joy.obj ${DOSDIR}/modemrtn.obj ${DOSDIR}/vesa2.obj\ WINDOSOBJ=${DOSDIR}/debug.obj ${DOSDIR}/joy.obj ${DOSDIR}/modemrtn.obj ${DOSDIR}/vesa2.obj\
${DOSDIR}/initvid.obj ${DOSDIR}/sw.obj ${DOSDIR}/gppro.obj ${DOSDIR}/vesa12.obj\ ${DOSDIR}/initvid.obj ${DOSDIR}/sw.obj ${DOSDIR}/gppro.obj ${DOSDIR}/vesa12.obj\
@@ -115,6 +116,9 @@ smoke.obj: smoke.c
burn.obj: burn.c burn.obj: burn.c
${VIDEODIR}/2xsaiw.obj: ${VIDEODIR}/2xsaiw.asm macros.mac ${VIDEODIR}/2xsaiw.obj: ${VIDEODIR}/2xsaiw.asm macros.mac
${VIDEODIR}/procvid.obj: ${VIDEODIR}/procvid.asm macros.mac ${VIDEODIR}/copyvid.inc ${VIDEODIR}/2xSaImmx.inc ${VIDEODIR}/procvid.obj: ${VIDEODIR}/procvid.asm macros.mac ${VIDEODIR}/copyvid.inc ${VIDEODIR}/2xSaImmx.inc
${VIDEODIR}/sw_draw.obj: ${VIDEODIR}/sw_draw.asm macros.mac
${VIDEODIR}/hq3x16.obj: ${VIDEODIR}/hq3x16.asm macros.mac
${VIDEODIR}/hq3x32.obj: ${VIDEODIR}/hq3x32.asm macros.mac
${CHIPDIR}/sa1regs.obj: ${CHIPDIR}/sa1regs.asm macros.mac\ ${CHIPDIR}/sa1regs.obj: ${CHIPDIR}/sa1regs.asm macros.mac\
${CPUDIR}/regs.mac ${CPUDIR}/regsw.mac ${CPUDIR}/regs.mac ${CPUDIR}/regsw.mac
${CHIPDIR}/sfxproc.obj: ${CHIPDIR}/sfxproc.asm macros.mac\ ${CHIPDIR}/sfxproc.obj: ${CHIPDIR}/sfxproc.asm macros.mac\

View File

@@ -212,6 +212,7 @@ NEWSYM romispal, resb 1 ; 0 = NTSC, 1 = PAL
NEWSYM enterpress, resb 1 ; if enter is to be issued (0 = yes) NEWSYM enterpress, resb 1 ; if enter is to be issued (0 = yes)
NEWSYM newgfx16b, resb 1 NEWSYM newgfx16b, resb 1
NEWSYM BitConv32Ptr, resd 1 NEWSYM BitConv32Ptr, resd 1
NEWSYM RGBtoYUVPtr, resd 1
NEWSYM previdmode, resb 1 ; previous video mode NEWSYM previdmode, resb 1 ; previous video mode
NEWSYM cbitmode, resb 1 ; bit mode, 0=8bit, 1=16bit NEWSYM cbitmode, resb 1 ; bit mode, 0=8bit, 1=16bit
@@ -681,6 +682,7 @@ NEWSYM allocptr
AllocmemFail 65536*4*4+4096,vcache2bs,outofmemory AllocmemFail 65536*4*4+4096,vcache2bs,outofmemory
AllocmemFail 65536*4*2+4096,vcache4bs,outofmemory AllocmemFail 65536*4*2+4096,vcache4bs,outofmemory
AllocmemFail 65536*4+4096,vcache8bs,outofmemory AllocmemFail 65536*4+4096,vcache8bs,outofmemory
AllocmemFail 65536*4+4096,RGBtoYUVPtr,outofmemory
mov byte[newgfx16b],1 mov byte[newgfx16b],1
AllocmemOkay 4096*1024+32768*2+2048*1024+4096,romaptr,.memoryokay AllocmemOkay 4096*1024+32768*2+2048*1024+4096,romaptr,.memoryokay
mov byte[Sup48mbit],0 mov byte[Sup48mbit],0

2612
zsnes/src/video/hq3x16.asm Normal file

File diff suppressed because it is too large Load Diff

2572
zsnes/src/video/hq3x32.asm Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1250,27 +1250,29 @@ db '1280x1024 DS FULL',0 ;32
; Video Mode Feature Availability (1 = Available, 0 = Not Available) ; Video Mode Feature Availability (1 = Available, 0 = Not Available)
; Left side starts with Video Mode 0 ; Left side starts with Video Mode 0
NEWSYM GUI16VID, db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; 16-bit mode ; 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
NEWSYM GUINGVID, db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; New Graphics Mode Available NEWSYM GUI16VID, db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; 16-bit mode
NEWSYM GUISLVID, db 0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,1 ; Scanlines NEWSYM GUINGVID, db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; New Graphics Mode Available
NEWSYM GUIINVID, db 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 ; Interpolation NEWSYM GUISLVID, db 0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,1 ; Scanlines
NEWSYM GUII2VID, db 0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,1 ; Interpolation(w) NEWSYM GUIINVID, db 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 ; Interpolation
NEWSYM GUIEAVID, db 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 ; Eagle NEWSYM GUII2VID, db 0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,1 ; Interpolation(w)
NEWSYM GUIIEVID, db 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 ; (Interp | Eagle) NEWSYM GUIEAVID, db 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 ; Eagle
NEWSYM GUIFSVID, db 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 ; Full Screen NEWSYM GUIIEVID, db 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 ; (Interp | Eagle)
NEWSYM GUIWSVID, db 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 ; (Full Scr. | Wide Scr.) NEWSYM GUIFSVID, db 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 ; Full Screen
NEWSYM GUISSVID, db 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 ; Small Screen NEWSYM GUIWSVID, db 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 ; (Full Scr. | Wide Scr.)
NEWSYM GUITBVID, db 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 ; Triple Buffering NEWSYM GUISSVID, db 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 ; Small Screen
NEWSYM GUIHSVID, db 0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,1 ; Half/Quarter Scanlines NEWSYM GUITBVID, db 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 ; Triple Buffering
NEWSYM GUI2xVID, db 0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,1 ; 2xSaI/Super Eagle Engines NEWSYM GUIHSVID, db 0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,1 ; Half/Quarter Scanlines
NEWSYM GUIM7VID, db 0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,1 ; ?Mode 7 video thing? NEWSYM GUI2xVID, db 0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,1 ; 2xSaI/Super Eagle Engines
NEWSYM GUIWFVID, db 0,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,1,1,0,0,1,1,1 ; If Windows Full Screen NEWSYM GUIM7VID, db 0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,1 ; ?Mode 7 video thing?
NEWSYM GUIDSIZE, db 0,0,0,1,0,1,1,1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,1 NEWSYM GUIWFVID, db 0,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,1,1,0,0,1,1,1 ; If Windows Full Screen
NEWSYM GUIRATIO, db 0,1,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 NEWSYM GUIDSIZE, db 0,0,0,1,0,1,1,1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,1
NEWSYM GUIBIFIL, db 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 NEWSYM GUIRATIO, db 0,1,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
NEWSYM GUITBWVID, db 0,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,1,1,0,0,1,1,1 ; Triple Buffering (Win) NEWSYM GUIBIFIL, db 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
NEWSYM GUISMODE, db 0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,1,0,0,1,0,1,0,0 NEWSYM GUITBWVID, db 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 ; Triple Buffering (Win)
NEWSYM GUISMODE, db 0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,1,0,0,1,0,1,0,0
NEWSYM GUIDSMODE, db 0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,0,1,0,0,1,0,1,0,0,1 NEWSYM GUIDSMODE, db 0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,0,1,0,0,1,0,1,0,0,1
NEWSYM GUIHQ3X, db 0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 ; hq3x filter
SECTION .text SECTION .text

View File

@@ -268,40 +268,31 @@ void DDrawError(){
} }
extern "C" BYTE vsyncon; extern "C" BYTE vsyncon;
extern "C" BYTE TripleBufferWin;
void DrawScreen() void DrawScreen()
{ {
if (FullScreen == 1) if (FullScreen == 1)
{ {
if (TripleBufferWin == 1) DDBLTFX ddbltfx;
ddbltfx.dwSize = sizeof(ddbltfx);
ddbltfx.dwFillColor = 0;
DD_BackBuffer->Blt( NULL, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &ddbltfx );
DD_BackBuffer->Blt(&rcWindow, DD_CFB, &BlitArea, DDBLT_WAIT, NULL);
DD_Primary->Flip(NULL, DDFLIP_WAIT);
}
else
{
if (vsyncon == 1)
{
if (lpDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN, NULL) != DD_OK)
{ {
DD_BackBuffer->Blt(NULL, DD_CFB, &BlitArea, DDBLT_WAIT, NULL); DDrawError();
DD_Primary->Flip(NULL, DDFLIP_WAIT);
} }
else }
{ DD_Primary->Blt(&rcWindow, DD_CFB, &BlitArea, DDBLT_WAIT, NULL);
if (vsyncon == 1) }
{
if (lpDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN, NULL) != DD_OK)
{
DDrawError();
}
}
DD_Primary->Blt(&rcWindow, DD_CFB, &BlitArea, DDBLT_WAIT, NULL);
}
}
else
{
if (vsyncon == 1)
{
if (lpDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN, NULL) != DD_OK)
{
DDrawError();
}
}
DD_Primary->Blt(&rcWindow, DD_CFB, &BlitArea, DDBLT_WAIT, NULL);
}
} }
DWORD InputEn=0; DWORD InputEn=0;
@@ -1260,6 +1251,7 @@ void TestJoy()
extern "C" DWORD converta; extern "C" DWORD converta;
extern "C" unsigned int BitConv32Ptr; extern "C" unsigned int BitConv32Ptr;
extern "C" unsigned int RGBtoYUVPtr;
int InitDirectDraw() int InitDirectDraw()
{ {
@@ -1268,7 +1260,7 @@ int InitDirectDraw()
HRESULT hr; HRESULT hr;
char message1[256]; char message1[256];
unsigned int color32,ScreenPtr2; unsigned int color32,ScreenPtr2;
int i; int i, j, k, r, g, b, Y, u, v;
ScreenPtr2=BitConv32Ptr; ScreenPtr2=BitConv32Ptr;
for(i=0;i<65536;i++) for(i=0;i<65536;i++)
@@ -1280,17 +1272,46 @@ int InitDirectDraw()
ScreenPtr2+=4; ScreenPtr2+=4;
} }
for (i=0; i<32; i++)
for (j=0; j<64; j++)
for (k=0; k<32; k++)
{
r = i << 3;
g = j << 2;
b = k << 3;
Y = (r + g + b) >> 2;
u = 128 + ((r - b) >> 2);
v = 128 + ((-r + 2*g -b)>>3);
*(((unsigned int *)RGBtoYUVPtr) + (i << 11) + (j << 5) + k) = (Y<<16) + (u<<8) + v;
}
if (!hMainWindow) if (!hMainWindow)
{ {
exit(1); exit(1);
} }
ReleaseDirectDraw(); ReleaseDirectDraw();
GetClientRect(hMainWindow, &rcWindow); GetClientRect(hMainWindow, &rcWindow);
ClientToScreen(hMainWindow, ( LPPOINT )&rcWindow); ClientToScreen(hMainWindow, ( LPPOINT )&rcWindow);
ClientToScreen(hMainWindow, ( LPPOINT )&rcWindow + 1); ClientToScreen(hMainWindow, ( LPPOINT )&rcWindow + 1);
if (SurfaceX == 768 && SurfaceY == 720)
{
int marginx = (rcWindow.right - rcWindow.left - BlitArea.right + BlitArea.left)/2;
int marginy = (rcWindow.bottom - rcWindow.top - BlitArea.bottom + BlitArea.top)/2;
if (marginx>0)
{
rcWindow.left += marginx;
rcWindow.right -= marginx;
}
if (marginy>0)
{
rcWindow.top += marginy;
rcWindow.bottom -= marginy;
}
}
if (pDirectDrawCreateEx(NULL, (void **)&lpDD, IID_IDirectDraw7, NULL) != DD_OK) if (pDirectDrawCreateEx(NULL, (void **)&lpDD, IID_IDirectDraw7, NULL) != DD_OK)
{ {
MessageBox(NULL, "DirectDrawCreateEx failed.", "DirectDraw Error", MB_ICONERROR); MessageBox(NULL, "DirectDrawCreateEx failed.", "DirectDraw Error", MB_ICONERROR);
@@ -1332,7 +1353,18 @@ int InitDirectDraw()
ddsd2.ddsCaps.dwCaps |= DDSCAPS_FLIP | DDSCAPS_COMPLEX; ddsd2.ddsCaps.dwCaps |= DDSCAPS_FLIP | DDSCAPS_COMPLEX;
} }
if (lpDD->CreateSurface(&ddsd2, &DD_Primary, NULL) != DD_OK) HRESULT hRes = lpDD->CreateSurface(&ddsd2, &DD_Primary, NULL);
if (FullScreen == 1)
{
if ((hRes == DDERR_OUTOFMEMORY) || (hRes == DDERR_OUTOFVIDEOMEMORY))
{
ddsd2.dwBackBufferCount = 1;
hRes = lpDD->CreateSurface(&ddsd2, &DD_Primary, NULL);
}
}
if (hRes != DD_OK)
{ {
MessageBox(NULL, "IDirectDraw7::CreateSurface failed.", "DirectDraw Error", MB_ICONERROR); MessageBox(NULL, "IDirectDraw7::CreateSurface failed.", "DirectDraw Error", MB_ICONERROR);
return FALSE; return FALSE;
@@ -1545,13 +1577,16 @@ void Stop36HZ(void)
char WinMessage[256]; char WinMessage[256];
extern unsigned char cvidmode; extern unsigned char cvidmode;
extern unsigned char hq3xFilter;
DWORD FirstVid=1; DWORD FirstVid=1;
DWORD FirstFull=1; DWORD FirstFull=1;
DWORD SMode=0; DWORD SMode=0;
DWORD DSMode=0; DWORD DSMode=0;
DWORD prevHQ3XMode=-1;
extern BYTE GUIWFVID[]; extern BYTE GUIWFVID[];
extern BYTE GUISMODE[]; extern BYTE GUISMODE[];
extern BYTE GUIDSMODE[]; extern BYTE GUIDSMODE[];
extern BYTE GUIHQ3X[];
extern unsigned short resolutn; extern unsigned short resolutn;
void clearwin(); void clearwin();
@@ -1563,10 +1598,15 @@ void initwinvideo(void)
WINDOWPLACEMENT wndpl; WINDOWPLACEMENT wndpl;
RECT rc1, swrect; RECT rc1, swrect;
DWORD newmode=0; DWORD newmode=0;
DWORD HQ3XMode=0;
if (CurMode!=cvidmode) if ((GUIHQ3X[cvidmode]!=0) && (hq3xFilter!=0))
HQ3XMode=1;
if ((CurMode!=cvidmode) || (prevHQ3XMode!=HQ3XMode))
{ {
CurMode=cvidmode; CurMode=cvidmode;
prevHQ3XMode=HQ3XMode;
newmode=1; newmode=1;
SurfaceX=256; SurfaceX=256;
SurfaceY=240; SurfaceY=240;
@@ -1631,8 +1671,16 @@ void initwinvideo(void)
case 10: case 10:
WindowWidth=768; WindowWidth=768;
WindowHeight=672; WindowHeight=672;
SurfaceX=512; if (HQ3XMode!=0)
SurfaceY=480; {
SurfaceX=768;
SurfaceY=720;
}
else
{
SurfaceX=512;
SurfaceY=480;
}
break; break;
case 11: case 11:
WindowWidth=800; WindowWidth=800;
@@ -1651,8 +1699,16 @@ void initwinvideo(void)
case 14: case 14:
WindowWidth=800; WindowWidth=800;
WindowHeight=600; WindowHeight=600;
SurfaceX=640; if (HQ3XMode!=0)
SurfaceY=480; {
SurfaceX=768;
SurfaceY=720;
}
else
{
SurfaceX=640;
SurfaceY=480;
}
break; break;
case 15: case 15:
WindowWidth=800; WindowWidth=800;
@@ -1677,8 +1733,16 @@ void initwinvideo(void)
case 19: case 19:
WindowWidth=1024; WindowWidth=1024;
WindowHeight=768; WindowHeight=768;
SurfaceX=640; if (HQ3XMode!=0)
SurfaceY=480; {
SurfaceX=768;
SurfaceY=720;
}
else
{
SurfaceX=640;
SurfaceY=480;
}
break; break;
case 20: case 20:
WindowWidth=1024; WindowWidth=1024;
@@ -1776,6 +1840,8 @@ void initwinvideo(void)
BlitArea.bottom = SurfaceY; BlitArea.bottom = SurfaceY;
} }
if (SurfaceX == 768) BlitArea.bottom = (SurfaceY/240)*resolutn;
if (PrevRes == 0) PrevRes = resolutn; if (PrevRes == 0) PrevRes = resolutn;
} }
@@ -1803,10 +1869,26 @@ void initwinvideo(void)
AdjustWindowRectEx(&rc1,GetWindowLong(hMainWindow, GWL_STYLE), AdjustWindowRectEx(&rc1,GetWindowLong(hMainWindow, GWL_STYLE),
GetMenu(hMainWindow) != NULL, GetWindowLong(hMainWindow, GWL_EXSTYLE)); GetMenu(hMainWindow) != NULL, GetWindowLong(hMainWindow, GWL_EXSTYLE));
GetClientRect(hMainWindow, &rcWindow); GetClientRect(hMainWindow, &rcWindow);
ClientToScreen(hMainWindow, (LPPOINT) &rcWindow); ClientToScreen(hMainWindow, (LPPOINT) &rcWindow);
ClientToScreen(hMainWindow, (LPPOINT) &rcWindow + 1); ClientToScreen(hMainWindow, (LPPOINT) &rcWindow + 1);
if (SurfaceX == 768 && SurfaceY == 720)
{
int marginx = (rcWindow.right - rcWindow.left - BlitArea.right + BlitArea.left)/2;
int marginy = (rcWindow.bottom - rcWindow.top - BlitArea.bottom + BlitArea.top)/2;
if (marginx>0)
{
rcWindow.left += marginx;
rcWindow.right -= marginx;
}
if (marginy>0)
{
rcWindow.top += marginy;
rcWindow.bottom -= marginy;
}
}
} }
else else
{ {
@@ -2057,6 +2139,8 @@ extern DWORD AddEndBytes;
extern DWORD NumBytesPerLine; extern DWORD NumBytesPerLine;
extern unsigned char * WinVidMemStart; extern unsigned char * WinVidMemStart;
extern void copy640x480x16bwin(void); extern void copy640x480x16bwin(void);
extern void copy768x720x16bwin(void);
extern void copy768x720x32bwin(void);
extern unsigned char NGNoTransp; extern unsigned char NGNoTransp;
extern unsigned char newengen; extern unsigned char newengen;
extern void ClearWin16(); extern void ClearWin16();
@@ -2128,7 +2212,7 @@ void drawscreenwin(void)
{ {
BlitArea.bottom = (SurfaceY/240)*224; BlitArea.bottom = (SurfaceY/240)*224;
if (SurfaceX == 512 && DSMode == 1) BlitArea.bottom = SurfaceY; if (SurfaceX == 512 && DSMode == 1) BlitArea.bottom = SurfaceY;
if ((SurfaceX == 256 || SurfaceX == 512) && (SMode == 0 && DSMode == 0)) WindowHeight = (WindowHeight/239)*224; if ((SurfaceX == 256 || SurfaceX == 512 || SurfaceX == 768) && (SMode == 0 && DSMode == 0)) WindowHeight = (WindowHeight/239)*224;
initwinvideo(); initwinvideo();
PrevRes = resolutn; PrevRes = resolutn;
} }
@@ -2137,11 +2221,24 @@ void drawscreenwin(void)
{ {
BlitArea.bottom = (SurfaceY/240)*239; BlitArea.bottom = (SurfaceY/240)*239;
if (SurfaceX == 512 && DSMode == 1) BlitArea.bottom = SurfaceY; if (SurfaceX == 512 && DSMode == 1) BlitArea.bottom = SurfaceY;
if ((SurfaceX == 256 || SurfaceX == 512) && (SMode == 0 && DSMode == 0)) WindowHeight = (WindowHeight/224)*239; if ((SurfaceX == 256 || SurfaceX == 512 || SurfaceX == 768) && (SMode == 0 && DSMode == 0)) WindowHeight = (WindowHeight/224)*239;
initwinvideo(); initwinvideo();
PrevRes = resolutn; PrevRes = resolutn;
} }
DWORD HQ3XMode=0;
if (MMXSupport == 0)
hq3xFilter=0;
else
{
if ((GUIHQ3X[cvidmode]!=0) && (hq3xFilter!=0))
HQ3XMode=1;
}
if (prevHQ3XMode!=HQ3XMode)
initwinvideo();
SurfBufD=(DWORD) &SurfBuf[0]; SurfBufD=(DWORD) &SurfBuf[0];
SURFDW=(DWORD *) &SurfBuf[0]; SURFDW=(DWORD *) &SurfBuf[0];
@@ -2315,6 +2412,41 @@ void drawscreenwin(void)
drawscreenwin(); drawscreenwin();
} }
} }
if (SurfaceX == 768 && SurfaceY == 720)
{
switch (BitDepth)
{
case 16:
AddEndBytes=pitch-768*2;
NumBytesPerLine=pitch;
WinVidMemStart=&SurfBuf[0];
_asm
{
pushad
call copy768x720x16bwin
popad
}
break;
case 32:
AddEndBytes=pitch-768*4;
NumBytesPerLine=pitch;
WinVidMemStart=&SurfBuf[0];
_asm
{
pushad
call copy768x720x32bwin
popad
}
break;
default:
UnlockSurface();
MessageBox (NULL, "Mode only available in 16 and 32 bit color", "DDRAW Error" , MB_ICONERROR );
cvidmode=2;
initwinvideo();
Sleep(1000);
drawscreenwin();
}
}
UnlockSurface(); UnlockSurface();
} }