Add HQ2X and HQ4X, also add HQxX support to SDL port

This commit is contained in:
pagefault
2003-12-05 20:26:37 +00:00
parent 0b40dabe35
commit 9aee713b31
18 changed files with 13101 additions and 212 deletions

View File

@@ -43,7 +43,9 @@ VIDEOBJ=${VIDEODIR}/makev16b.o ${VIDEODIR}/makev16t.o ${VIDEODIR}/makevid.o\
${VIDEODIR}/newgfx16.o ${VIDEODIR}/newgfx2.o ${VIDEODIR}/newgfx.o\
${VIDEODIR}/m716text.o ${VIDEODIR}/2xsaiw.o\
${VIDEODIR}/procvid.o ${VIDEODIR}/sw_draw.o\
${VIDEODIR}/hq3x16.o ${VIDEODIR}/hq3x32.o
${VIDEODIR}/hq2x16.o ${VIDEODIR}/hq2x32.o\
${VIDEODIR}/hq3x16.o ${VIDEODIR}/hq3x32.o\
${VIDEODIR}/hq4x16.o ${VIDEODIR}/hq4x32.o
WINOBJ=${WINDIR}/copyvwin.o \
${WINDIR}/sdlintrf.o ${WINDIR}/sdllink.o \
@@ -84,8 +86,12 @@ ${EFFECTSDIR}/smoke.o: ${EFFECTSDIR}/smoke.c
${EFFECTSDIR}/burn.o: ${EFFECTSDIR}/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}/hq2x16.obj: ${VIDEODIR}/hq2x16.asm macros.mac
${VIDEODIR}/hq2x32.obj: ${VIDEODIR}/hq2x32.asm macros.mac
${VIDEODIR}/hq3x16.obj: ${VIDEODIR}/hq3x16.asm macros.mac
${VIDEODIR}/hq3x32.obj: ${VIDEODIR}/hq3x32.asm macros.mac
${VIDEODIR}/hq4x16.obj: ${VIDEODIR}/hq4x16.asm macros.mac
${VIDEODIR}/hq4x32.obj: ${VIDEODIR}/hq4x32.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
@@ -182,8 +188,8 @@ endmem.o: endmem.asm macros.mac
${DOSDIR}/modemrtn.o: ${DOSDIR}/modemrtn.asm macros.mac
install:
@INSTALL@ -D -m 0755 @ZSNESEXE@ @prefix@/bin
@INSTALL@ -D -m 0644 linux/zsnes.1 @prefix@/man/man1
@INSTALL@ -m 0755 @ZSNESEXE@ @prefix@/bin
@INSTALL@ -m 0644 linux/zsnes.1 @prefix@/man/man1
uninstall:
rm -f @prefix@/bin/$(notdir @ZSNESEXE@) @prefix@/man/man5/zsnes.5

View File

@@ -1064,7 +1064,9 @@ NEWSYM GUII2VID, db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; Super 2xSAI En
NEWSYM GUIM7VID, db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 ; Hi-Resolution Mode 7
NEWSYM GUIBIFIL, db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; Bilinear Filtering
NEWSYM GUITBWVID, db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; Triple Buffering (Win)
NEWSYM GUIHQ2X, db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; HQ2X Filter
NEWSYM GUIHQ3X, db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; HQ3X Filter
NEWSYM GUIHQ4X, db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; HQ4X Filter
SECTION .text
; ****************************

View File

@@ -158,7 +158,9 @@ EXTSYM TCPIPSendPacket,TCPIPSendPacketUDP
EXTSYM TCPIPDisconnect,TCPIPStatus
EXTSYM TCPIPStoreByte
EXTSYM TCPIPGetByte,GUIBIFIL
EXTSYM GUIHQ2X
EXTSYM GUIHQ3X
EXTSYM GUIHQ4X
EXTSYM firstsaveinc
EXTSYM nssdip1,nssdip2,nssdip3,nssdip4,nssdip5,nssdip6
%ifdef __LINUX__
@@ -601,7 +603,7 @@ NEWSYM KeyDisplayFPS, dd 0
NEWSYM KeyIncStateSlot, dd 0
NEWSYM KeyDecStateSlot, dd 0
NEWSYM KeyUsePlayer1234, dd 0
NEWSYM hq3xFilter, db 0
NEWSYM hqFilter, db 0
NEWSYM reserved, db 0
NEWSYM scale2xFilter, db 0
@@ -1542,7 +1544,7 @@ NEWSYM StartGUI
jmp .no2xSaIdis
.2xSaIdis
mov byte[En2xSaI],0
mov byte[hq3xFilter],0
mov byte[hqFilter],0
.no2xSaIdis
cmp byte[En2xSaI],0
je .no2xsaidis
@@ -1550,16 +1552,16 @@ NEWSYM StartGUI
.no2xsaidis
cmp byte[En2xSaI],0
je .no2xsaien
mov byte[hq3xFilter],0
mov byte[hqFilter],0
mov byte[scanlines],0
mov byte[antienab],0
.no2xsaien
cmp byte[hq3xFilter],0
je .nohq3x
cmp byte[hqFilter],0
je .nohq
mov byte[En2xSaI],0
mov byte[scanlines],0
mov byte[antienab],0
.nohq3x
.nohq
mov ecx,64
mov eax,SpecialLine
.slloop

