306 lines
4.3 KiB
Text
306 lines
4.3 KiB
Text
;!!!!!! TRANSPARENT NEW COPPER !!!!!!
|
|
|
|
FREELINE equ 200
|
|
|
|
PUBLIC _newsinus,_newsinusx
|
|
_newsinus dw 512 dup(0)
|
|
_newsinusx dw -1
|
|
|
|
newgroup PROC NEAR
|
|
;hline list in gs:si
|
|
push ds
|
|
mov ax,SEG newdata
|
|
mov ds,ax
|
|
mov bx,gs:[si]
|
|
add si,2
|
|
@@1: mov ax,gs:[si]
|
|
add si,2
|
|
cmp ax,-32767
|
|
je @@2
|
|
mov dx,gs:[si]
|
|
add si,2
|
|
cmp bx,7eh
|
|
jne @@z
|
|
@@z: push bx
|
|
;hline ax..dx,bx with gs:color
|
|
cmp ax,dx
|
|
jle @@3
|
|
xchg ax,dx
|
|
@@3: ;
|
|
mov cx,cs:_newsinusx
|
|
cmp cx,-1
|
|
je @@nosin
|
|
push bx
|
|
add bx,cx
|
|
shl bx,1
|
|
add ax,cs:_newsinus[bx]
|
|
add dx,cs:_newsinus[bx]
|
|
pop bx
|
|
@@nosin:;
|
|
cmp ax,0
|
|
jge @@11
|
|
xor ax,ax
|
|
cmp dx,0
|
|
jl @@0
|
|
@@11: cmp dx,320
|
|
jle @@12
|
|
mov dx,320
|
|
cmp ax,320
|
|
jg @@0
|
|
@@12: push dx
|
|
shl bx,1
|
|
mov dx,ds:[bx]
|
|
mov bp,ds:[FREELINE*2]
|
|
mov ds:[bx],bp
|
|
mov ds:[FREELINE*2],dx
|
|
mov bx,dx
|
|
;modify list bx=>bp (edx/hi=last color)
|
|
;copy blocks < hline start
|
|
xor edx,edx
|
|
@@b: mov ecx,ds:[bx]
|
|
cmp cx,ax
|
|
jae @@a ;[bx] bigger..
|
|
add bx,4
|
|
mov ds:[bp],ecx
|
|
add bp,4
|
|
jmp @@b
|
|
@@a: ;add hline start
|
|
jne @@aa
|
|
mov ds:[bp],ax
|
|
mov ax,gs:color
|
|
ror ecx,16
|
|
xor ax,cx
|
|
mov ds:[bp+2],ax
|
|
add bp,4
|
|
add bx,4
|
|
mov ecx,ds:[bx]
|
|
pop ax
|
|
jmp @@d
|
|
@@aa: rol eax,16
|
|
mov ax,gs:color
|
|
rol eax,16
|
|
mov ds:[bp],eax
|
|
add bp,4
|
|
;copy blocks < hline end
|
|
pop ax
|
|
@@d: cmp cx,ax
|
|
jae @@c
|
|
add bx,4
|
|
mov ds:[bp],ecx
|
|
add bp,4
|
|
mov edx,ecx
|
|
mov ecx,ds:[bx]
|
|
jmp @@d
|
|
@@c: ;add hline end
|
|
jne @@ca
|
|
mov ds:[bp],ax
|
|
mov ax,gs:color
|
|
ror ecx,16
|
|
xor ax,cx
|
|
mov ds:[bp+2],ax
|
|
add bp,4
|
|
add bx,4
|
|
mov ecx,ds:[bx]
|
|
jmp @@f
|
|
@@ca: mov ds:[bp],ax
|
|
mov ax,gs:color
|
|
mov ds:[bp+2],ax
|
|
add bp,4
|
|
;copy rest of the list
|
|
@@f: cmp cx,32767
|
|
je @@e
|
|
add bx,4
|
|
mov ds:[bp],ecx
|
|
add bp,4
|
|
mov ecx,ds:[bx]
|
|
jmp @@f
|
|
@@e: ;last
|
|
mov ds:[bp],ecx
|
|
@@0: pop bx
|
|
inc bx
|
|
jmp @@1
|
|
@@2: pop ds
|
|
ret
|
|
newgroup ENDP
|
|
|
|
grouppage dw 1024
|
|
|
|
PUBLIC _initnewgroup
|
|
_initnewgroup PROC FAR
|
|
CBEG
|
|
mov ax,SEG newdata
|
|
mov ds,ax
|
|
mov dx,cs:grouppage
|
|
xor dx,32768
|
|
mov cs:grouppage,dx
|
|
mov cx,201
|
|
xor bx,bx
|
|
@@2: mov ax,ds:[bx]
|
|
mov ds:[bx],dx
|
|
mov ds:[bx+256*2],ax
|
|
add dx,128
|
|
add bx,2
|
|
loop @@2
|
|
mov cx,200
|
|
mov eax,32767
|
|
mov bx,cs:grouppage
|
|
@@1: mov ds:[bx],eax
|
|
add bx,128
|
|
loop @@1
|
|
CEND
|
|
_initnewgroup ENDP
|
|
|
|
ALIGN 2
|
|
dng_bgcolor dw 0
|
|
dng_rowbase dw 0
|
|
dng_random dw 0
|
|
|
|
PUBLIC _drawnewgroup
|
|
_drawnewgroup PROC FAR
|
|
CBEG
|
|
LOADDS
|
|
mov dx,3c4h
|
|
mov ax,0f02h
|
|
out dx,ax
|
|
mov es,ds:vram
|
|
mov ax,SEG newdata
|
|
mov gs,ax
|
|
mov cx,200
|
|
xor bx,bx
|
|
xor di,di
|
|
@@3: push bx
|
|
push cx
|
|
push di
|
|
shl bx,1
|
|
mov si,gs:[bx]
|
|
mov di,gs:[bx+512] ;last time row (for sorting out differences)
|
|
mov bp,32768
|
|
;si=thistime
|
|
;di=lasttime
|
|
;dl=thiscolor
|
|
;dh=lastcolor
|
|
;cx=thisX
|
|
;bx=lastX
|
|
;ax=X
|
|
;bp=tmpdest
|
|
mov dx,cs:dng_bgcolor
|
|
mov dh,dl
|
|
xor ax,ax
|
|
mov cx,gs:[si]
|
|
mov bx,gs:[di]
|
|
@@1: cmp bx,cx
|
|
je @@10
|
|
jl @@2
|
|
;cx..bx
|
|
cmp dl,dh
|
|
je @@5
|
|
;ax..cx color dl
|
|
mov gs:[bp],ax
|
|
mov gs:[bp+2],cx
|
|
add bp,6
|
|
mov gs:[bp+4-6],dx
|
|
@@5: mov ax,cx
|
|
xor dl,gs:[si+2]
|
|
add si,4
|
|
mov cx,gs:[si]
|
|
jmp @@1
|
|
@@10: ;bx=cx
|
|
cmp bx,32767
|
|
je @@7
|
|
cmp dl,dh
|
|
je @@11
|
|
;ax..bx color dl
|
|
mov gs:[bp],ax
|
|
mov gs:[bp+2],bx
|
|
add bp,6
|
|
mov gs:[bp+4-6],dx
|
|
@@11: mov ax,bx
|
|
xor dh,gs:[di+2]
|
|
add di,4
|
|
mov bx,gs:[di]
|
|
xor dl,gs:[si+2]
|
|
add si,4
|
|
mov cx,gs:[si]
|
|
jmp @@1
|
|
@@2: ;bx..cx
|
|
cmp dl,dh
|
|
je @@4
|
|
;ax..bx color dl
|
|
mov gs:[bp],ax
|
|
mov gs:[bp+2],bx
|
|
mov gs:[bp+4],dx
|
|
add bp,6
|
|
@@4: mov ax,bx
|
|
xor dh,gs:[di+2]
|
|
add di,4
|
|
mov bx,gs:[di]
|
|
jmp @@1
|
|
@@7: pop di
|
|
;this line data in 8000h..bp
|
|
mov si,32768
|
|
cmp si,bp
|
|
je @@8
|
|
@@6: mov edx,gs:[si]
|
|
mov bx,dx
|
|
shr edx,16
|
|
mov ch,gs:[si+4]
|
|
;
|
|
mov cl,bl
|
|
and cl,3
|
|
mov al,00fh
|
|
rol al,cl
|
|
mov cl,dl
|
|
and cl,3
|
|
mov ah,0f0h
|
|
rol ah,cl
|
|
|
|
shr bx,2
|
|
shr dx,2
|
|
cmp bx,dx
|
|
jne @@h1
|
|
|
|
and al,ah
|
|
mov dx,3c5h
|
|
out dx,al
|
|
mov es:[di+bx],ch
|
|
jmp @@h0
|
|
|
|
@@h1: inc bx
|
|
cmp bx,dx
|
|
jne @@h2
|
|
mov dx,3c5h
|
|
out dx,al
|
|
mov es:[di+bx-1],ch
|
|
mov al,ah
|
|
out dx,al
|
|
mov es:[di+bx],ch
|
|
jmp @@h0
|
|
|
|
@@h2: push di
|
|
mov cl,dl
|
|
sub cl,bl
|
|
add di,bx
|
|
mov dx,3c5h
|
|
out dx,al
|
|
mov es:[di-1],ch
|
|
mov al,0fh
|
|
out dx,al
|
|
mov al,ch
|
|
xor ch,ch
|
|
rep stosb
|
|
xchg al,ah
|
|
out dx,al
|
|
mov es:[di],ah
|
|
pop di
|
|
@@h0: ;
|
|
add si,6
|
|
cmp si,bp
|
|
jb @@6
|
|
@@8: pop cx
|
|
pop bx
|
|
add di,80
|
|
inc bx
|
|
loop @@3
|
|
CEND
|
|
_drawnewgroup ENDP
|
|
|