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\
${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\
${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}/newgfx16.o ${VIDEODIR}/newgfx2.o ${VIDEODIR}/newgfx.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 \
${WINDIR}/zloaderw.o ${WINDIR}/ztcp.o ${WINDIR}/zipxw.o \
${WINDIR}/zfilew.o ${WINDIR}/protect.o
@@ -80,6 +82,9 @@ water.o: water.c
smoke.o: smoke.c
burn.o: burn.c
${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}/sa1regs.o: ${CHIPDIR}/sa1regs.asm macros.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 t1cc, LoadDir, SRAMDir, LoadDrive,SRAMDrive, initsnes, romloadskip
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 spcRam, spcPCRam, spcS, spcRamDP, spcA, spcX, spcY, spcP, spcNZ
EXTSYM Voice0Status, Voice1Status, Voice2Status, Voice3Status, Voice4Status
@@ -158,6 +158,7 @@ EXTSYM TCPIPSendPacket,TCPIPSendPacketUDP
EXTSYM TCPIPDisconnect,TCPIPStatus
EXTSYM TCPIPStoreByte
EXTSYM TCPIPGetByte,GUIBIFIL
EXTSYM GUIHQ3X
EXTSYM firstsaveinc
EXTSYM nssdip1,nssdip2,nssdip3,nssdip4,nssdip5,nssdip6
%ifdef __LINUX__
@@ -585,7 +586,7 @@ NEWSYM SmallMsgText, db 0
NEWSYM AllowMultipleInst, db 0
NEWSYM FilteredGUI, db 0
NEWSYM BilinearFilter, db 0
NEWSYM TripleBufferWin, db 0
NEWSYM hq3xFilter, db 0
NEWSYM ExclusiveSound, db 0
NEWSYM DisableScreenSaver, db 0
@@ -1540,6 +1541,7 @@ NEWSYM StartGUI
jmp .no2xSaIdis
.2xSaIdis
mov byte[En2xSaI],0
mov byte[hq3xFilter],0
.no2xSaIdis
cmp byte[En2xSaI],0
je .no2xsaidis
@@ -1547,9 +1549,16 @@ NEWSYM StartGUI
.no2xsaidis
cmp byte[En2xSaI],0
je .no2xsaien
mov byte[hq3xFilter],0
mov byte[scanlines],0
mov byte[antienab],0
.no2xsaien
cmp byte[hq3xFilter],0
je .nohq3x
mov byte[En2xSaI],0
mov byte[scanlines],0
mov byte[antienab],0
.nohq3x
;.dosport
mov ecx,64

View File

@@ -1019,6 +1019,8 @@ GUIVideoKeys:
jne .nofullscanlines
cmp byte[En2xSaI],0
jne .nofullscanlines
cmp byte[hq3xFilter],0
jne .nofullscanlines
call ClearScreen
GUIkeystoggleoptn byte[scanlines],1
%ifdef __MSDOS__
@@ -1043,6 +1045,8 @@ GUIVideoKeys:
jne .nohalfscanlines
cmp byte[En2xSaI],0
jne .nohalfscanlines
cmp byte[hq3xFilter],0
jne .nohalfscanlines
call ClearScreen
GUIkeystoggleoptn byte[scanlines],3
%ifdef __MSDOS__
@@ -1058,6 +1062,8 @@ GUIVideoKeys:
jne .noquarterscanlines
cmp byte[En2xSaI],0
jne .noquarterscanlines
cmp byte[hq3xFilter],0
jne .noquarterscanlines
call ClearScreen
GUIkeystoggleoptn byte[scanlines],2
%ifdef __MSDOS__
@@ -1069,6 +1075,20 @@ GUIVideoKeys:
;call GUISetPal
%endif
.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'
jne .no2xsai
xor ebx,ebx
@@ -1176,19 +1196,6 @@ GUIVideoKeys:
je .nobilinearfilter
xor byte[BilinearFilter],1
.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__
cmp dh,'T'
jne .notriplebuffer
@@ -1212,7 +1219,6 @@ GUIVideoKeys:
mov al,[vsyncon]
mov [cfgvsync],al
%ifdef __WIN32__
; mov byte[TripleBufferWin],0
call initDirectDraw
%endif
%ifdef __MSDOS__

View File

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

View File

@@ -1643,6 +1643,7 @@ DisplayGUIVideo:
jmp .no2xSaIdis
.2xSaIdis
mov byte[En2xSaI],0
mov byte[hq3xFilter],0
.no2xSaIdis
cmp byte[En2xSaI],0
je .no2xsaidis
@@ -1650,9 +1651,16 @@ DisplayGUIVideo:
.no2xsaidis
cmp byte[En2xSaI],0
je .no2xsaien
mov byte[hq3xFilter],0
mov byte[scanlines],0
mov byte[antienab],0
.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
GUIDrawWindowBox 5,GUIVideoDisp
mov byte[GUItextcolor],217
@@ -1687,12 +1695,6 @@ DisplayGUIVideo:
GUIOuttextwin2u 5,76,119,GUIVideoTexta2,0
GUIOuttextwin2u 5,116,119,GUIVideoTexta3,0
.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
mov al,[cvidmode]
cmp byte[GUI2xVID+eax],0
@@ -1758,6 +1760,12 @@ DisplayGUIVideo:
je .notext8
GUIOuttextwin2u 5,26,178,GUIVideoText8b,0
.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
%ifndef __LINUX__
GUIOuttextwin2u 5,130,188,GUIVideoText9,0
@@ -1788,12 +1796,6 @@ DisplayGUIVideo:
GUIOuttextwin2 5,75,118,GUIVideoTexta2
GUIOuttextwin2 5,115,118,GUIVideoTexta3
.notextab
xor eax,eax
mov al,[cvidmode]
cmp byte[GUITBWVID+eax],0
je near .nottbwb
GUIOuttextwin2 5,25,127,GUIVideoText7
.nottbwb
xor eax,eax
mov al,[cvidmode]
cmp byte[GUI2xVID+eax],0
@@ -1859,6 +1861,12 @@ DisplayGUIVideo:
je .notext8b
GUIOuttextwin2 5,25,177,GUIVideoText8b
.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
%ifndef __LINUX__
GUIOuttextwin2 5,129,187,GUIVideoText9
@@ -1901,17 +1909,6 @@ DisplayGUIVideo:
.nocheckboxv2
GUIDisplayIconWin 5,101,114,[GUITemp]
.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
mov al,[cvidmode]
cmp byte[GUI2xVID+eax],0
@@ -2031,6 +2028,17 @@ DisplayGUIVideo:
.nocheckbox3
GUIDisplayIconWin 5,11,98,[GUITemp]
.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
DrawSlideBarWin 5,117,34,[GUIcurrentvideoviewloc],[NumVideoModes],5,28,GUIVStA
cmp byte[GUICHold],5
@@ -2150,6 +2158,7 @@ GUIVideoTextd2 db 'SUPER 2XSAI ENGINE',0
GUIVideoTextbf db 'BILINEAR FILTER',0
GUIVideoText3 db 'INTERPOLATION',0 ; -y
GUIVideoText4 db 'EAGLE ENGINE',0 ; -y
GUIVideoTexthq3x db 'HQ3X FILTER',0
GUIVideoText5 db 'FULL SCREEN',0 ; -c
GUIVideoText5b db 'WIDE SCREEN',0 ; -c
GUIVideoText6 db 'SMALL SCREEN',0 ; -c
@@ -5241,10 +5250,10 @@ GUIGUIAboutText3 db ' ZSKNIGHT',0
GUIGUIAboutText4 db ' _DEMO_',0
GUIGUIAboutText6c db ' PAGEFAULT',0
GUIGUIAboutText5 db 'ASSISTANT CODERS : ',0
GUIGUIAboutText6 db ' PHAROS NACH',0
GUIGUIAboutText6b db ' TEUF HPSOLO',0
GUIGUIAboutText6d db ' THEODDONE33 STAINLESS',0
GUIGUIAboutText6e db ' ',0
GUIGUIAboutText6 db ' PHAROS',0
GUIGUIAboutText6b db ' TEUF',0
GUIGUIAboutText6d db ' THEODDONE33',0
GUIGUIAboutText6e db ' STAINLESS',0
%ifdef __MSDOS__
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}/newgfx16.obj ${VIDEODIR}/newgfx2.obj ${VIDEODIR}/newgfx.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\
${WINDIR}/zloaderw.obj ${WINDIR}/ztcp.obj ${WINDIR}/zipxw.obj\
${WINDIR}/zfilew.obj
WINOBJ=${WINDIR}/copyvwin.obj \
${WINDIR}/winintrf.obj ${WINDIR}/winlink.obj ${WINDIR}/zloaderw.obj\
${WINDIR}/ztcp.obj ${WINDIR}/zipxw.obj ${WINDIR}/zfilew.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\
@@ -115,6 +116,9 @@ smoke.obj: smoke.c
burn.obj: burn.c
${VIDEODIR}/2xsaiw.obj: ${VIDEODIR}/2xsaiw.asm macros.mac
${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\
${CPUDIR}/regs.mac ${CPUDIR}/regsw.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 newgfx16b, resb 1
NEWSYM BitConv32Ptr, resd 1
NEWSYM RGBtoYUVPtr, resd 1
NEWSYM previdmode, resb 1 ; previous video mode
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*2+4096,vcache4bs,outofmemory
AllocmemFail 65536*4+4096,vcache8bs,outofmemory
AllocmemFail 65536*4+4096,RGBtoYUVPtr,outofmemory
mov byte[newgfx16b],1
AllocmemOkay 4096*1024+32768*2+2048*1024+4096,romaptr,.memoryokay
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)
; 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
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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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
; 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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

