almost there
[vtuts] / dos1 / c.asm
index d7a228f..78a0946 100644 (file)
@@ -1,4 +1,4 @@
-; Lowest yet: 277
+; Lowest yet: 265
 
        bits 16
 %ifdef BOOTSECT
@@ -12,6 +12,7 @@ SHADOW_OFFS equ 5
 
 SIERP_PT equ code_end
 RANDVAL equ code_end + 4
+SIERP_VERTS equ code_end + 8
 
 
 %macro WAIT_VBLANK 0
@@ -41,12 +42,6 @@ start:
        add ax, 1000h
        mov es, ax
 
-       ; setup palette for the effect
-       ; - bg color (0)
-       ; - shadow color (1)
-       ; - fractal color (2)
-
-
 mainloop:
        call animate
 
@@ -144,16 +139,21 @@ sierp_vel:
        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 bx, 4
+.xyloop:
        mov ax, [di]            ; grab vertex X
        add ax, [si]            ; add velocity X
        jl .xout
-       cmp ax, 320-SHADOW_OFFS
+       cmp ax, [bx + bounds - 2]
        jge .xout
        jmp .skip_xflip
 .xout:
@@ -165,20 +165,9 @@ animate:
        ; 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
+       sub bx, 2
+       jnz .xyloop
 
-       add di, 2
-       add si, 2
        dec cx
        jnz .loop
        ret