note1 db 0ah,0dh,'SHOWDP version 2.01',0ah,0dh,'Written by Paytin Whitaker.',0ah,0dh,0ah,'Shows a DannyPaint picture.',0ah,0dh,' Usage:',0dh,0ah,' SHOWDP filename [/h][/f]',0ah,0dh
db ' /f Fades picture in and out.',0ah,0dh,24h
note2 db 'File not Found: $'
note3 db 'Unknown option',0ah,0dh,24h
filename db 64 dup(0),24h
mode db ?
dl2 db 63
fading db 0
mode2 db 13h
savin dw 320
dap dw 150
dap2 dw 100
datarea1 ends
open_file equ 3dh
read_file equ 3fh
close_file equ 3eh
create_file equ 3ch
write_file equ 40h
.code
org 100h
start: jumps
assume ds:datarea1
mov ax,datarea1
mov ds,ax
main proc
;get da parameters...............
mov ah,0fh
int 10h
mov ah,0
mov mode,al
mov ah,62h
int 21h
lea di,filename
mov ds,bx
mov si,offset 80h
mov al,[si]
cmp al,0
je notenough1a
mov ch,0
mov cl,al
mov bp,0
wat2: inc si
mov bl,[si]
cmp bp,1
je wat3
cmp bl,20h
je wat0
cmp bl,0
je wat0
mov bp,1
wat3: cmp bl,'/'
jne notsl
compare:inc si
dec cx
jz loadit
mov bl,[si]
cmp bl,'h'
je notsmh
cmp bl,'H'
jne notcaph
notsmh: push ds
mov ax,datarea1
mov ds,ax
mov mode2,5ch;***************************;
mov fading,0
pop ds
jmp compare
notcaph:cmp bl,'f'
je notsmf
cmp bl,'F'
jne compare
notsmf: push ds
mov ax,datarea1
mov ds,ax
mov fading,1
pop ds
jmp compare
u2nknown:jmp unknown2
notsl: push ds
mov ax,datarea1
mov ds,ax
mov [di],bl
inc di
pop ds
loop wat2
mov ax,datarea1
mov ds,ax
mov bl,0
mov [di],bl
jmp loadit
notenough1a:jmp notenough1
wat0: loop wat2
jmp notenough
;load da file....................
loadit: mov ax,datarea1
mov ds,ax
lea di,filename
deeeee: mov al,[di]
cmp al,'.'
je seee
cmp al,0
je seeee
inc di
jmp deeeee
notenough1:jmp notenough
seeee: mov al,'.'
mov [di],al
inc di
mov al,'d'
mov [di],al
inc di
mov al,'n'
mov [di],al
mov al,'y'
inc di
mov [di],al
mov al,0
inc di
mov [di],al
seee: lea dx,filename
mov ah,open_file
mov al,0
int 21h
jc notenough2
mov bx,ax
cmp fading,1
jne nobfadin
push ax bx cx dx di si bp
;read palette
qbno_retrace:mov dx,3dah
in al,dx
test al,1000b
jnz qbno_retrace
qbn_retrace:in al,dx
test al,1000b
jz qbn_retrace
;now to set the palette
lea di,palette
mov dx,3c7h
mov al,0
out dx,al
mov cx,768
mov dx,3c9h
qbmo_set:in al,dx
mov [di],al
inc di
loop qbmo_set
bxfade1:
cli
;wait for vertical retrace
bno_retrace:mov dx,3dah;3bah
in al,dx
test al,1000b
jnz bno_retrace
bn_retrace:in al,dx
test al,1000b
jz bn_retrace
;now to set the palette
lea di,palette
mov dx,3c8h
mov al,0
out dx,al
mov cx,768
mov dx,3c9h
bmo_set:mov al,[di]
out dx,al
inc di
loop bmo_set
sti
;alter palette buffer
mov cx,768
mov bp,0
lea si,palette
bxmoinc:mov al,[si]
cmp al,0
je bxnoinc
dec al
mov [si],al
mov bp,1
bxnoinc:inc si
loop bxmoinc
cmp bp,0
jne bxfade1
pop bp si di dx cx bx ax
nobfadin:
xor ah,ah
mov al,mode2
int 10h
mov ah,read_file
mov cx,61440
lea dx,picture
int 21h
mov ah,read_file
mov cx,768
lea dx,palette
int 21h
mov ah,close_file
int 21h
call getit
mov al,mode
mov ah,0
int 10h
jmp okk
notenough:mov ax,datarea1
mov ds,ax
mov ah,9
lea dx,note1
int 21h
jmp okk
notenough2:mov ax,datarea1
mov ds,ax
mov ah,9
lea dx,note2
int 21h
lea dx,filename
int 21h
jmp okk
unknown2:mov ax,datarea1
mov ds,ax
mov ah,9
lea dx,note3
int 21h
lea dx,note1
int 21h
okk: mov ah,4ch
mov al,-1
int 21h
main endp
getit proc
push ax bx cx dx di si
mov ax,1012h ;set block of palette registers
mov bx,0 ;start at register 0
mov cx,256 ;set 256 registers
mov dx,seg palette2 ;use ES:DX to define buffer for colors
mov es,dx
mov dx,offset palette2
int 10h
cmp mode2,13h
je norml
lea di,picture
mov bx,0
mov cx,dap
mov dx,dap2
mov si,61440
aget1: mov al,[di]
mov ah,0ch
int 10h
inc di
dec savin
jnz agett
inc dx
mov savin,320
mov cx,dap
jmp awatf
agett: inc cx
awatf: dec si
jnz aget1
jmp xf
norml: mov ax,0a000h ;mov ES back to video buffer
mov es,ax
lea di,picture
mov bx,0
mov cx,61440
get1: mov al,[di]
mov es:[bx],al
inc di
inc bx
loop get1
xf: cmp fading,1
jne wara
fade1:
wara3: cli
lea di,palette2
;wait for vertical retrace
cno_retrace:mov dx,3dah;3bah
in al,dx
test al,1000b
jnz cno_retrace
cn_retrace:in al,dx
test al,1000b
jz cn_retrace
;now to set the palette
mov dx,3c8h
mov al,0
out dx,al
mov cx,768
mov dx,3c9h
cmo_set:;nop
;nop
mov al,[di]
out dx,al
inc di
loop cmo_set
sti
dec dl2
mov cx,768
xor bp,bp
lea di,palette
lea si,palette2
moinc: mov al,[si]
mov ah,[di]
cmp al,ah
jge noinc
sub ah,al
cmp ah,dl2
jl noinc
inc al
mov [si],al
mov bp,1
noinc: dec dl
inc si
inc di
loop moinc
cmp bp,0
jne fade1
jmp wara2
wara:
lea di,palette
cli
;wait for vertical retrace
xno_retrace:mov dx,3dah;3bah
in al,dx
test al,1000b
jnz xno_retrace
xn_retrace:in al,dx
test al,1000b
jz xn_retrace
;it is now in vertical retrace, test for read mode