-; Lowest yet: 312
+; Lowest yet: 270
bits 16
%ifdef BOOTSECT
%macro WAIT_VBLANK 0
mov dx, 3dah
-.inblank:
- in al, dx
- and al, 8
- jnz .inblank ; loop while vblank bit is 1 (in vblank)
.notblank:
in al, dx
and al, 8
add ax, 1000h
mov es, ax
- ; setup palette for the effect
- ; - bg color (0)
- ; - shadow color (1)
- ; - fractal color (2)
- mov dx, 0x3c8
- xor al, al
- out dx, al
- inc dx
- mov al, 10 ; 0: 40, 40, 80
- out dx, al
- out dx, al
- shl al, 1
- out dx, al
- mov al, 4 ; 1: 16, 16, 32
- out dx, al
- out dx, al
- shl al, 1
- out dx, al
- mov al, 18h ; 2: 96, 192, 96
- out dx, al
- mov al, 48
- out dx, al
- mov al, 18h
- out dx, al
-
mainloop:
call animate
; clear the framebuffer
- xor al, al
+ mov al, 128
mov cx, 64000
xor di, di
rep stosb
; draw shadow
mov si, 5
- mov byte [setcol + 1], 1 ; shadow color
+ mov byte [setcol + 1], 199 ; shadow color
call drawsierp
; draw fractal
xor si, si
dw 1, 1
dw -1, 1
dw -1, -1
+bounds dw 200 - SHADOW_OFFS
+ dw 320 - SHADOW_OFFS
+
animate:
mov cx, 3
mov di, sierp_verts
mov si, sierp_vel
.loop:
+ mov ebx, 2
+.xyloop:
mov ax, [di] ; grab vertex X
add ax, [si] ; add velocity X
jl .xout
- cmp ax, 320-SHADOW_OFFS
+ cmp ax, [ebx * 2 + bounds - 2]
jge .xout
jmp .skip_xflip
.xout:
; to do the same for Y increment edi and esi by 2
add di, 2
add si, 2
- mov ax, [di] ; grab vertex Y
- add ax, [si] ; add velocity Y
- jl .yout
- cmp ax, 200-SHADOW_OFFS
- jge .yout
- jmp .skip_yflip
-.yout:
- sub ax, [si] ; revert to previous Y
- neg word [si] ; negate velocity Y
-.skip_yflip:
- mov [di], ax ; update vertex Y
+ dec bx
+ jnz .xyloop
- add di, 2
- add si, 2
dec cx
jnz .loop
ret