ÜÜ                   Ü
ßßß STEALTH GROUP WW Û Mail:   BOX 15, 125080 MOSCOW   ÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛ ÛßßÛ
ßÛÛ ßßßßßßßßßßßßßßßß Û ßßßßßßßßßßßßßßßßßß ß ßßßßÞßßß   ÚÄ¿Â ÂÚÄ´Â Â Ò Â¿Ú ÛÜÜÛ
 ÞÛ ÛßÜ Ûßß Üßß Üßß ÜÛÜ Üßß ÛßÛ   Ý Û ÜßÛ Û Üßß ÛÜÜ    ÃÂÙ³ ³ÀÄ¿ÃÄ´   ³À´ Ü  Û
  Û Û Û Ûß  Ûß  Û    Û  Ûß  Û Û   Û Û Û Û Û Û   Û      ÁÀÄÀÄÙÀÄÙÁ Á   Á Á ßßßß
  Û Þ Þ Þ   ÞÜÜ ÞÜÜ  Þ  ÞÜÜ ÞÜß    ßÛ ßÜÛ Þ ÞÜÜ ÞÜÜÜ   ÛÛÛÛ  WINTER ' 96  ÛÛÛÛ
  Þ ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ   ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

    ÛÛÛÛÛÛÛÛÛÛÛÛÛ SKYFLYER PRESENTS : ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ 

; Œ¥¤«¥­­®¥ ¯®ï¢«¥­¨¥ ¨§®¡à ¦¥­¨ï PCX
.model tiny;	(C) 22:27pm 03-30-1996 Skyflyer
.code	;Some shorted words:ln=len,bN(N-number)=bit N,tab=table
org 100h
begin:	nop
	nop
	jmp beg
nextmemseg:	dw 0
memseg:		dw 0
fileident:	dw 0
filelen:	dw 0
fileds:		dw 0
fileoffs:	dw 0
fntab:	db 13 dup(0)
fpcx:	db'.pcx'
scrseg:	dw 0
palofs:	dw 0
palseg:	dw 0
palsubr:db 0
palsubg:db 0
palsubb:db 0
scr2seg:dw 0
efofs:	dw 0
efadd:	dw 0
rndtab:	db 1,2,7
speed:	db 4
rnd:	push dx
	mov ax,2 ptr rndtab+1
	mov dl,1 ptr rndtab
	mov 2 ptr rndtab,ax
	add al,dl
	add al,ah
	rol al,1
	mov 1 ptr rndtab+2,al
	pop dx
	ret
rndinst:mov ah,2ch
	int 21h
	mov 2 ptr rndtab,dx
	ret
inkey:	mov ah,1;cf=1-ok ret:ch=scan code
	int 16h
	clc
	jnz inkey1
	ret
inkey1:	mov ah,0
	int 16h
	mov ch,ah
	stc
	ret
waitkey:call inkey
	jnc waitkey
	ret
;dearchieving screen from ds:si to es:di
vga:	mov dx,0fa00h
	cld
vga1:	lodsb
	mov cx,1
	cmp al,0c0h
	jbe vga2
	mov cl,al
	and cl,3fh
	mov al,ds:[si]
	inc si
vga2:	sub dx,cx
	jz vga3
	jc vga3
	rep stosb
	jmp vga1
vga3:	not dx
	inc dx
	sub cx,dx
	rep stosb
vga4:	mov ax,ds
	ret
pal:
pal1:	push es
	xor ax,ax
	mov es,ax
	mov dx,es:[463h]
	add dx,6
	pop es
	in al,dx
	nop
	nop
	test al,8
;	jz pal2
pal3:	in al,dx
	nop
	nop
	test al,8
;	jnz pal3
pal2:	in al,dx
	nop
	nop
	test al,8