View File

@@ -1019,7 +1019,7 @@ GUIVideoKeys:
jne .nofullscanlines
cmp byte[En2xSaI],0
jne .nofullscanlines
cmp byte[hq3xFilter],0
cmp byte[hqFilter],0
jne .nofullscanlines
call ClearScreen
GUIkeystoggleoptn byte[scanlines],1
@@ -1045,7 +1045,7 @@ GUIVideoKeys:
jne .nohalfscanlines
cmp byte[En2xSaI],0
jne .nohalfscanlines
cmp byte[hq3xFilter],0
cmp byte[hqFilter],0
jne .nohalfscanlines
call ClearScreen
GUIkeystoggleoptn byte[scanlines],3
@@ -1062,7 +1062,7 @@ GUIVideoKeys:
jne .noquarterscanlines
cmp byte[En2xSaI],0
jne .noquarterscanlines
cmp byte[hq3xFilter],0
cmp byte[hqFilter],0
jne .noquarterscanlines
call ClearScreen
GUIkeystoggleoptn byte[scanlines],2
@@ -1076,19 +1076,25 @@ GUIVideoKeys:
%endif
.noquarterscanlines
cmp dh,'Q'
jne .nohq3xfilter
jne .nohqfilter
xor ebx,ebx
mov bl,[cvidmode]
cmp byte[GUIHQ2X+ebx],0
jne .hqfilter
cmp byte[GUIHQ3X+ebx],0
je .nohq3xfilter
xor byte[hq3xFilter],1
jz .nohq3xfilter
jne .hqfilter
cmp byte[GUIHQ4X+ebx],0
jne .hqfilter
jmp .nohqfilter
.hqfilter
xor byte[hqFilter],1
jz .nohqfilter
mov byte[scanlines],0
mov byte[cfgscanline],0
mov byte[En2xSaI],0
mov byte[antienab],0
mov byte[cfginterp],0
.nohq3xfilter
.nohqfilter
cmp dh,'X'
jne .no2xsai
xor ebx,ebx

View File

@@ -2355,10 +2355,16 @@ DisplayGUIVideoClick:
%endif
xor ebx,ebx
mov bl,[cvidmode]
cmp byte[GUIHQ2X+ebx],0
jne .checkboxhq
cmp byte[GUIHQ3X+ebx],0
je .nocheckboxhq3x
GUIClickCButtonHQ 115,163,byte[hq3xFilter]
.nocheckboxhq3x
jne .checkboxhq
cmp byte[GUIHQ4X+ebx],0
jne .checkboxhq
jmp .nocheckboxhq
.checkboxhq
GUIClickCButtonHQ 115,163,byte[hqFilter]
.nocheckboxhq
xor ebx,ebx
mov bl,[cvidmode]
cmp byte[GUI2xVID+ebx],0

View File

