phat code If brute force doesn't solve your problems, then you aren't using enough.
Main

Projects

Downloads

Articles

Links

Forum

 

View Message

Back to Messages
rel Tue Apr 18 2006 at 10:15 am
Now for the jugular....
 
 
I have added a palette(not cool) and a displacement. I wonder why fsincos did not work. :*)
Behold!!!

;**********************************************************
;
; FlOWER256(Updated to with displacement)
; Morphing tunnel of the overused XOR texture. :*)
; Another 256 Byte demo by
; Relsoft (Richard Eric M. Lope BSN RN)
; http://rel.betterwebber.com
; Assemble with FASM (FlatAssembler.net)
;
;**********************************************************

diameter = 32
diamxscale = (64 * diameter)
scx = 160
scy = 100


org 100h


;*****************************************************************
;*****************************************************************
;*****************************************************************

cenx:        push word 0a000h        ;word
       pop es        ;byte

ceny:        mov   al, 13h        ; mode 13h
       int   10h        ; we are now in 320x200x256

frame:        mov   dx, 03c8h     ;palette write register
fold_off:      xor   al, al     ;start at color 0
       out   dx, al     ;send value
       inc   dx     ;0x3c9(write RGB values)
       mov cx, 256*3      ;whole 256 colors
palloop:
fold_scale:    mov ax, 256 / 4
       sub ax, cx
       out dx, al

       loop palloop

main_loop:
;si = frame counter
inc word [frame]

;flower
;fold_off += 0.2
fld [c_fold_off]
fadd dword[fold_off]
fstp dword[fold_off]
;fold_scale = 0.5 * sin(frame / 40)
fld [c_fold_scale]
fild word [frame] ;st0 = frame; st1 = 0.3
mov bx, bp
mov word [bx], 40
fidiv word [bx]
fsin
fmul st0, st1
fstp dword[fold_scale]


mov word[cenx], scx
mov word[ceny], scy

;displacement
fild word[frame]
mov word[bx], 50
fidiv word[bx]
fsin
mov word[bx], 120
fimul word[bx]
fistp word[bx]
mov ax, [bx]
add [cenx], ax

;===========tunnel
mov dx,200
xor di, di
      tunnel_yloop:
mov cx,320
      tunnel_xloop:
;bx = word pointer
;bp = dword ptr
;
;
;atan2
fninit ;call this to ditch the st pops
mov bx, bp
mov ax, [ceny]
mov word [bx], ax
sub [bx], dx
fild word [bx] ;st0 = dy
mov ax, [cenx]
mov word [bx], ax
sub [bx], cx
fild word [bx] ;st0 = dx, st1 = dy

fpatan ;st0 = atan(dy/dx) = atan(st1/st0)
;flower
;xdist = xdist * ((sin(fold_off + fold_num * angle) * fold_scale)+1)
fstp dword [bx]
fld dword [bx] ;restore
fld dword [bx]
fimul [fold_num]
fadd dword[fold_off]
fsin
fmul dword[fold_scale]
mov word [bx], 1
fiadd word [bx]
fstp dword [bp] ;real_var =((sin(fold_off + fold_num * angle) * fold_scale)+1)

fmul [c_scale] ;atan(st0))*256/pi
fistp word [bx] ;short_var = scaledpi
mov gs,[bx]
mov ax, [cenx]
sub ax, cx ;cmx
mov [bx], ax
fild word [bx] ;st0 = cmx
fmul st0, st0 ;cmx * cmx
mov ax, [ceny]
sub ax, dx
mov [bx], ax
fild word [bx] ;st0 = cmy st1 = cmx*cmx
fmul st0, st0 ;cmy * cmy
fadd st0, st1 ;st0 cmx^2 + cmy^2
fsqrt ;sqrt st0
fmul dword [bp]
mov word [bx], diamxscale ;st0 = diamxscale st1 = sqrt(dist)
fild word [bx]
fdiv st0, st1
fistp word [bx]
mov ax, word [bx]
add ax, word [frame]
mov bx, gs
add bx, word [frame]
xor ax, bx
stosb
dec cx
jnz tunnel_xloop
dec dx
jnz tunnel_yloop
;        mov dx,3dah
;  vsync:
;        in al,dx
;        and al,8
;        jz vsync

in al,60h
dec al
jnz main_loop


ret

fold_num dw  7
c_fold_off dd  0.2
c_fold_scale dd  0.3
c_scale dd  40.74



 
 
  • regression - rel (Mon Apr 17 2006 at 6:33 am)
    • Now for the jugular.... - rel (Tue Apr 18 2006 at 10:15 am)
    • sweet - Dav (Tue Apr 18 2006 at 9:01 am)
    • Nice! - Optimus (Tue Apr 18 2006 at 5:33 am)
    • cool - Plasma (Mon Apr 17 2006 at 5:32 pm)
      • yep. * - rel (Mon Apr 17 2006 at 6:09 pm)
 
 

Reply to this Message

Name
Subject
Message

No HTML is allowed, except for <code> <b> <i> <u> in the message only.
All URLs and email addresses will automatically be converted to hyperlinks.