;	jz pal2
	mov dx,3c8h
	mov ax,0
	out dx,al
	nop
	nop
	mov dx,3c9h
	mov cx,256
	mov si,2 ptr palofs
	mov es,2 ptr palseg
	cld
	mov al,es:[si]
	inc si
	mov bl,al
	cli
pal4:	push cx
	shr cl,1
	shr cl,1
	mov ah,1 ptr palsubr
	call rgb
	mov ah,1 ptr palsubg
	call rgb
	mov ah,1 ptr palsubb
	call rgb
	pop cx
	loop pal4
	sti
	ret
;in-ah=r,g,b
rgb:	mov al,es:[si]
	inc si
	cmp bl,12
	jnz rgb1
	shr al,1
	shr al,1
rgb1:	add ah,cl
	test ah,80h
	jnz rgb3
	sub al,ah
	jnc rgb3
	mov al,0
rgb3:	out dx,al
	ret
cpal:	mov dx,3c8h
	mov al,0
	out dx,al
	mov cx,768
cpal1:	mov al,0
	mov dx,3c9h
	out dx,al
	jmp cpal2
cpal2:	loop cpal1
	ret
;copy psp's entry to fntab
fname:	mov si,offset 81h
	mov di,offset fntab
	push ds
	pop es
	mov cl,1 ptr ds:80h
	cld
fnamel:	or cl,cl
	jz fnamee
	dec cl
	lodsb
	cmp al,' '
	jz fnamel
fname2:	cmp al,'/'
	jz fname2a
	cmp al,'-'
	jnz fname2b
fname2a:lodsb
	dec al
	and al,0fh
	inc al
	mov 1 ptr speed,al
	jmp fnamel
fname2b:cmp al,21h
	jb fname3
	cmp al,7eh
	ja fname3
	cmp al,'.'
	jnz fname21
	or ch,1
fname21:stosb
fname3:	jmp fnamel
	test ch,1
	jnz fnamee
	mov si,offset fpcx
	mov cx,4
	rep movsb
fnamee:	mov [di],1 ptr 0
	ret
fopen:	mov ax,3d00h
	mov dx,offset fntab
	int 21h
	mov cl,1
	jc eerrcl
	mov 2 ptr fileident,ax
	ret
flen:	mov bx,2 ptr fileident
	mov cx,0
	mov dx,cx
	mov ax,4202h
	int 21h
	mov cl,3
	jc eerrcl
	mov 2 ptr filelen,ax
	mov al,4
	or dx,dx
	jnz eerr
	ret
;in-fileoffs=offset in opened file
foffs:	mov dx,0
	mov cx,0;2 ptr fileoffs
	mov bx,2 ptr fileident
	mov ax,4200h
	int 21h
	mov cl,3
	jc eerrcl
	ret
;in-fileident,filelen
fload:	call foffs
fload1:	mov dx,0
	mov bx,2 ptr fileident
	mov cx,2 ptr filelen
	push ds
	mov ax,2 ptr fileds
	mov ds,ax
	mov ah,3fh
	int 21h
	pop ds
	mov cl,2
	jc eerrcl
	ret
eerrcl:	mov al,cl
;al=num of error
eerr:	push ax
	mov bx,offset e
	call eerrp
	pop ax
	mov bx,offset e0
	or al,al
	jz eerr2
eerr1:	inc bx
	cmp [bx-1],1 ptr '$'
	jnz eerr1
	dec al
	jnz eerr1
eerr2:	call eerrp
	jmp quit
eerrp:	mov dl,[bx]
	inc bx
	cmp dl,'$'
	jz erret
	mov ah,2
	int 21h
	jmp eerrp
erret:	ret
quit:	mov ax,4c00h
	int 21h
	jmp quit
;ax=num of mem
getmem:	mov ax,offset cend
	mov cl,4
	shr ax,cl
	inc ax
	mov bx,cs
	add ax,bx
	mov 2 ptr memseg,ax
	ret