@@ -1643,7 +1643,7 @@ DisplayGUIVideo:
jmp .no2xSaIdis
.2xSaIdis
mov byte[En2xSaI],0
mov byte[hq3xFilter],0
mov byte[hqFilter],0
.no2xSaIdis
cmp byte[En2xSaI],0
je .no2xsaidis
@@ -1651,11 +1651,11 @@ DisplayGUIVideo:
.no2xsaidis
cmp byte[En2xSaI],0
je .no2xsaien
mov byte[hq3xFilter],0
mov byte[hqFilter],0
mov byte[scanlines],0
mov byte[antienab],0
.no2xsaien
cmp byte[hq3xFilter],0
cmp byte[hqFilter],0
je .nohq3xen
mov byte[En2xSaI],0
mov byte[scanlines],0
@@ -1772,12 +1772,24 @@ DisplayGUIVideo:
je near .notext11a
GUIOuttextwin2u 5,130,158,GUIVideoTextscale2x,1
.notext11a
xor eax,eax
mov al,[cvidmode]
cmp byte[GUIHQ2X+eax],0
je near .notexthq2xa
GUIOuttextwin2u 5,130,168,GUIVideoTexthq2x,1
.notexthq2xa
xor eax,eax
mov al,[cvidmode]
cmp byte[GUIHQ3X+eax],0
je near .notext11
je near .notexthq3xa
GUIOuttextwin2u 5,130,168,GUIVideoTexthq3x,1
.notext11
.notexthq3xa
xor eax,eax
mov al,[cvidmode]
cmp byte[GUIHQ4X+eax],0
je near .notexthq4xa
GUIOuttextwin2u 5,130,168,GUIVideoTexthq4x,1
.notexthq4xa
GUIOuttextwin2u 5,26,188,GUIVideoText8c,0
%ifndef __LINUX__
GUIOuttextwin2u 5,130,188,GUIVideoText9,0
@@ -1885,12 +1897,24 @@ DisplayGUIVideo:
je near .notext11b
GUIOuttextwin2 5,129,157,GUIVideoTextscale2x
.notext11b
xor eax,eax
mov al,[cvidmode]
cmp byte[GUIHQ2X+eax],0
je near .notexthq2xb
GUIOuttextwin2 5,129,167,GUIVideoTexthq2x
.notexthq2xb
xor eax,eax
mov al,[cvidmode]
cmp byte[GUIHQ3X+eax],0
je near .notext11c
je near .notexthq3xb
GUIOuttextwin2 5,129,167,GUIVideoTexthq3x
.notext11c
.notexthq3xb
xor eax,eax
mov al,[cvidmode]
cmp byte[GUIHQ4X+eax],0
je near .notexthq4xb
GUIOuttextwin2 5,129,167,GUIVideoTexthq4x
.notexthq4xb
GUIOuttextwin2 5,25,187,GUIVideoText8c
%ifndef __LINUX__
GUIOuttextwin2 5,129,187,GUIVideoText9
@@ -2076,15 +2100,21 @@ DisplayGUIVideo:
.nocheckbox2scale2x
xor eax,eax
mov al,[cvidmode]
cmp byte[GUIHQ2X+eax],0
jne near .checkboxhq
cmp byte[GUIHQ3X+eax],0
je near .nocheckbox2hq3x
jne near .checkboxhq
cmp byte[GUIHQ4X+eax],0
jne near .checkboxhq
jmp .nocheckboxhq
.checkboxhq
mov dword[GUITemp],GUIIconDataCheckBoxUC
cmp byte[hq3xFilter],0
je .nocheckbox1hq3x
cmp byte[hqFilter],0
je .uncheckedhq
mov dword[GUITemp],GUIIconDataCheckBoxC
.nocheckbox1hq3x
.uncheckedhq
GUIDisplayIconWin 5,115,163,[GUITemp]
.nocheckbox2hq3x
.nocheckboxhq
DrawGUIWinBox 5,5,26,115,69,167
DrawSlideBarWin 5,117,34,[GUIcurrentvideoviewloc],[NumVideoModes],5,28,GUIVStA
cmp byte[GUICHold],5
@@ -2205,7 +2235,9 @@ GUIVideoTextbf db 'BILINEAR FILTER',0
GUIVideoText3 db 'INTERPOLATION',0 ; -y
GUIVideoText4 db 'EAGLE ENGINE',0 ; -y
GUIVideoTextscale2x db 'SCALE2X',0
GUIVideoTexthq2x db 'HQ2X',0
GUIVideoTexthq3x db 'HQ3X',0
GUIVideoTexthq4x db 'HQ4X',0
GUIVideoText5 db 'FULL SCREEN',0 ; -c
GUIVideoText5b db 'WIDE SCREEN',0 ; -c
GUIVideoText6 db 'SMALL SCREEN',0 ; -c
@@ -3764,8 +3796,8 @@ DisplayNetOptns:
mov dword[GUINetDisp],'INTE'
mov dword[GUINetDisp+4],'RNET'
mov byte[GUINetDisp+8],0
; cmp byte[NetPlayNoMore],1
; jne .notcpip
cmp byte[NetPlayNoMore],1
jne .notcpip
mov dword[GUIwinsizex+8*4],201
mov dword[GUIwinsizey+8*4],48
.notcpip
@@ -3943,8 +3975,8 @@ DisplayNetOptnsTCPIP:
.zero
sub byte[GUItextcolor],15
; cmp byte[NetPlayNoMore],1
; jne near .tcpip
cmp byte[NetPlayNoMore],1
jne near .tcpip
GUIOuttextwin2 8,6,16,GUINetTextr1
GUIOuttextwin2 8,6,36,GUINetTextr2
GUIOuttextwin2 8,6,46,GUINetTextr3
@@ -4541,12 +4573,9 @@ GUINetTextm2 db 0,0,0
GUINetTextn2 db '_',0
GUINetTexto2 db 'BACK BUFFER',0
GUINetTextp2 db 'ALLOW UDP CONNECTION',0
GUINetTextr1 db 'NETPLAY IS DISABLED IN',0
GUINetTextr2 db 'WIP VERSIONS UNTIL',0
GUINetTextr3 db 'FURTHER NOTICE',0
;GUINetTextr1 db 'PLEASE RESTART ZSNESW',0
;GUINetTextr2 db 'BEFORE STARTING A NEW',0
;GUINetTextr3 db 'NETPLAY SESSION',0
GUINetTextr1 db 'PLEASE RESTART ZSNESW',0
GUINetTextr2 db 'BEFORE STARTING A NEW',0
GUINetTextr3 db 'NETPLAY SESSION',0
%ifdef __MSDOS__
BaudVal dd 9600,14400,19200,28800,38400,57600,115200

