Upload
This commit is contained in:
commit
43352ff262
1291 changed files with 220976 additions and 0 deletions
485
GLENZ/VIDNRM.ASM
Normal file
485
GLENZ/VIDNRM.ASM
Normal file
|
|
@ -0,0 +1,485 @@
|
|||
;256 color normal routines
|
||||
|
||||
;routines ending in "1" are vector drawers:
|
||||
; DS:SI preserved
|
||||
; OUT 3C4,02h required
|
||||
; DS=CS & ES=vram required
|
||||
|
||||
ALIGN 4
|
||||
nrpset 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,ds:middledot[bx]
|
||||
mov dx,3c5h
|
||||
out dx,al
|
||||
mov al,ds:color1
|
||||
mov es:[di],al
|
||||
ret
|
||||
nrpset ENDP
|
||||
|
||||
nrhline PROC FAR
|
||||
;requires: OUT 3C4,2
|
||||
;DS:SI must be preserved!
|
||||
;(ax,bx)-(dx,bx)
|
||||
cmp ax,dx
|
||||
jl nrhi1
|
||||
xchg ax,dx
|
||||
nrhi1:
|
||||
cmp ax,0
|
||||
jnl nrhi2
|
||||
cmp dx,0
|
||||
jl nrhi0
|
||||
xor ax,ax
|
||||
nrhi2: cmp dx,ds:wmaxx
|
||||
jng nrhi21
|
||||
cmp ax,ds:wmaxx
|
||||
jg nrhi0
|
||||
mov dx,ds:wmaxx
|
||||
|
||||
nrhi21: 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,ds:leftside[bp]
|
||||
mov bp,3
|
||||
and bp,dx
|
||||
mov bl,ds:rightside[bp]
|
||||
mov dx,3c5h
|
||||
|
||||
;(di..si,bx)
|
||||
cmp cx,0
|
||||
je nrhi30
|
||||
;left side
|
||||
mov al,bh
|
||||
out dx,al
|
||||
mov al,ds:color1
|
||||
stosb
|
||||
dec cx
|
||||
mov ah,al
|
||||
;middle
|
||||
jcxz nrhi33
|
||||
mov al,0fh
|
||||
out dx,al
|
||||
mov al,ah
|
||||
test di,1
|
||||
jz nrhi32
|
||||
stosb
|
||||
dec cx
|
||||
nrhi32: shr cx,1
|
||||
rep stosw
|
||||
adc cx,cx
|
||||
rep stosb
|
||||
nrhi33: ;right side
|
||||
mov al,bl
|
||||
out dx,al
|
||||
mov al,ah
|
||||
mov es:[di],al
|
||||
nrhi0: ret
|
||||
nrhi30: ;end and beg in same byte
|
||||
mov al,bl
|
||||
and al,bh
|
||||
out dx,al
|
||||
mov al,ds:color1
|
||||
mov es:[di],al
|
||||
ret
|
||||
nrhline ENDP
|
||||
|
||||
;line variables - shared - also in vidtwe.asm
|
||||
;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
|
||||
|
||||
nrpsetc 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,cs: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,cs:color1
|
||||
mov es:[bx],al
|
||||
pop dx
|
||||
pop cx
|
||||
pop bx
|
||||
pop ax
|
||||
ret
|
||||
nrpsetc ENDP
|
||||
|
||||
nrlineto PROC FAR
|
||||
;draw line from (cx,ax) to (dx,bx) with color (color)
|
||||
;requires ds=cs, es=vram, changes: ax
|
||||
push cx
|
||||
push si
|
||||
push di
|
||||
push bp
|
||||
push dx
|
||||
push bx
|
||||
|
||||
mov ds:tmplnx,cx
|
||||
mov ds:tmplny,ax
|
||||
|
||||
;set insider point as begin of line
|
||||
cmp dx,ds:wmaxx
|
||||
ja nrlt4
|
||||
cmp bx,wmaxy
|
||||
ja nrlt4
|
||||
jmp nrlt5 ;dx,bx is inside, no changes
|
||||
nrlt4: ;dx,bx outside, swap
|
||||
xchg bx,ds:tmplny
|
||||
xchg dx,ds:tmplnx
|
||||
;check with new bx,dx
|
||||
cmp dx,ds:wmaxx
|
||||
ja nrlt6
|
||||
cmp bx,wmaxy
|
||||
ja nrlt6
|
||||
jmp nrlt5 ;dx,bx is inside
|
||||
|
||||
nrlt6: ;both ends outside! Cut 'em here, not ready yet
|
||||
|
||||
nrlt5: mov ds:xtmp,dx
|
||||
mov ds:ytmp,bx
|
||||
;calc differencies xdif,ydif (+-) & abs difs, xabs,yabs (+)
|
||||
;and signs xsgn,ysgn (-1/0/1)
|
||||
xor cx,cx
|
||||
mov ax,ds:tmplnx
|
||||
sub ax,dx
|
||||
mov ds:xdif,ax
|
||||
or ax,ax
|
||||
je nrlt1
|
||||
inc cx
|
||||
test ax,32768
|
||||
jz nrlt1
|
||||
neg ax
|
||||
dec cx
|
||||
dec cx
|
||||
nrlt1: mov ds:xabs,ax
|
||||
mov ds:xsgn,cx
|
||||
|
||||
xor cx,cx
|
||||
mov ax,ds:tmplny
|
||||
sub ax,bx
|
||||
mov ds:ydif,ax
|
||||
or ax,ax
|
||||
je nrlt2
|
||||
inc cx
|
||||
test ax,32768
|
||||
jz nrlt2
|
||||
neg ax
|
||||
dec cx
|
||||
dec cx
|
||||
nrlt2: mov ds:yabs,ax
|
||||
mov ds:ysgn,cx
|
||||
|
||||
;which is bigger?
|
||||
cmp ax,ds:xabs
|
||||
ja nrlt3
|
||||
|
||||
;xbigger
|
||||
|
||||
;calc addl/h (si,di)
|
||||
jne nrlt9
|
||||
;1/1 addition, 45 degree curve
|
||||
cmp ax,0
|
||||
jne nrlt15
|
||||
mov dx,cs:tmplnx
|
||||
mov bx,ds:tmplny
|
||||
call nrpsetc
|
||||
jmp nrlt10
|
||||
nrlt15: mov di,ds:ysgn
|
||||
mov si,65535
|
||||
jmp nrlt10
|
||||
nrlt9: mov dx,ax ;dx=yabs
|
||||
xor ax,ax
|
||||
div ds:xabs ;ax=lowadd
|
||||
mov si,ax
|
||||
mov di,ds:ysgn
|
||||
|
||||
nrlt10: mov ax,32767
|
||||
mov bp,ds:xsgn
|
||||
mov cx,ds:xabs
|
||||
inc cx
|
||||
mov dx,ds:xtmp
|
||||
mov bx,ds:ytmp
|
||||
nrlt7: call nrpsetc
|
||||
add dx,bp ;xsgn
|
||||
add ax,si ;yaddl
|
||||
jnc nrlt8
|
||||
add bx,di ;ysgn
|
||||
nrlt8: loop nrlt7
|
||||
|
||||
jmp nrlt0
|
||||
|
||||
|
||||
nrlt3: ;ybigger
|
||||
|
||||
mov dx,ds:xabs
|
||||
xor ax,ax
|
||||
div ds:yabs ;ax=lowadd
|
||||
mov si,ax
|
||||
mov di,ds:xsgn
|
||||
|
||||
nrlt12: mov ax,32767
|
||||
mov bp,ds:ysgn
|
||||
mov cx,ds:yabs
|
||||
inc cx
|
||||
mov dx,ds:xtmp
|
||||
mov bx,ds:ytmp
|
||||
nrlt13: call nrpsetc
|
||||
add bx,bp ;ysgn
|
||||
add ax,si ;xaddl
|
||||
jnc nrlt14
|
||||
add dx,di ;xsgn
|
||||
nrlt14: loop nrlt13
|
||||
|
||||
nrlt0: pop bx
|
||||
pop dx
|
||||
mov ds:tmplnx,dx
|
||||
mov ds:tmplny,bx
|
||||
pop bp
|
||||
pop di
|
||||
pop si
|
||||
pop cx
|
||||
ret
|
||||
nrlineto ENDP
|
||||
|
||||
nrhlinegroup 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
|
||||
|
||||
nrhg92: pop bx
|
||||
inc bx
|
||||
push bx
|
||||
mov ax,gs:[si]
|
||||
add si,2
|
||||
cmp ax,-32767
|
||||
jne nrhg91
|
||||
pop bx
|
||||
ret
|
||||
nrhg91: mov dx,ax
|
||||
mov ax,gs:[si]
|
||||
add si,2
|
||||
|
||||
cmp ax,dx
|
||||
jl nrhg1
|
||||
xchg ax,dx
|
||||
nrhg1:
|
||||
cmp ax,ds:wminx
|
||||
jnl nrhg2
|
||||
cmp dx,ds:wminx
|
||||
jl nrhg92
|
||||
mov ax,ds:wminx
|
||||
nrhg2: cmp dx,ds:wmaxx
|
||||
jng nrhg21
|
||||
cmp ax,ds:wmaxx
|
||||
jg nrhg92
|
||||
mov dx,ds:wmaxx
|
||||
|
||||
nrhg21: mov di,ax
|
||||
mov cx,dx
|
||||
sub cx,ax
|
||||
shl bx,1
|
||||
add di,ds:rows[bx]
|
||||
mov al,cs:color1
|
||||
mov ah,al
|
||||
|
||||
cmp cx,8
|
||||
jl nrhg22
|
||||
|
||||
mov dx,ax
|
||||
shl eax,16
|
||||
mov ax,dx
|
||||
|
||||
mov dx,cx
|
||||
mov cx,4
|
||||
sub cx,di
|
||||
and cx,3
|
||||
sub dx,cx
|
||||
rep stosb
|
||||
mov cx,dx
|
||||
shr cx,2
|
||||
rep stosd
|
||||
mov cx,dx
|
||||
and cx,3
|
||||
rep stosb
|
||||
jmp nrhg92
|
||||
|
||||
nrhg22: shr cx,1
|
||||
rep stosw
|
||||
adc cx,cx
|
||||
rep stosb
|
||||
jmp nrhg92
|
||||
nrhlinegroup ENDP
|
||||
|
||||
ALIGN 2
|
||||
bpmultable LABEL WORD
|
||||
dw 0
|
||||
cc=1
|
||||
REPT 255
|
||||
dw (16383)/cc
|
||||
cc=cc+1
|
||||
ENDM
|
||||
|
||||
public _dimtable
|
||||
_dimtable db 256 dup(1)
|
||||
ALIGN 2
|
||||
tmpax dw 0
|
||||
|
||||
nrthlinegroup 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 tnrg93
|
||||
tnrg92: pop bx
|
||||
add si,8
|
||||
tnrg93: inc bx
|
||||
push bx
|
||||
mov dx,gs:[si] ;left
|
||||
cmp dx,-32767
|
||||
jne tnrg91
|
||||
pop bx
|
||||
ret
|
||||
tnrg91: mov ax,gs:[si+2] ;right
|
||||
|
||||
cmp ax,dx
|
||||
jl tnrg1
|
||||
xchg ax,dx
|
||||
mov cx,gs:[si+4]
|
||||
xchg cx,gs:[si+6]
|
||||
mov gs:[si+4],cx
|
||||
tnrg1:
|
||||
cmp ax,ds:wminx
|
||||
jnl tnrg2
|
||||
cmp dx,ds:wminx
|
||||
jl tnrg92
|
||||
mov ax,ds:wminx
|
||||
tnrg2: cmp dx,ds:wmaxx
|
||||
jng tnrg21
|
||||
cmp ax,ds:wmaxx
|
||||
jg tnrg92
|
||||
mov dx,ds:wmaxx
|
||||
|
||||
tnrg21: mov ds:tmpax,ax
|
||||
mov cx,dx
|
||||
sub cx,ax
|
||||
jcxz tnrg92
|
||||
shl bx,1
|
||||
mov di,ds:rows[bx]
|
||||
|
||||
mov bp,cx ;count
|
||||
|
||||
shl bp,1
|
||||
mov bx,word ptr cs:bpmultable[bp]
|
||||
shr bp,1
|
||||
|
||||
mov ah,gs:[si+4] ;endx
|
||||
sub ah,gs:[si+6] ;startx
|
||||
xor al,al
|
||||
imul bx
|
||||
shld dx,ax,2
|
||||
;dx=y, eaxh=x
|
||||
mov cl,dh
|
||||
mov ah,dl
|
||||
xor al,al
|
||||
rol eax,16 ;xadd
|
||||
|
||||
mov ah,gs:[si+5] ;endy
|
||||
sub ah,gs:[si+7] ;starty
|
||||
xor al,al
|
||||
imul bx
|
||||
shld dx,ax,2
|
||||
mov ch,dh
|
||||
mov dh,dl ;yadd
|
||||
xor dl,dl
|
||||
rol edx,16
|
||||
mov dx,cx
|
||||
cmp dl,80h
|
||||
adc dh,-1 ;x/yaddhi
|
||||
|
||||
push si
|
||||
push ds
|
||||
mov ax,fs
|
||||
mov ds,ax
|
||||
|
||||
shl bp,4
|
||||
mov bx,cs:tmpax
|
||||
shl bx,4
|
||||
add bx,OFFSET bas256
|
||||
add bp,bx
|
||||
mov ax,bx
|
||||
mov byte ptr cs:[bp],0c3h ;ret
|
||||
push bp
|
||||
movzx ebx,word ptr gs:[si+6] ;startxy/zero ylow
|
||||
xor ecx,ecx ;zero xlow
|
||||
call ax
|
||||
pop bx
|
||||
mov byte ptr cs:[bx],066h ;start of add ecx,eax
|
||||
|
||||
pop ds
|
||||
pop si
|
||||
jmp tnrg92
|
||||
|
||||
;....Exx..H....L....
|
||||
;ax xadd - tmp
|
||||
;bx ylow y x
|
||||
;cx xlow - -
|
||||
;dx yadd yah xah
|
||||
;si - - -
|
||||
;di - distbase
|
||||
;bp - - -
|
||||
|
||||
ALIGN 16
|
||||
bas256: cc=0
|
||||
REPT 256
|
||||
add ecx,eax ;@0
|
||||
mov al,ds:[bx] ;@3
|
||||
adc ebx,edx ;@5
|
||||
adc bh,0 ;@8
|
||||
db 26h,88h,85h ;@B ;mov es:[di+XXX],al
|
||||
dw cc ;@E ;XXX
|
||||
cc=cc+1 ;@10
|
||||
ENDM
|
||||
add ecx,eax
|
||||
nrthlinegroup ENDP
|
||||
Loading…
Reference in a new issue