home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Unsorted BBS Collection
/
thegreatunsorted.tar
/
thegreatunsorted
/
programming
/
misc_programming
/
flames.asm
< prev
next >
Wrap
Assembly Source File
|
1993-09-27
|
7KB
|
269 lines
.286
JUMPS
ASSUME CS:_Code,DS:_DATA,SS:_Stack
─────────────────────────────────────────────────────────────────────────────
EXTRN _X_set_mode: FAR
─────────────────────────────────────────────────────────────────────────────
_Stack Segment Para Stack 'Stack'
db 2048 dup (?)
_Stack EndS
─────────────────────────────────────────────────────────────────────────────
_Data Segment Para Public 'Data'
flames db 32*64 dup (0)
new_flames db 32*64 dup (0)
x dw 0
y dw 0
_Data EndS
_Code Segment Para Public 'Code'
SetBorder Macro color
mov dx,03dah ; Used for speed test
in al,dx
nop
nop
nop
mov dx,03c0h
mov al,11h+32
out dx,al
mov al,color
out dx,al
EndM
Intro Proc Far
push ds
xor ax,ax
push ax
ASSUME ds:_DATA
mov ax,_DATA
mov ds,ax
mov ax,0013h
int 10h
mov dx,03c8h ; Set up palette, black -> red
xor al,al
out dx,al
inc dx
mov cx,8
@set_red:
mov al,16 ; Some stupid comments
sub al,cl
shl al,3 ; Multiply al with 4
out dx,al
xor al,al ; Xor al with al
out dx,al
out dx,al
loop @set_red ; Loop this 16 times (nah...no more stupid comments)
mov cx,16 ; Set red -> yellow
@set_yellow:
mov al,60
out dx,al
mov al,16
sub al,cl
shl al,2
out dx,al
xor al,al
out dx,al
loop @set_yellow
mov cx,16 ; set yellow -> white
@set_white:
mov al,60
out dx,al
out dx,al
mov al,16
sub al,cl
shl al,2
out dx,al
loop @set_white
mov cx,208 ; Set remaing colors to white
mov al,63
@whithey:
out dx,al
out dx,al
out dx,al
loop @whithey
@WaitESC:
SetBorder 200 ; Delete the speed test when used in a proggie
push ds
pop es
cld
lea di,flames
mov si,di
add di,64
add si,96
mov cx,61*16
rep movsw ; Scroll the array 1 step up
inc di
add di,5
mov cx,4
@put_hot_spots:
push di
push cx
push di
mov ax,20 ; Get a random x value for hotspot
call random
pop di
add di,ax
push di
mov ax,190
call random
pop di
pop cx
mov ah,al
mov [di],ax ; Set the hotspot
pop di
loop @put_hot_spots ; Set 4 new hotspots
mov word ptr x,1
mov word ptr y,1
@scanning_flames: ; Loop for calculate the new flame array
mov di,y ; Interpolate the 8 pixels around the location we wanna calculte a new value for
shl di,5
add di,x
xor ax,ax
xor bx,bx
mov bl,flames[di-33]
mov al,flames[di-32]
add bx,ax
mov al,flames[di-31]
add bx,ax
mov al,flames[di-1]
add bx,ax
mov al,flames[di+1]
add bx,ax
mov al,flames[di+31]
add bx,ax
mov al,flames[di+33]
add bx,ax
mov al,flames[di+33]
add bx,ax
shr bx,3
mov new_flames[di],bl ; Save this in the new array
inc x
cmp word ptr x,32
jb @scanning_flames
mov word ptr x,1
inc y
cmp word ptr y,64
jb @scanning_flames ; Do it for the whole "map"
lea di,flames
lea si,new_flames
mov cx,64*16
rep movsw ; Move new "map" to old "map" array
mov ax,0a000h
mov es,ax
lea si,flames
mov di,320*100+100
mov bx,60
@plot_it:
mov cx,16
rep movsw
add di,320-32
dec bx
jnz @plot_it ; Plot the flames
SetBorder 0 ; Delete this speed test
mov dx,03dah
@bettan:
in al,dx
test al,8
je @bettan
@bettan2:
in al,dx
test al,8
jne @bettan2 ; Wait for vertical retrace
in al,60h
cmp al,1
jne @WaitESC ; Wait until the user have pressed ESC
mov ax,0003h ; Text mode and Leave the program.
int 10h
mov ax,4c00h
int 21h
Intro EndP
;--------------------------------------------------------------------------------
; The above program is made by Errand and is released to the public domain.
; Thanks to Jare of Iguana for the information of the "simple" formula for
; flames.
;
; If you find this file interesting then PLEASE send me a postcard 8)
;
; Daniel Sjoberg
; Mogatan 11
; S-566 34 HABO
; SWEDEN
;
; Phone: (+46) 36 - 46309 CET (Dont call me at nights 8) )
;
; Greetings goes to: Jare (Iguana), Leinad (*Avalanche*), Zax (*Avalanche*),
; wReam (CB!), ZigZag (CB!), Patch (*Avalanche*)
; and the rest nice IRC-folks I know...
;
;
;--------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
; Author: Unknown. The author is the author of the HYPERCUBE Tumble program.
;-------------------------------------------------------------------------------
RandSeed dd 0
Randomize Proc
mov ah,2Ch
int 21h
mov Word ptr cs:[RandSeed],cx
mov Word ptr cs:[RandSeed+2],dx
ret
Randomize endP
;-------------------------------------------------------------------------------
; In: AX - Range
; Out: AX - Value within 0 through AX-1
; Destroys: All ?X and ?I registers
Random proc
mov cx,ax ; save limit
mov ax,Word ptr cs:[RandSeed+2]
mov bx,Word ptr cs:[RandSeed]
mov si,ax
mov di,bx
mov dl,ah
mov ah,al
mov al,bh
mov bh,bl
xor bl,bl
rcr dl,1
rcr ax,1
rcr bx,1
add bx,di
adc ax,si
add bx,62e9h
adc ax,3619h
mov word ptr cs:[RandSeed],bx
mov word ptr cs:[RandSeed+2],ax
xor dx,dx
div cx
mov ax,dx ; return modulus
ret
Random EndP
_Code EndS
─────────────────────────────────────────────────────────────────────────────
END Intro