Upload
This commit is contained in:
commit
43352ff262
1291 changed files with 220976 additions and 0 deletions
493
GLENZ/VIDTWE.ASM
Normal file
493
GLENZ/VIDTWE.ASM
Normal file
|
|
@ -0,0 +1,493 @@
|
|||
;256 color tweaked routines
|
||||
|
||||
;routines ending in "1" are vector drawers:
|
||||
; DS:SI preserved
|
||||
; OUT 3C4,02h required
|
||||
; DS=CS & ES=vram required
|
||||
|
||||
ALIGN 4
|
||||
leftside db 1111b,1110b,1100b,1000b
|
||||
rightside db 0001b,0011b,0111b,1111b
|
||||
middledot db 0001b,0010b,0100b,1000b
|
||||
|
||||
ALIGN 4
|
||||
twpset PROC FAR
|
||||
;requires: OUT 3C4,2
|
||||
;DS:SI preserved, CX preserved!
|
||||
shl bx,1
|
||||
mov di,ds:rows[bx]
|
||||
mov bx,3
|
||||
and bx,dx
|
||||
sar dx,2
|
||||
add di,dx
|
||||
mov al,cs:middledot[bx]
|
||||
mov dx,3c5h
|
||||
out dx,al
|
||||
mov al,ds:color1
|
||||
mov es:[di],al
|
||||
ret
|
||||
twpset ENDP
|
||||
|
||||
twhline PROC FAR
|
||||
;requires: OUT 3C4,2
|
||||
;DS:SI must be preserved!
|
||||
;(ax,bx)-(dx,bx)
|
||||
cmp ax,dx
|
||||
jl hli1
|
||||
xchg ax,dx
|
||||
hli1:
|
||||
cmp ax,0
|
||||
jnl hli2
|
||||
cmp dx,0
|
||||
jl hli0
|
||||
xor ax,ax
|
||||
hli2: cmp dx,ds:wmaxx
|
||||
jng hli21
|
||||
cmp ax,ds:wmaxx
|
||||
jg hli0
|
||||
mov dx,ds:wmaxx
|
||||
|
||||
hli21: mov di,ax
|
||||
sar di,2
|
||||
mov cx,dx
|
||||
sar cx,2
|
||||
sub cx,di
|
||||
shl bx,1
|
||||
add di,ds:rows[bx]
|
||||
|
||||
mov bp,3
|
||||
and bp,ax
|
||||
mov bh,cs:leftside[bp]
|
||||
mov bp,3
|
||||
and bp,dx
|
||||
mov bl,cs:rightside[bp]
|
||||
mov dx,3c5h
|
||||
|
||||
;(di..si,bx)
|
||||
cmp cx,0
|
||||
je hli30
|
||||
;left side
|
||||
mov al,bh
|
||||
out dx,al
|
||||
mov al,ds:color1
|
||||
stosb
|
||||
dec cx
|
||||
mov ah,al
|
||||
;middle
|
||||
jcxz hli33
|
||||
mov al,0fh
|
||||
out dx,al
|
||||
mov al,ah
|
||||
test di,1
|
||||
jz hli32
|
||||
stosb
|
||||
dec cx
|
||||
hli32: shr cx,1
|
||||
rep stosw
|
||||
adc cx,cx
|
||||
rep stosb
|
||||
hli33: ;right side
|
||||
mov al,bl
|
||||
out dx,al
|
||||
mov al,ah
|
||||
mov es:[di],al
|
||||
hli0: ret
|
||||
hli30: ;end and beg in same byte
|
||||
mov al,bl
|
||||
and al,bh
|
||||
out dx,al
|
||||
mov al,ds:color1
|
||||
mov es:[di],al
|
||||
ret
|
||||
twhline ENDP
|
||||
|
||||
ALIGN 2
|
||||
;line variables
|
||||
xdif dw 0
|
||||
ydif dw 0
|
||||
xabs dw 0
|
||||
yabs dw 0
|
||||
xsgn dw 0
|
||||
ysgn dw 0
|
||||
xtmp dw 0
|
||||
ytmp dw 0
|
||||
|
||||
tmplnx dw 0
|
||||
tmplny dw 0
|
||||
|
||||
twpsetc PROC NEAR
|
||||
;(dx,bx)=(color), es must be 0a000h
|
||||
;uses nothing
|
||||
push ax
|
||||
push bx
|
||||
push cx
|
||||
push dx
|
||||
mov ch,al
|
||||
mov cl,dl
|
||||
shl bx,1
|
||||
mov bx,ds:rows[bx]
|
||||
sar dx,1
|
||||
sar dx,1
|
||||
add bx,dx
|
||||
and cl,3
|
||||
mov ax,102h
|
||||
mov dx,03c4h
|
||||
shl ah,cl
|
||||
out dx,ax
|
||||
mov al,ds:color1
|
||||
mov es:[bx],al
|
||||
psc0: pop dx
|
||||
pop cx
|
||||
pop bx
|
||||
pop ax
|
||||
ret
|
||||
twpsetc ENDP
|
||||
|
||||
twlineto PROC FAR
|
||||
;draw line from (cx,ax) to (dx,bx) with color (color)
|
||||
;requires es=vram, changes: ax
|
||||
push cx
|
||||
push si
|
||||
push di
|
||||
push bp
|
||||
push dx
|
||||
push bx
|
||||
|
||||
mov cs:tmplnx,cx
|
||||
mov cs:tmplny,ax
|
||||
|
||||
;set insider point as begin of line
|
||||
cmp dx,cs:wmaxx
|
||||
ja lt4
|
||||
cmp bx,cs:wmaxy
|
||||
ja lt4
|
||||
jmp lt5 ;dx,bx is inside, no changes
|
||||
lt4: ;dx,bx outside, swap
|
||||
xchg bx,cs:tmplny
|
||||
xchg dx,cs:tmplnx
|
||||
;check with new bx,dx
|
||||
cmp dx,wmaxx
|
||||
ja lt6
|
||||
cmp bx,wmaxy
|
||||
ja lt6
|
||||
jmp lt5 ;dx,bx is inside
|
||||
|
||||
lt6: ;both ends outside! Cut 'em here, not ready yet
|
||||
|
||||
lt5: mov cs:xtmp,dx
|
||||
mov cs:ytmp,bx
|
||||
;calc differencies xdif,ydif (+-) & abs difs, xabs,yabs (+)
|
||||
;and signs xsgn,ysgn (-1/0/1)
|
||||
xor cx,cx
|
||||
mov ax,cs:tmplnx
|
||||
sub ax,dx
|
||||
mov cs:xdif,ax
|
||||
or ax,ax
|
||||
je lt1
|
||||
inc cx
|
||||
test ax,32768
|
||||
jz lt1
|
||||
neg ax
|
||||
dec cx
|
||||
dec cx
|
||||
lt1: mov cs:xabs,ax
|
||||
mov cs:xsgn,cx
|
||||
|
||||
xor cx,cx
|
||||
mov ax,cs:tmplny
|
||||
sub ax,bx
|
||||
mov cs:ydif,ax
|
||||
or ax,ax
|
||||
je lt2
|
||||
inc cx
|
||||
test ax,32768
|
||||
jz lt2
|
||||
neg ax
|
||||
dec cx
|
||||
dec cx
|
||||
lt2: mov cs:yabs,ax
|
||||
mov cs:ysgn,cx
|
||||
|
||||
;which is bigger?
|
||||
cmp ax,cs:xabs
|
||||
ja lt3
|
||||
|
||||
;xbigger
|
||||
|
||||
;calc addl/h (si,di)
|
||||
jne lt9
|
||||
;1/1 addition, 45 degree curve
|
||||
cmp ax,0
|
||||
jne lt15
|
||||
mov dx,cs:tmplnx
|
||||
mov bx,cs:tmplny
|
||||
call twpsetc
|
||||
jmp lt10
|
||||
lt15: mov di,cs:ysgn
|
||||
mov si,65535
|
||||
jmp lt10
|
||||
lt9: mov dx,ax ;dx=yabs
|
||||
xor ax,ax
|
||||
div cs:xabs ;ax=lowadd
|
||||
mov si,ax
|
||||
mov di,cs:ysgn
|
||||
|
||||
lt10: mov ax,32767
|
||||
mov bp,cs:xsgn
|
||||
mov cx,cs:xabs
|
||||
inc cx
|
||||
mov dx,cs:xtmp
|
||||
mov bx,cs:ytmp
|
||||
lt7: call twpsetc
|
||||
add dx,bp ;xsgn
|
||||
add ax,si ;yaddl
|
||||
jnc lt8
|
||||
add bx,di ;ysgn
|
||||
lt8: loop lt7
|
||||
|
||||
jmp lt0
|
||||
|
||||
|
||||
lt3: ;ybigger
|
||||
|
||||
mov dx,cs:xabs
|
||||
xor ax,ax
|
||||
div cs:yabs ;ax=lowadd
|
||||
mov si,ax
|
||||
mov di,cs:xsgn
|
||||
|
||||
lt12: mov ax,32767
|
||||
mov bp,cs:ysgn
|
||||
mov cx,cs:yabs
|
||||
inc cx
|
||||
mov dx,cs:xtmp
|
||||
mov bx,cs:ytmp
|
||||
lt13: call twpsetc
|
||||
add bx,bp ;ysgn
|
||||
add ax,si ;xaddl
|
||||
jnc lt14
|
||||
add dx,di ;xsgn
|
||||
lt14: loop lt13
|
||||
|
||||
lt0: pop bx
|
||||
pop dx
|
||||
mov cs:tmplnx,dx
|
||||
mov cs:tmplny,bx
|
||||
pop bp
|
||||
pop di
|
||||
pop si
|
||||
pop cx
|
||||
ret
|
||||
twlineto ENDP
|
||||
|
||||
twhlinegroup PROC FAR
|
||||
;requires: OUT 3C4,2
|
||||
mov dx,3c4h
|
||||
mov al,2
|
||||
out dx,al
|
||||
|
||||
mov bx,gs:[si]
|
||||
add si,2
|
||||
dec bx
|
||||
push bx
|
||||
|
||||
hlg92: pop bx
|
||||
inc bx
|
||||
push bx
|
||||
mov ax,gs:[si]
|
||||
add si,2
|
||||
cmp ax,-32767
|
||||
jne hlg91
|
||||
pop bx
|
||||
ret
|
||||
hlg91: mov dx,ax
|
||||
mov ax,gs:[si]
|
||||
add si,2
|
||||
|
||||
cmp ax,dx
|
||||
jl hlg1
|
||||
xchg ax,dx
|
||||
hlg1:
|
||||
cmp ax,ds:wminx
|
||||
jnl hlg2
|
||||
cmp dx,ds:wminx
|
||||
jl hlg0
|
||||
mov ax,ds:wminx
|
||||
hlg2: cmp dx,ds:wmaxx
|
||||
jng hlg21
|
||||
cmp ax,ds:wmaxx
|
||||
jg hlg0
|
||||
mov dx,ds:wmaxx
|
||||
|
||||
hlg21: mov di,ax
|
||||
sar di,2
|
||||
mov cx,dx
|
||||
sar cx,2
|
||||
sub cx,di
|
||||
shl bx,1
|
||||
add di,ds:rows[bx]
|
||||
|
||||
mov bp,3
|
||||
and bp,ax
|
||||
mov bh,cs:leftside[bp]
|
||||
mov bp,3
|
||||
and bp,dx
|
||||
mov bl,cs:rightside[bp]
|
||||
mov dx,3c5h
|
||||
|
||||
;(di..si,bx)
|
||||
cmp cx,0
|
||||
je hlg30
|
||||
;left side
|
||||
mov al,bh
|
||||
out dx,al
|
||||
mov al,ds:color1
|
||||
stosb
|
||||
dec cx
|
||||
mov ah,al
|
||||
;middle
|
||||
jcxz hlg33
|
||||
mov al,0fh
|
||||
out dx,al
|
||||
mov al,ah
|
||||
test di,1
|
||||
jz hlg32
|
||||
stosb
|
||||
dec cx
|
||||
hlg32: shr cx,1
|
||||
rep stosw
|
||||
adc cx,cx
|
||||
rep stosb
|
||||
hlg33: ;right side
|
||||
mov al,bl
|
||||
out dx,al
|
||||
mov al,ah
|
||||
mov es:[di],al
|
||||
hlg0: jmp hlg92
|
||||
hlg30: ;end and beg in same byte
|
||||
mov al,bl
|
||||
and al,bh
|
||||
out dx,al
|
||||
mov al,ds:color1
|
||||
mov es:[di],al
|
||||
jmp hlg92
|
||||
twhlinegroup ENDP
|
||||
|
||||
ALIGN 4
|
||||
tmiddle LABEL BYTE
|
||||
db 00010001b
|
||||
db 00100010b
|
||||
db 01000100b
|
||||
db 10001000b
|
||||
tmpttt db 0
|
||||
twthlinegroup PROC NEAR
|
||||
;requires: OUT 3C4,2
|
||||
mov dx,3c4h
|
||||
mov al,2
|
||||
out dx,al
|
||||
|
||||
mov bx,gs:[si]
|
||||
add si,2
|
||||
dec bx
|
||||
jmp thlg93
|
||||
thlg92: pop bx
|
||||
add si,8
|
||||
thlg93: inc bx
|
||||
push bx
|
||||
mov dx,gs:[si] ;left
|
||||
cmp dx,-32767
|
||||
jne thlg91
|
||||
pop bx
|
||||
ret
|
||||
thlg91: mov ax,gs:[si+2] ;right
|
||||
|
||||
cmp ax,dx
|
||||
jl thlg1
|
||||
xchg ax,dx
|
||||
mov cx,gs:[si+4]
|
||||
xchg cx,gs:[si+6]
|
||||
mov gs:[si+4],cx
|
||||
thlg1:
|
||||
cmp ax,ds:wminx
|
||||
jnl thlg2
|
||||
cmp dx,ds:wminx
|
||||
jl thlg92
|
||||
mov ax,ds:wminx
|
||||
thlg2: cmp dx,ds:wmaxx
|
||||
jng thlg21
|
||||
cmp ax,ds:wmaxx
|
||||
jg thlg92
|
||||
mov dx,ds:wmaxx
|
||||
|
||||
thlg21: mov cx,dx
|
||||
sub cx,ax
|
||||
jcxz thlg92
|
||||
mov di,ax
|
||||
shr di,2
|
||||
shl bx,1
|
||||
add di,ds:rows[bx]
|
||||
|
||||
mov bx,ax
|
||||
and bx,3
|
||||
mov bp,cx ;count
|
||||
mov al,ds:tmiddle[bx]
|
||||
mov cs:tmpttt,al
|
||||
|
||||
mov ah,gs:[si+4] ;endx
|
||||
xor al,al
|
||||
sub ah,gs:[si+6] ;startx
|
||||
cwd
|
||||
idiv bp
|
||||
rol edi,16
|
||||
mov cl,ah
|
||||
mov ah,al
|
||||
xor al,al
|
||||
mov di,ax ;xadd
|
||||
rol edi,16
|
||||
|
||||
mov ah,gs:[si+5] ;endy
|
||||
xor al,al
|
||||
sub ah,gs:[si+7] ;starty
|
||||
cwd
|
||||
idiv bp
|
||||
|
||||
mov dh,al ;yadd
|
||||
xor dl,dl
|
||||
shl edx,16
|
||||
mov dh,ah
|
||||
mov dl,cl
|
||||
cmp dl,0
|
||||
jge thlg31
|
||||
dec dh
|
||||
thlg31:
|
||||
|
||||
movzx ebx,word ptr gs:[si+6] ;startxy/zero ylow
|
||||
xor ecx,ecx ;zero xlow
|
||||
|
||||
;....Exx..H....L....
|
||||
;ax - - <R>
|
||||
;bx ylow y x
|
||||
;cx xlow - tmp
|
||||
;dx yadd yah xah
|
||||
;si - - -
|
||||
;di xadd distbase
|
||||
;bp - - - <=tmp reserved for count
|
||||
mov al,cs:tmpttt
|
||||
thlg82: ;
|
||||
add ecx,edi
|
||||
mov cl,fs:[bx]
|
||||
adc ebx,edx
|
||||
adc bh,0
|
||||
;
|
||||
push dx
|
||||
mov dx,3c5h
|
||||
out dx,al
|
||||
mov es:[di],cl
|
||||
rol al,1
|
||||
adc di,0
|
||||
pop dx
|
||||
;
|
||||
dec bp
|
||||
jnz thlg82
|
||||
thlg0: jmp thlg92
|
||||
twthlinegroup ENDP
|
||||
Loading…
Reference in a new issue