Updated interpolation code

This commit is contained in:
pagefault
2001-09-18 02:53:20 +00:00
parent 98a8d23a2d
commit 81f4775ca7
3 changed files with 104 additions and 68 deletions

View File

@@ -29,9 +29,11 @@ EXTSYM HalfTransB,HalfTransC
NEWSYM CopyVWinAsmStart NEWSYM CopyVWinAsmStart
NEWSYM AddEndBytes, dd 0 ; Number of bytes between each line SECTION .bss
NEWSYM NumBytesPerLine, dd 0 ; Total number of bytes per line (1024+AddEndBytes) NEWSYM AddEndBytes, resd 1 ; Number of bytes between each line
NEWSYM WinVidMemStart, dd 0 NEWSYM NumBytesPerLine, resd 1 ; Total number of bytes per line (1024+AddEndBytes)
NEWSYM WinVidMemStart, resd 1
SECTION .text
NEWSYM copy640x480x16bwin NEWSYM copy640x480x16bwin
cmp byte[curblank],40h cmp byte[curblank],40h
@@ -1559,7 +1561,9 @@ NEWSYM interpolate640x480x16bwin
pop es pop es
ret ret
ALIGN32 SECTION .bss
InterPtr dd 0 ;ALIGN32
InterPtr resd 1
SECTION .text
NEWSYM CopyVWinAsmEnd NEWSYM CopyVWinAsmEnd

View File