View File

@@ -268,40 +268,31 @@ void DDrawError(){
}
extern "C" BYTE vsyncon;
extern "C" BYTE TripleBufferWin;
void DrawScreen()
{
if (FullScreen == 1)
{
if (TripleBufferWin == 1)
if (FullScreen == 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);
DD_Primary->Flip(NULL, DDFLIP_WAIT);
DDrawError();
}
else
{
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);
}
}
DD_Primary->Blt(&rcWindow, DD_CFB, &BlitArea, DDBLT_WAIT, NULL);
}
}
DWORD InputEn=0;
@@ -1260,6 +1251,7 @@ void TestJoy()
extern "C" DWORD converta;
extern "C" unsigned int BitConv32Ptr;
extern "C" unsigned int RGBtoYUVPtr;
int InitDirectDraw()
{
@@ -1268,7 +1260,7 @@ int InitDirectDraw()
HRESULT hr;
char message1[256];
unsigned int color32,ScreenPtr2;
int i;
int i, j, k, r, g, b, Y, u, v;
ScreenPtr2=BitConv32Ptr;
for(i=0;i<65536;i++)
@@ -1280,6 +1272,19 @@ int InitDirectDraw()
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)
{
exit(1);
@@ -1291,6 +1296,22 @@ int InitDirectDraw()
ClientToScreen(hMainWindow, ( LPPOINT )&rcWindow);
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)
{
MessageBox(NULL, "DirectDrawCreateEx failed.", "DirectDraw Error", MB_ICONERROR);
@@ -1332,7 +1353,18 @@ int InitDirectDraw()
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);
return FALSE;
@@ -1545,13 +1577,16 @@ void Stop36HZ(void)
char WinMessage[256];
extern unsigned char cvidmode;
extern unsigned char hq3xFilter;
DWORD FirstVid=1;
DWORD FirstFull=1;
DWORD SMode=0;
DWORD DSMode=0;
DWORD prevHQ3XMode=-1;
extern BYTE GUIWFVID[];
extern BYTE GUISMODE[];
extern BYTE GUIDSMODE[];
extern BYTE GUIHQ3X[];
extern unsigned short resolutn;
void clearwin();
@@ -1563,10 +1598,15 @@ void initwinvideo(void)
WINDOWPLACEMENT wndpl;
RECT rc1, swrect;
DWORD newmode=0;
DWORD HQ3XMode=0;
if (CurMode!=cvidmode)
if ((GUIHQ3X[cvidmode]!=0) && (hq3xFilter!=0))
HQ3XMode=1;
if ((CurMode!=cvidmode) || (prevHQ3XMode!=HQ3XMode))
{
CurMode=cvidmode;
prevHQ3XMode=HQ3XMode;
newmode=1;
SurfaceX=256;
SurfaceY=240;
@@ -1631,8 +1671,16 @@ void initwinvideo(void)
case 10:
WindowWidth=768;
WindowHeight=672;
SurfaceX=512;
SurfaceY=480;
if (HQ3XMode!=0)
{
SurfaceX=768;
SurfaceY=720;
}
else
{
SurfaceX=512;
SurfaceY=480;
}
break;
case 11:
WindowWidth=800;
@@ -1651,8 +1699,16 @@ void initwinvideo(void)
case 14:
WindowWidth=800;
WindowHeight=600;
SurfaceX=640;
SurfaceY=480;
if (HQ3XMode!=0)
{
SurfaceX=768;
SurfaceY=720;
}
else
{
SurfaceX=640;
SurfaceY=480;
}
break;
case 15:
WindowWidth=800;
@@ -1677,8 +1733,16 @@ void initwinvideo(void)
case 19:
WindowWidth=1024;
WindowHeight=768;
SurfaceX=640;
SurfaceY=480;
if (HQ3XMode!=0)
{
SurfaceX=768;
SurfaceY=720;
}
else
{
SurfaceX=640;
SurfaceY=480;
}
break;
case 20:
WindowWidth=1024;
@@ -1776,6 +1840,8 @@ void initwinvideo(void)
BlitArea.bottom = SurfaceY;
}
if (SurfaceX == 768) BlitArea.bottom = (SurfaceY/240)*resolutn;
if (PrevRes == 0) PrevRes = resolutn;
}
@@ -1807,6 +1873,22 @@ void initwinvideo(void)
GetClientRect(hMainWindow, &rcWindow);
ClientToScreen(hMainWindow, (LPPOINT) &rcWindow);
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
{
@@ -2057,6 +2139,8 @@ extern DWORD AddEndBytes;
extern DWORD NumBytesPerLine;
extern unsigned char * WinVidMemStart;
extern void copy640x480x16bwin(void);
extern void copy768x720x16bwin(void);
extern void copy768x720x32bwin(void);
extern unsigned char NGNoTransp;
extern unsigned char newengen;
extern void ClearWin16();
@@ -2128,7 +2212,7 @@ void drawscreenwin(void)
{
BlitArea.bottom = (SurfaceY/240)*224;
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();
PrevRes = resolutn;
}
@@ -2137,11 +2221,24 @@ void drawscreenwin(void)
{
BlitArea.bottom = (SurfaceY/240)*239;
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();
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];
SURFDW=(DWORD *) &SurfBuf[0];
@@ -2315,6 +2412,41 @@ void drawscreenwin(void)
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();
}