bummed some more
[vtuts] / dos1 / c.asm
index fdba3c0..fb0214f 100644 (file)
@@ -1,4 +1,4 @@
-; Lowest yet: 312
+; Lowest yet: 270
 
        bits 16
 %ifdef BOOTSECT
@@ -16,10 +16,6 @@ RANDVAL equ code_end + 4
 
 %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
@@ -45,43 +41,18 @@ start:
        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
@@ -167,16 +138,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 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:
@@ -188,20 +164,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
+       dec bx
+       jnz .xyloop
 
-       add di, 2
-       add si, 2
        dec cx
        jnz .loop
        ret