178 lines
2.6 KiB
NASM
178 lines
2.6 KiB
NASM
; ------------------------------ FIRE.ASM ------------------------------
|
|
|
|
|
|
.386p
|
|
|
|
.model SMALL, SYSCALL
|
|
|
|
.data
|
|
|
|
include \projet\lib386\lib_svga\svga.ash
|
|
include \projet\lib386\lib_sys\lib_sys.ash
|
|
|
|
public NoLanguage Imagen
|
|
|
|
extrn NoLanguage BufSpeak:DWORD
|
|
|
|
;Imagen DB 320*50 DUP (0)
|
|
;Imagen2 DB 320*50 DUP (0)
|
|
|
|
Imagen dd 0000
|
|
Imagen2 dd 0000
|
|
|
|
loopy dw 00
|
|
|
|
.code
|
|
|
|
public NoLanguage DoFire
|
|
public NoLanguage ComputeFire
|
|
|
|
ComputeFire proc uses esi edi ebx edx
|
|
|
|
mov eax, [BufSpeak]
|
|
mov [Imagen], eax
|
|
add eax, 320*50
|
|
mov [Imagen2], eax
|
|
|
|
mov esi, [Imagen]
|
|
add esi, 321
|
|
mov edi, [Imagen2]
|
|
add edi, 321
|
|
|
|
; mov esi, 321 + offset Imagen
|
|
; mov edi, 321 + offset Imagen2
|
|
|
|
MOV CX,48*320-2
|
|
|
|
XOR BH,BH
|
|
@@lp:
|
|
XOR AX,AX
|
|
ADD AL,-1[eSI]
|
|
ADC AH,BH
|
|
ADD AL,-320[eSI]
|
|
ADC AH,BH
|
|
ADD AL,-319[eSI]
|
|
ADC AH,BH
|
|
ADD AL,-321[eSI]
|
|
ADC AH,BH
|
|
ADD AL,1[eSI]
|
|
ADC AH,BH
|
|
ADD AL,320[eSI]
|
|
ADC AH,BH
|
|
ADD AL,319[eSI]
|
|
ADC AH,BH
|
|
ADD AL,321[eSI]
|
|
ADC AH,BH
|
|
ROR AX,3
|
|
|
|
TEST AH,65h ; Wanna know why 60h? Me too.
|
|
JNZ @@nx ; This is pure experience.
|
|
; ok but it's better with 65
|
|
|
|
mov edx, [Imagen2]
|
|
add edx, 46*320
|
|
|
|
CMP edi, edx
|
|
|
|
; cmp edi, 46*320 + offset Imagen2
|
|
JNC @@dec
|
|
|
|
OR AL,AL ; My dog coded here too.
|
|
JZ @@nx ; I helped my sister with this one.
|
|
@@dec:
|
|
DEC AL ; Yeah! Cool a bit, please.
|
|
@@nx:
|
|
inc esi
|
|
mov byte ptr[edi], al
|
|
|
|
inc edi
|
|
|
|
dec cx
|
|
jnz @@lp ; New image stored in Imagen2.
|
|
|
|
mov esi, [Imagen2]
|
|
add esi, 320
|
|
MOV edi, [Imagen]
|
|
|
|
; mov esi, 320 + offset Imagen2
|
|
; mov edi, offset Imagen
|
|
|
|
MOV ecx, 160*48/2
|
|
rep movsd
|
|
|
|
mov esi, [Imagen2]
|
|
add esi, 320*39
|
|
|
|
; mov esi, offset Imagen2 + 320*39
|
|
|
|
mov ecx, 5*320
|
|
mov ah, 11
|
|
@@rcl:
|
|
mov al,[esi]
|
|
cmp al, 15
|
|
jnc @@rcn
|
|
SUB AL,AH
|
|
NEG AL
|
|
MOV [eSI],AL
|
|
@@rcn:
|
|
INC eSI
|
|
dec cx
|
|
jnz @@rcl
|
|
|
|
ret
|
|
|
|
ComputeFire endp
|
|
|
|
|
|
DoFire proc uses esi edi ebx ebp ,\
|
|
lig:dword, coul:dword
|
|
|
|
call ComputeFire
|
|
|
|
mov esi, [Imagen]
|
|
add esi, 5*320
|
|
|
|
; mov esi, offset Imagen + 5 * 320
|
|
|
|
mov edi, Log
|
|
|
|
mov eax, lig
|
|
add edi, [TabOffLine + eax*4]
|
|
|
|
mov ebx, Coul
|
|
mov bh, bl
|
|
add bh, 15
|
|
|
|
mov dx, 25
|
|
|
|
copy0: mov cx, 320
|
|
|
|
copy: mov al, [esi]
|
|
shr al, 1
|
|
add al, bl
|
|
cmp al, bh
|
|
ja adcoul
|
|
adcrt: mov ah, al
|
|
mov [edi], ax
|
|
mov [edi+640], ax
|
|
inc esi
|
|
inc edi
|
|
inc edi
|
|
|
|
dec cx
|
|
jnz copy
|
|
|
|
add edi, 640
|
|
|
|
dec dx
|
|
jnz copy0
|
|
|
|
ret
|
|
|
|
adcoul: mov al, bh
|
|
jmp adcrt
|
|
|
|
DoFire endp
|
|
|
|
END
|