@@ -224,6 +224,7 @@ PreTripleBuffer:
ret ret
%endif %endif
SECTION .data
VidModeSize dd 0,0,0,0,0,0,0,320*240,320*240*2,0,320*480,320*480*2 VidModeSize dd 0,0,0,0,0,0,0,320*240,320*240*2,0,320*480,320*480*2
dd 512*384,512*384*2,640*480,640*480*2 dd 512*384,512*384*2,640*480,640*480*2
VidModeLine dd 0,0,0,0,0,0,0,240,240,0,480,480,384,384,480,480 VidModeLine dd 0,0,0,0,0,0,0,240,240,0,480,480,384,384,480,480
@@ -231,10 +232,13 @@ NEWSYM VidStartDraw, dd 0
VidModeComp db 0,0,0,0,0,0,0,1,1,1,1,1,1,1,1 VidModeComp db 0,0,0,0,0,0,0,1,1,1,1,1,1,1,1
CVidStartAd db 0 CVidStartAd db 0
ApplyStart db 4 ApplyStart db 4
NEWSYM NextLineStart, dd 0
NEWSYM LastLineStart, dd 0 SECTION .bss
NEWSYM FlipWait, db 0 NEWSYM NextLineStart, resd 1
NEWSYM TriplebufTech, db 0 NEWSYM LastLineStart, resd 1
NEWSYM FlipWait, resb 1
NEWSYM TriplebufTech, resb 1
SECTION .text
%ifdef __MSDOS__ %ifdef __MSDOS__
NEWSYM DosDrawScreen NEWSYM DosDrawScreen
@@ -487,8 +491,10 @@ NEWSYM copymodex224
out dx,al out dx,al
mov byte[whichpage],0 mov byte[whichpage],0
ret ret
.startesi dd 0 SECTION .bss
.startedi dd 0 .startesi resd 1
.startedi resd 1
SECTION .text
;******************************************************* ;*******************************************************
; CopyModeX 240 Copies buffer into unchained 320x240 ; CopyModeX 240 Copies buffer into unchained 320x240
@@ -650,8 +656,11 @@ NEWSYM copymodex240
out dx,al out dx,al
mov byte[whichpage],0 mov byte[whichpage],0
ret ret
.startesi dd 0 SECTION .bss
.startedi dd 0 .startesi resd 1
.startedi resd 1
SECTION .text
;******************************************************* ;*******************************************************
; CopyModeX 256 Copies buffer into unchained 320x256 ; CopyModeX 256 Copies buffer into unchained 320x256
@@ -807,11 +816,12 @@ NEWSYM copymodex256
out dx,al out dx,al
mov byte[whichpage],0 mov byte[whichpage],0
ret ret
.startesi dd 0 SECTION .bss
.startedi dd 0 .startesi resd 1
.startedi resd 1
NEWSYM whichpage, db 0 ; active page and visual page locations
NEWSYM whichpage, resb 1 ; active page and visual page locations
SECTION .text
;******************************************************* ;*******************************************************
; CopyModeQ 224 Copies buffer into chained 256x224 ; CopyModeQ 224 Copies buffer into chained 256x224
@@ -1217,7 +1227,8 @@ copyvesa2320x480x8ng:
;******************************************************* ;*******************************************************
%endif %endif
ALIGN32 SECTION .data ALIGN = 32
NEWSYM EagleHold, dd 0 NEWSYM EagleHold, dd 0
NEWSYM smallscreenon, dd 0 NEWSYM smallscreenon, dd 0
NEWSYM smallscreence, dd 0 NEWSYM smallscreence, dd 0
@@ -1225,6 +1236,7 @@ NEWSYM CurrentGUIOn, dd 0
vesavaland dd 0,0 vesavaland dd 0,0
mmxvalanda dd 11111111110000001111111111000000b,11111111110000001111111111000000b mmxvalanda dd 11111111110000001111111111000000b,11111111110000001111111111000000b
mmxvalandb dd 00000000000111110000000000011111b,00000000000111110000000000011111b mmxvalandb dd 00000000000111110000000000011111b,00000000000111110000000000011111b
SECTION .text
%ifdef __MSDOS__ %ifdef __MSDOS__
NEWSYM copyvesa2640x480x8bgui NEWSYM copyvesa2640x480x8bgui
@@ -2132,9 +2144,11 @@ NEWSYM copyvesa2512x384x8b
jnz .b2 jnz .b2
jmp .returnloop jmp .returnloop
.scratio db 0 SECTION .bss
.lastrep db 0 .scratio resb 1
.p512 db 0 .lastrep resb 1
.p512 resb 1
SECTION .text
NEWSYM copyvesa2512x384x8ng NEWSYM copyvesa2512x384x8ng
push es push es
@@ -2210,9 +2224,11 @@ NEWSYM copyvesa2512x384x8ng
jnz .b jnz .b
jmp .returnloop jmp .returnloop
.scratio db 0 SECTION .bss
.lastrep db 0 .scratio resb 1
.p512 db 0 .lastrep resb 1
.p512 resb 1
SECTION .text
;******************************************************* ;*******************************************************
; Copy VESA2 320x240x16b Copies buffer to 320x240x16bVB2 ; Copy VESA2 320x240x16b Copies buffer to 320x240x16bVB2
@@ -2396,8 +2412,10 @@ NEWSYM copyvesa2320x240x16b
pop es pop es
ret ret
NEWSYM palresvalng, dd 0,0 SECTION .bss
NEWSYM palresvalngb, dd 0,0 NEWSYM palresvalng, resd 2
NEWSYM palresvalngb, resd 2
SECTION .text
%macro copya320x240 0 %macro copya320x240 0
mov [es:edi],dx mov [es:edi],dx
@@ -2408,14 +2426,15 @@ NEWSYM palresvalngb, dd 0,0
%endmacro %endmacro
%endif %endif
ALIGN32 SECTION .bss ALIGN = 32
NEWSYM rescompareng, dd 0 NEWSYM rescompareng, resd 1
NEWSYM nextdrawallng, dd 0 NEWSYM nextdrawallng, resd 1
NEWSYM prevcol0ng, dd 0 NEWSYM prevcol0ng, resd 1
NEWSYM numbytelng, dd 0 NEWSYM numbytelng, resd 1
NEWSYM lineleft, dd 0 NEWSYM lineleft, resd 1
NEWSYM lineleft2, dd 0 NEWSYM lineleft2, resd 1
bankpos dd 0 bankpos resd 1
SECTION .text
%ifdef __MSDOS__ %ifdef __MSDOS__
@@ -4625,8 +4644,9 @@ MMXInterpolFS:
pop es pop es
ret ret
ALIGN32 SECTION .bss ALIGN=32
.interpspad dd 0,0,0,0,0,0,0,0 .interpspad resd 8
SECTION .text
MMXInterpol: MMXInterpol:
@@ -4662,7 +4682,7 @@ MMXInterpol:
movq mm3,mm0 movq mm3,mm0
movq mm4,mm0 movq mm4,mm0
movq mm1,[esi+2] movq mm1,[esi+2]
pand mm3,mm1 por mm3,mm1
pand mm0,mm2 pand mm0,mm2
pand mm1,mm2 pand mm1,mm2
psrlw mm0,1 psrlw mm0,1
@@ -4704,7 +4724,7 @@ MMXInterpol:
movq mm3,mm0 movq mm3,mm0
movq mm4,mm0 movq mm4,mm0
movq mm1,[esi+2] movq mm1,[esi+2]
pand mm3,mm1 por mm3,mm1
pand mm0,mm2 pand mm0,mm2
pand mm1,mm2 pand mm1,mm2
psrlw mm0,1 psrlw mm0,1
@@ -4720,7 +4740,7 @@ MMXInterpol:
punpckhwd mm5,mm0 punpckhwd mm5,mm0
movq [edx],mm4 movq [edx],mm4
movq [edx+8],mm5 movq [edx+8],mm5
pand mm0,mm4 por mm0,mm4
movq mm0,mm6 movq mm0,mm6
pand mm4,mm2 pand mm4,mm2
pand mm6,mm2 pand mm6,mm2
@@ -4730,7 +4750,7 @@ MMXInterpol:
paddd mm4,mm6 paddd mm4,mm6
paddw mm4,mm0 paddw mm4,mm0
movq mm0,mm5 movq mm0,mm5
pand mm0,mm7 por mm0,mm7
pand mm5,mm2 pand mm5,mm2
pand mm7,mm2 pand mm7,mm2
psrlw mm5,1 psrlw mm5,1
@@ -4767,7 +4787,9 @@ MMXInterpol:
emms emms
pop es pop es
ret ret
.blank dd 0,0 SECTION .bss
.blank resd 2
SECTION .text
.scanlines .scanlines
inc dl inc dl
@@ -4901,7 +4923,7 @@ MMXInterpol:
movq mm3,mm0 movq mm3,mm0
movq mm4,mm0 movq mm4,mm0
movq mm1,[esi+2] movq mm1,[esi+2]
pand mm3,mm1 por mm3,mm1
pand mm0,mm2 pand mm0,mm2
pand mm1,mm2 pand mm1,mm2
psrlw mm0,1 psrlw mm0,1
@@ -4956,8 +4978,9 @@ MMXInterpol:
pop es pop es
ret ret
ALIGN32 SECTION .bss ALIGN=32
NEWSYM InterPtr, dd 0 NEWSYM InterPtr, resd 1
SECTION .text
NEWSYM interpolate640x480x16b NEWSYM interpolate640x480x16b
cmp byte[FPUCopy],2 cmp byte[FPUCopy],2
@@ -5262,8 +5285,8 @@ NEWSYM interpolate640x480x16b
; Copy VESA2 640x480x16b, bit setting 1:5:5:5 ; Copy VESA2 640x480x16b, bit setting 1:5:5:5
;******************************************************* ;*******************************************************
ALIGN32 SECTION .bss ALIGN = 32
.interpspad dd 0,0,0,0,0,0,0,0 .interpspad resd 8
;******************************************************* ;*******************************************************
; Copy VESA2 512x384x16b Copies buffer to 512x384x16bV2 ; Copy VESA2 512x384x16b Copies buffer to 512x384x16bV2
@@ -5322,8 +5345,10 @@ NEWSYM copyvesa2512x384x16bgui
pop es pop es
ret ret
.scratio db 0 SECTION .bss
.lastrep db 0 .scratio resb 1
.lastrep resb 1
SECTION .text
NEWSYM copyvesa2512x384x16b NEWSYM copyvesa2512x384x16b
cmp byte[vesa2red10],1 cmp byte[vesa2red10],1
@@ -5420,9 +5445,11 @@ NEWSYM copyvesa2512x384x16b
jnz .b2 jnz .b2
jmp .returnloop jmp .returnloop
.scratio db 0 SECTION .bss
.lastrep db 0 .scratio resb 1
.p512 db 0 .lastrep resb 1
.p512 resb 1
SECTION .text
; Temporary ; Temporary
@@ -5482,8 +5509,10 @@ NEWSYM tempcopy
popa popa
ret ret
.cocol db 0 SECTION .bss
.startbuf dd 0 .cocol resb 1
.startbuf resd 1
SECTION .text
NEWSYM allcache NEWSYM allcache
pushad pushad
@@ -5679,9 +5708,11 @@ NEWSYM allcache
popad popad
ret ret
.nbg dw 0 SECTION .bss
.a db 0 .nbg resw 1
.rowleft db 0 .a resb 1
.rowleft resb 1
SECTION .text
;******************************************************* ;*******************************************************
; Copy VESA1.2 640x480x16b ; Copy VESA1.2 640x480x16b