beg:	push cs
	pop ds
	call rndinst
	mov bx,offset 80h 
	cmp [bx],1 ptr 1
	mov al,0
	jbe eerr
	call getmem
	mov ax,2 ptr memseg
	mov 2 ptr fileds,ax
	add ax,8
	mov 2 ptr scrseg,ax
	mov bx,offset 81h
	mov cl,20
	call fname
	mov bx,offset fntab
	mov cl,99
	call pr
	call fopen
	call flen
	mov ax,2 ptr filelen
	mov ax,0ffffh
	mov cl,4
	shr ax,cl
	inc ax
	mov ax,1000h
	add ax,2 ptr fileds
	mov 2 ptr scr2seg,8000h
	call fload
	mov ax,13h
	int 10h
	call cpal
	mov ax,0a000h
	mov es,2 ptr scr2seg
	mov di,0
	mov si,0
	push ds
	mov ds,2 ptr scrseg
	call vga
	pop ds
	mov 2 ptr palofs,si
	mov 2 ptr palseg,ax
	push ds
	mov ax,0a000h
	mov es,ax
	mov di,0
	mov si,0
	mov ds,2 ptr scr2seg
	mov cx,0fa00h
	rep movsb
	pop ds
	mov al,63
b1:	mov 1 ptr palsubr,al
	mov 1 ptr palsubg,al
	mov 1 ptr palsubb,al
	push ax
	call pal
	mov cl,1 ptr speed
	mov ch,0
b2:	call palwait
	loop b2
	pop ax
	dec al
	cmp al,190
	jnz b1
b3:	mov ax,0a000h
	mov es,ax
	mov di,0
	mov cx,0fa00h
	mov al,0
;	rep stosb
	call rnd
	and al,0feh
	mov 2 ptr efadd,ax
;	call efa
b4:	call inkey
	jnc b4
	cmp ch,28
	jz b3
	mov ax,3
	int 10h
	jmp quit
pr:	mov dl,[bx]
	inc bx
	cmp dl,'$'
	jz prret
	cmp dl,0
	jz prret
	mov ah,2
	int 21h
	dec cl
	jnz pr
prret:	ret
fill:	mov ax,2 ptr fileds
	push ds
	add ax,0
	mov ds,ax
	mov di,0
	mov cx,160*100
fill1:	mov [di],1 ptr 2
	inc di
	mov [di],1 ptr 3
	inc di
	loop fill1
	pop ds
ret
palwait:push es
	xor ax,ax
	mov es,ax
	mov dx,es:[463h]
	add dx,6
	pop es
	in al,dx
	nop
	nop
	test al,8
	jz palwait2
palwait3:in al,dx
	nop
	nop
	test al,8
	jnz palwait3
palwait2:in al,dx
	nop
	nop
	test al,8
	jz palwait2
	ret
efa:	mov cx,256
efa1:	push cx
	call ef
	pop cx
	loop efa1
	ret
ef:	mov cx,256
	mov si,2 ptr efofs
	mov di,si
	mov ax,0a000h
	mov es,ax
	mov bx,2 ptr efadd
	push ds
	mov ds,2 ptr scr2seg
ef1:	movsb
	add si,bx
	mov di,si
	loop ef1
	pop ds
	mov 2 ptr efofs,si
	call palwait
ret
e:db'VgaPcxEff1: $'
e0:
db'PCX shower with effects. 22:28pm 03-30-1996 (C) Skyflyer',13,10
db'Only for VGA 320x200x256 .pcx pictures.',13,10
db'Usage: pcxeff1 [/<switches>] <filename>[.pcx] [/<switches>]',13,10
db'   <Switches>: x , x=1..9 - Set speed.(1-fast,9-slow)',13,10
db'Example: pcxeff /4 mypic.pcx'
db'$'
e1:db'File opening error.$'
e2:db'File loading error.$'
e3:db'Determine file lenght error.$'
e4:db'File too big. (more than 64K)$'
cend:	db 0
	END begin