temppal db 768 dup (0)
waitvrc macro
local w1, w2
mov dx, 3dah
w1:
in al, dx
test al, 8
jnz w1
w2:
in al, dx
test al, 8
jz w2
endm
fadeall macro r,g,b,step,count
local loop1, loop2, decr, incr, decg, incg, decb, incb, rb, gb, bb, endma
mov cx, count
push cx
mov dl, r
mov dh, g
mov bl, b
push dx
mov ax, seg temppal
mov es, ax
mov ds, ax
mov di, offset temppal
mov dx, 3c7h
mov al, 0
out dx, al
mov dx, 3c9h
mov cx, 3*256
rep insb
pop dx
pop cx
loop1:
push cx
mov cx, 256
mov si, offset temppal
loop2:
mov al, ds:[si]
cmp al, dl
ja decr
cmp al, dl
jb incr
rb:
mov ds:[si], al
inc si
mov al, ds:[si]
cmp al, dh
ja decg
cmp al, dh
jb incg
gb:
mov ds:[si], al
inc si
mov al, ds:[si]
cmp al, bl
ja decb
cmp al, bl
jb incb
bb:
mov ds:[si], al
inc si
loop loop2
pusha
waitvrc
popa
mov cx, 256*3
mov ax, seg temppal
mov ds, ax
push dx
mov si, offset temppal
mov dx, 3c8h
mov al, 0
out dx, al
inc dx
rep outsb
pop dx
pop cx
loop loop1
jmp endma
decr:
sub al, step
jmp rb
incr:
add al, step
jmp rb
decg:
sub al, step
jmp gb
incg:
add al, step
jmp gb
decb:
sub al, step
jmp bb
incb:
add al, step
jmp bb
endma:
endm