View File

@@ -27,15 +27,15 @@ EXTSYM vidbufferofsb
;EXTSYM Super2xSaI ;EXTSYM Super2xSaI
EXTSYM HalfTransB,HalfTransC EXTSYM HalfTransB,HalfTransC
%ifdef __MINGW__ %ifdef __MINGW__
NEWSYM CopyVWinAsmStart NEWSYM CopyVWinAsmStart
%endif %endif
SECTION .bss
NEWSYM AddEndBytes, dd 0 ; Number of bytes between each line NEWSYM AddEndBytes, resd 1 ; Number of bytes between each line
NEWSYM NumBytesPerLine, dd 0 ; Total number of bytes per line (1024+AddEndBytes) NEWSYM NumBytesPerLine, resd 1 ; Total number of bytes per line (1024+AddEndBytes)
NEWSYM WinVidMemStart, dd 0 NEWSYM WinVidMemStart, resd 1
SECTION .text
NEWSYM copy640x480x16bwin NEWSYM copy640x480x16bwin
cmp byte[curblank],40h cmp byte[curblank],40h
@@ -951,7 +951,7 @@ MMXInterpolwin:
movq mm3,mm0 movq mm3,mm0
movq mm4,mm0 movq mm4,mm0
movq mm1,[esi+2] movq mm1,[esi+2]
pand mm3,mm1 por mm3,mm1
pand mm0,mm2 pand mm0,mm2
pand mm1,mm2 pand mm1,mm2
psrlw mm0,1 psrlw mm0,1
@@ -992,7 +992,7 @@ MMXInterpolwin:
movq mm3,mm0 movq mm3,mm0
movq mm4,mm0 movq mm4,mm0
movq mm1,[esi+2] movq mm1,[esi+2]
pand mm3,mm1 por mm3,mm1
pand mm0,mm2 pand mm0,mm2
pand mm1,mm2 pand mm1,mm2
psrlw mm0,1 psrlw mm0,1
@@ -1008,8 +1008,8 @@ MMXInterpolwin:
punpckhwd mm5,mm0 punpckhwd mm5,mm0
movq [edx],mm4 movq [edx],mm4
movq [edx+8],mm5 movq [edx+8],mm5
pand mm0,mm4
movq mm0,mm6 movq mm0,mm6
por mm0,mm4
pand mm4,mm2 pand mm4,mm2
pand mm6,mm2 pand mm6,mm2
psrlw mm4,1 psrlw mm4,1
@@ -1018,7 +1018,7 @@ MMXInterpolwin:
paddd mm4,mm6 paddd mm4,mm6
paddw mm4,mm0 paddw mm4,mm0
movq mm0,mm5 movq mm0,mm5
pand mm0,mm7 por mm0,mm7
pand mm5,mm2 pand mm5,mm2
pand mm7,mm2 pand mm7,mm2
psrlw mm5,1 psrlw mm5,1
@@ -1194,7 +1194,7 @@ MMXInterpolwin:
movq mm3,mm0 movq mm3,mm0
movq mm4,mm0 movq mm4,mm0
movq mm1,[esi+2] movq mm1,[esi+2]
pand mm3,mm1 por mm3,mm1
pand mm0,mm2 pand mm0,mm2
pand mm1,mm2 pand mm1,mm2
psrlw mm0,1 psrlw mm0,1
@@ -1563,8 +1563,9 @@ NEWSYM interpolate640x480x16bwin
pop es pop es
ret ret
ALIGN32 SECTION .bss
InterPtr dd 0 InterPtr resd 1
SECTION .text
%ifdef __MINGW__ %ifdef __MINGW__