View File

@@ -1,3 +1,3 @@
/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 init.obj initc.obj uic.obj patch.obj ui.obj vcache.obj effects\water.obj effects\smoke.obj effects\burn.obj version.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\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 init.obj initc.obj uic.obj patch.obj ui.obj vcache.obj effects\water.obj effects\smoke.obj effects\burn.obj version.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\hq2x16.obj video\hq2x32.obj video\hq3x16.obj video\hq3x32.obj video\hq4x16.obj video\hq4x32.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\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

@@ -934,8 +934,9 @@ NEWSYM GUIRATIO, db 0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0
NEWSYM GUIBIFIL, db 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1 ; binlinear = 1, nearest = 0
NEWSYM GUITBWVID, db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; Triple Buffering (Win)
NEWSYM GUIMBVID, db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
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
NEWSYM GUIHQ2X, db 0,0,0,1,0,1,1,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 ; hq2x filter
NEWSYM GUIHQ3X, db 0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0 ; hq3x filter
NEWSYM GUIHQ4X, db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,1,1 ; hq4x filter
SECTION .text

View File

@@ -66,12 +66,14 @@ extern void SwitchFullScreen (void);
extern unsigned char cvidmode;
DWORD SMode=0;
DWORD DSMode=0;
DWORD prevHQ3XMode=-1;
DWORD prevHQMode=-1;
extern BYTE GUIWFVID[];
extern BYTE GUISMODE[];
extern BYTE GUIDSMODE[];
extern BYTE GUIHQ2X[];
extern BYTE GUIHQ3X[];
extern BYTE GUIHQ4X[];
/* JOYSTICK AND KEYBOARD INPUT */
SDL_Joystick *JoystickInput[5];

View File

@@ -51,7 +51,9 @@ VIDEOBJ=${VIDEODIR}/makev16b.obj ${VIDEODIR}/makev16t.obj ${VIDEODIR}/makevid.ob
${VIDEODIR}/newgfx16.obj ${VIDEODIR}/newgfx2.obj ${VIDEODIR}/newgfx.obj\
${VIDEODIR}/m716text.obj ${VIDEODIR}/2xsaiw.obj\
${VIDEODIR}/procvid.obj ${VIDEODIR}/sw_draw.obj\
${VIDEODIR}/hq3x16.obj ${VIDEODIR}/hq3x32.obj
${VIDEODIR}/hq2x16.obj ${VIDEODIR}/hq2x32.obj\
${VIDEODIR}/hq3x16.obj ${VIDEODIR}/hq3x32.obj\
${VIDEODIR}/hq4x16.obj ${VIDEODIR}/hq4x32.obj
WINOBJ=${WINDIR}/copyvwin.obj \
${WINDIR}/winintrf.obj ${WINDIR}/winlink.obj ${WINDIR}/zloaderw.obj\
@@ -119,8 +121,12 @@ ${EFFECTSDIR}/burn.obj: ${EFFECTSDIR}/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}/hq2x16.obj: ${VIDEODIR}/hq2x16.asm macros.mac
${VIDEODIR}/hq2x32.obj: ${VIDEODIR}/hq2x32.asm macros.mac
${VIDEODIR}/hq3x16.obj: ${VIDEODIR}/hq3x16.asm macros.mac
${VIDEODIR}/hq3x32.obj: ${VIDEODIR}/hq3x32.asm macros.mac
${VIDEODIR}/hq4x16.obj: ${VIDEODIR}/hq4x16.asm macros.mac
${VIDEODIR}/hq4x32.obj: ${VIDEODIR}/hq4x32.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\

2172
zsnes/src/video/hq2x16.asm Normal file

File diff suppressed because it is too large Load Diff

2145
zsnes/src/video/hq2x32.asm Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -26,38 +26,20 @@ EXTSYM vidbuffer,curblank,MMXSupport,GUIOn,GUIOn2,
EXTSYM vidbufferofsb
EXTSYM FilteredGUI,resolutn,lineleft,cfield
EXTSYM hirestiledat,newengen,SpecialLine,HalfTrans
EXTSYM hq3xFilter
EXTSYM hqFilter
EXTSYM AddEndBytes
EXTSYM NumBytesPerLine
EXTSYM WinVidMemStart
EXTSYM BitConv32Ptr
EXTSYM RGBtoYUVPtr
EXTSYM prevline, nextline, deltaptr, xcounter
EXTSYM w1, w2, w3, w4, w5, w6, w7, w8, w9
EXTSYM reg_blank, const7, cross, threshold
%ifdef __MINGW__
NEWSYM CopyVWinAsmStart
%endif
SECTION .bss
NEWSYM prevline, resd 1
NEWSYM nextline, resd 1
NEWSYM deltaptr, resd 1
NEWSYM xcounter, resd 1
NEWSYM w1, resd 1
NEWSYM w2, resd 1
NEWSYM w3, resd 1
NEWSYM w4, resd 1
NEWSYM w5, resd 1
NEWSYM w6, resd 1
NEWSYM w7, resd 1
NEWSYM w8, resd 1
NEWSYM w9, resd 1
NEWSYM cross, resd 1
SECTION .data
NEWSYM reg_blank, dd 0,0
NEWSYM const7, dd 0x00070007,0x00000007
NEWSYM threshold, dd 0x00300706,0x00000000
SECTION .text
%macro TestDiff 2
@@ -409,12 +391,12 @@ SECTION .text
mov [edi+ebx*2+4],ax
%endmacro
NEWSYM copy768x720x16bwin
NEWSYM hq3x_16b
cmp byte[curblank],40h
jne .startcopy
ret
.startcopy
push es
pushad
mov ax,ds
mov es,ax
mov esi,[vidbuffer]
@@ -429,7 +411,7 @@ NEWSYM copy768x720x16bwin
.filtergui
cmp byte[MMXSupport],0
je nointerp
cmp byte[hq3xFilter],0
cmp byte[hqFilter],0
jne hq3x
;----------------------------;
@@ -458,7 +440,7 @@ nointerp:
add esi,64
dec dl
jnz near .loopy
pop es
popad
ret
;----------------------------;
@@ -2607,7 +2589,7 @@ hq3x:
jmp .loopy
.fin
emms
pop es
popad
ret
HighResProc:

View File

@@ -26,7 +26,7 @@ EXTSYM vidbuffer,curblank,MMXSupport,GUIOn,GUIOn2,
EXTSYM vidbufferofsb
EXTSYM FilteredGUI,resolutn,lineleft,cfield
EXTSYM hirestiledat,newengen,SpecialLine
EXTSYM hq3xFilter
EXTSYM hqFilter
EXTSYM AddEndBytes
EXTSYM NumBytesPerLine
EXTSYM WinVidMemStart
@@ -34,23 +34,13 @@ EXTSYM BitConv32Ptr
EXTSYM RGBtoYUVPtr
EXTSYM prevline, nextline, deltaptr, xcounter
EXTSYM w1, w2, w3, w4, w5, w6, w7, w8, w9
EXTSYM c1, c2, c3, c4, c5, c6, c7, c8, c9
EXTSYM reg_blank, const7, cross, threshold
%ifdef __MINGW__
NEWSYM CopyVWinAsmStart
%endif
SECTION .bss
NEWSYM c1, resd 1
NEWSYM c2, resd 1
NEWSYM c3, resd 1
NEWSYM c4, resd 1
NEWSYM c5, resd 1
NEWSYM c6, resd 1
NEWSYM c7, resd 1
NEWSYM c8, resd 1
NEWSYM c9, resd 1
SECTION .text
%macro TestDiff 2
@@ -360,12 +350,12 @@ SECTION .text
mov [edi+ebx*2+8],eax
%endmacro
NEWSYM copy768x720x32bwin
NEWSYM hq3x_32b
cmp byte[curblank],40h
jne .startcopy
ret
.startcopy
push es
pushad
mov ax,ds
mov es,ax
mov esi,[vidbuffer]
@@ -380,7 +370,7 @@ NEWSYM copy768x720x32bwin
.filtergui
cmp byte[MMXSupport],0
je nointerp
cmp byte[hq3xFilter],0
cmp byte[hqFilter],0
jne hq3x
;----------------------------;
@@ -413,7 +403,7 @@ nointerp:
add esi,64
dec byte[lineleft]
jnz near .loopy
pop es
popad
ret
;----------------------------;
@@ -2639,7 +2629,7 @@ hq3x:
jmp .loopy
.fin
emms
pop es
popad
ret
HighResProc:

4288
zsnes/src/video/hq4x16.asm Normal file

File diff suppressed because it is too large Load Diff

4212
zsnes/src/video/hq4x32.asm Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1272,7 +1272,9 @@ 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
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
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,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0 ; hq3x filter
NEWSYM GUIHQ2X, db 0,0,0,1,0,1,1,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 ; hq2x filter
NEWSYM GUIHQ3X, db 0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0 ; hq3x filter
NEWSYM GUIHQ4X, db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,1,1 ; hq4x filter
SECTION .text

View File

@@ -1286,17 +1286,19 @@ extern "C" DWORD converta;
extern "C" unsigned int BitConv32Ptr;
extern "C" unsigned int RGBtoYUVPtr;
extern "C" unsigned char cvidmode;
extern "C" unsigned char hq3xFilter;
extern "C" unsigned char hqFilter;
DWORD FirstVid=1;
DWORD FirstFull=1;
DWORD SMode=0;
DWORD DSMode=0;
DWORD prevHQ3XMode=-1;
DWORD prevHQMode=-1;
WORD Refresh = 0;
extern "C" BYTE GUIWFVID[];
extern "C" BYTE GUISMODE[];
extern "C" BYTE GUIDSMODE[];
extern "C" BYTE GUIHQ2X[];
extern "C" BYTE GUIHQ3X[];
extern "C" BYTE GUIHQ4X[];
int InitDirectDraw()
{
@@ -1345,9 +1347,18 @@ int InitDirectDraw()
FullScreen=GUIWFVID[cvidmode];
DSMode=GUIDSMODE[cvidmode];
DWORD HQMode=0;
if ( hqFilter != 0 )
{
if ( GUIHQ2X[cvidmode] != 0 ) HQMode=2;
if ( GUIHQ3X[cvidmode] != 0 ) HQMode=3;
if ( GUIHQ4X[cvidmode] != 0 ) HQMode=4;
}
if (FullScreen == 1 && DSMode == 0)
{
if (SurfaceX == 768 && SurfaceY == 720)
if ( HQMode != 0 )
{
int marginx = (rcWindow.right - rcWindow.left - BlitArea.right + BlitArea.left)/2;
int marginy = (rcWindow.bottom - rcWindow.top - BlitArea.bottom + BlitArea.top)/2;
@@ -1512,7 +1523,7 @@ int InitDirectDraw()
return FALSE;
}
if ((SurfaceX==512) || (SurfaceX==640))
if (((SurfaceX==512) || (SurfaceX==640)) && (HQMode==0))
AltSurface = 1;
}
@@ -1711,15 +1722,19 @@ void initwinvideo(void)
//MK: unused 2003/08/31
//RECT swrect;
DWORD newmode=0;
DWORD HQ3XMode=0;
DWORD HQMode=0;
if ((GUIHQ3X[cvidmode]!=0) && (hq3xFilter!=0))
HQ3XMode=1;
if ( hqFilter != 0 )
{
if ( GUIHQ2X[cvidmode] != 0 ) HQMode=2;
if ( GUIHQ3X[cvidmode] != 0 ) HQMode=3;
if ( GUIHQ4X[cvidmode] != 0 ) HQMode=4;
}
if ((CurMode!=cvidmode) || (prevHQ3XMode!=HQ3XMode))
if ((CurMode!=cvidmode) || (prevHQMode!=HQMode))
{
CurMode=cvidmode;
prevHQ3XMode=HQ3XMode;
prevHQMode=HQMode;
newmode=1;
SurfaceX=256;
SurfaceY=240;
@@ -1907,10 +1922,20 @@ void initwinvideo(void)
break;
}
if (HQ3XMode!=0)
switch ( HQMode )
{
SurfaceX=768;
SurfaceY=720;
case 2:
SurfaceX=512;
SurfaceY=480;
break;
case 3:
SurfaceX=768;
SurfaceY=720;
break;
case 4:
SurfaceX=1024;
SurfaceY=960;
break;
}
BlitArea.top = 0;
@@ -1935,7 +1960,8 @@ void initwinvideo(void)
BlitArea.bottom = SurfaceY;
}
if (SurfaceX == 768) BlitArea.bottom = (SurfaceY/240)*resolutn;
if ( HQMode != 0 )
BlitArea.bottom = (SurfaceY/240)*resolutn;
if (PrevRes == 0) PrevRes = resolutn;
}
@@ -1970,7 +1996,7 @@ void initwinvideo(void)
if (FullScreen == 1 && DSMode == 0)
{
if (SurfaceX == 768 && SurfaceY == 720)
if ( HQMode != 0 )
{
int marginx = (rcWindow.right - rcWindow.left - BlitArea.right + BlitArea.left)/2;
int marginy = (rcWindow.bottom - rcWindow.top - BlitArea.bottom + BlitArea.top)/2;
@@ -2250,8 +2276,12 @@ extern DWORD AddEndBytes;
extern DWORD NumBytesPerLine;
extern unsigned char * WinVidMemStart;
extern void copy640x480x16bwin(void);
extern void copy768x720x16bwin(void);
extern void copy768x720x32bwin(void);
extern void hq2x_16b(void);
extern void hq2x_32b(void);
extern void hq3x_16b(void);
extern void hq3x_32b(void);
extern void hq4x_16b(void);
extern void hq4x_32b(void);
extern unsigned char NGNoTransp;
extern unsigned char newengen;
extern void ClearWin16();
@@ -2338,7 +2368,7 @@ extern _int64 copymaskG = 0x0000FC000000FC00;
extern _int64 copymagic = 0x0008010000080100;
extern _int64 coef = 0x0066009a0066009a;
extern BYTE MotionBlur;
//extern BYTE MotionBlur;
extern WORD totlines;
void drawscreenwin(void)
@@ -2367,7 +2397,7 @@ void drawscreenwin(void)
{
BlitArea.bottom = (SurfaceY/240)*224;
if (SurfaceX == 512 && DSMode == 1) BlitArea.bottom = SurfaceY;
if ((SurfaceX == 256 || SurfaceX == 512 || SurfaceX == 768) && (SMode == 0 && DSMode == 0)) WindowHeight = (WindowHeight/239)*224;
if ((SurfaceX == 256 || SurfaceX == 512 || SurfaceX == 768 || SurfaceX == 1024) && (SMode == 0 && DSMode == 0)) WindowHeight = (WindowHeight/239)*224;
initwinvideo();
PrevRes = resolutn;
}
@@ -2376,22 +2406,24 @@ void drawscreenwin(void)
{
BlitArea.bottom = (SurfaceY/240)*239;
if (SurfaceX == 512 && DSMode == 1) BlitArea.bottom = SurfaceY;
if ((SurfaceX == 256 || SurfaceX == 512 || SurfaceX == 768) && (SMode == 0 && DSMode == 0)) WindowHeight = (WindowHeight/224)*239;
if ((SurfaceX == 256 || SurfaceX == 512 || SurfaceX == 768 || SurfaceX == 1024) && (SMode == 0 && DSMode == 0)) WindowHeight = (WindowHeight/224)*239;
initwinvideo();
PrevRes = resolutn;
}
DWORD HQ3XMode=0;
DWORD HQMode=0;
if (MMXSupport == 0)
hq3xFilter=0;
else
hqFilter=0;
if ( hqFilter != 0 )
{
if ((GUIHQ3X[cvidmode]!=0) && (hq3xFilter!=0))
HQ3XMode=1;
if ( GUIHQ2X[cvidmode] != 0 ) HQMode=2;
if ( GUIHQ3X[cvidmode] != 0 ) HQMode=3;
if ( GUIHQ4X[cvidmode] != 0 ) HQMode=4;
}
if (prevHQ3XMode!=HQ3XMode)
if (prevHQMode!=HQMode)
initwinvideo();
SurfBufD=(DWORD) &SurfBuf[0];
@@ -2415,45 +2447,47 @@ void drawscreenwin(void)
InitDirectDraw();
}
if (SurfaceX == 256 && SurfaceY == 240)
if ( HQMode == 0 )
{
switch (BitDepth)
{
case 16:
{
DrawWin256x224x16();
break;
}
case 32:
{
DrawWin256x224x32();
break;
}
if (SurfaceX == 256 && SurfaceY == 240)
{
switch (BitDepth)
{
case 16:
{
DrawWin256x224x16();
break;
}
case 32:
{
DrawWin256x224x32();
break;
}
SURFDW=(DWORD *) &SurfBuf[(resolutn-1)*pitch];
color32=0x7F000000;
SURFDW=(DWORD *) &SurfBuf[(resolutn-1)*pitch];
color32=0x7F000000;
for(i=0;i<256;i++)
{
SURFDW[i]=color32;
}
for(i=0;i<256;i++)
{
SURFDW[i]=color32;
}
SURFDW=(DWORD *) &SurfBuf[resolutn*pitch];
color32=0x7F000000;
SURFDW=(DWORD *) &SurfBuf[resolutn*pitch];
color32=0x7F000000;
for(i=0;i<256;i++)
{
SURFDW[i]=color32;
}
break;
case 24:
for(i=0;i<256;i++)
{
SURFDW[i]=color32;
}
break;
case 24:
MessageBox (NULL, "Sorry. ZSNESw does not work in windowed 24 bit color modes. \nClick 'OK' to switch to a full screen mode.", "DDRAW Error" , MB_ICONERROR );
cvidmode=3;
initwinvideo();
Sleep(1000);
drawscreenwin();
break;
default:
default:
UnlockSurface();
MessageBox (NULL, "Mode only available in 16 and 32 bit color", "DDRAW Error" , MB_ICONERROR );
cvidmode=2;
@@ -2461,28 +2495,28 @@ void drawscreenwin(void)
Sleep(1000);
drawscreenwin();
break;
}
}
}
}
if (SurfaceX == 320 && SurfaceY == 240)
{
switch (BitDepth)
{
case 16:
{
DrawWin320x240x16();
break;
}
case 32:
if (SurfaceX == 320 && SurfaceY == 240)
{
switch (BitDepth)
{
case 16:
{
DrawWin320x240x16();
break;
}
case 32:
for(j=0;j<8;j++)
{
SURFDW=(DWORD *) &SurfBuf[j*pitch];
color32=0x7F000000;
for(i=0;i<320;i++)
{
SURFDW[i]=color32;
}
SURFDW=(DWORD *) &SurfBuf[j*pitch];
color32=0x7F000000;
for(i=0;i<320;i++)
{
SURFDW[i]=color32;
}
}
for(j=8;(int)j<(resolutn-1)+8;j++)
@@ -2523,7 +2557,7 @@ void drawscreenwin(void)
}
}
break;
default:
default:
UnlockSurface();
MessageBox (NULL, "Mode only available in 16 and 32 bit color", "DDRAW Error" , MB_ICONERROR );
cvidmode=2;
@@ -2531,13 +2565,13 @@ void drawscreenwin(void)
Sleep(1000);
drawscreenwin();
break;
}
}
}
}
if (SurfaceX==512 && (SurfaceY==448 || SurfaceY==480))
{
switch (BitDepth)
{
if (SurfaceX==512 && (SurfaceY==448 || SurfaceY==480))
{
switch (BitDepth)
{
case 16:
case 32: // using 16bpp AltSurface
AddEndBytes=pitch-1024;
@@ -2557,13 +2591,13 @@ void drawscreenwin(void)
initwinvideo();
Sleep(1000);
drawscreenwin();
}
}
}
}
if (SurfaceX == 640 && SurfaceY == 480)
{
switch (BitDepth)
{
if (SurfaceX == 640 && SurfaceY == 480)
{
switch (BitDepth)
{
case 16:
case 32: // using 16bpp AltSurface
AddEndBytes=pitch-1024;
@@ -2583,44 +2617,48 @@ void drawscreenwin(void)
initwinvideo();
Sleep(1000);
drawscreenwin();
}
}
}
}
if (SurfaceX == 768 && SurfaceY == 720)
else
{
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();
}
// HQMode != 0
NumBytesPerLine = pitch;
AddEndBytes = pitch - SurfaceX*(BitDepth/8);
WinVidMemStart=&SurfBuf[0];
switch (BitDepth)
{
case 16:
{
switch (HQMode)
{
case 2: hq2x_16b(); break;
case 3: hq3x_16b(); break;
case 4: hq4x_16b(); break;
}
break;
}
case 32:
{
switch (HQMode)
{
case 2: hq2x_32b(); break;
case 3: hq3x_32b(); break;
case 4: hq4x_32b(); break;
}
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();
DrawScreen();
}