home *** CD-ROM | disk | FTP | other *** search
- addsym
- exeobj
- caseoff
- include "lvo.asm"
- include "strucdef.asm"
- code
-
- start: lea ytab,a0
- clr d0
- move #199,d1
- 1$: move d0,(a0)+
- add #40,d0
- dbra d1,1$
- lea bytenum,a0
- lea bitnum,a1
- clr d0
- move #319,d1
- 2$: move d0,d2
- and #7,d2
- neg d2
- add #7,d2
- move.b d2,(a1)+
- move d0,d2
- lsr #3,d2
- move d2,(a0)+
- addq #1,d0
- dbra d1,2$
- move.l 4,a6
- lea varbase,a5
- lea gfxname(a5),a1
- moveq #0,d0
- jsr _LVOOpenLibrary(a6)
- move.l d0,gfxbase(a5)
- lea intuiname(a5),a1
- moveq #0,d0
- jsr _LVOOpenLibrary(a6)
- move.l d0,intuibase(a5)
- move.l a5,a6
- bsr setmode
- bsr get_pnts
- bsr get_deltas
- outer
- bsr get_deltas
- bsr random
- mulu #20,d0
- swap d0
- add #50,d0
- move d0,ctdn(a6)
- addq #1,color(a6)
- b_loop: movem.l v0(a6),d0-d3
- bsr draw_bezier
- bsr update_coords
- btst #6,$bfe001
- beq.s cleanup
- subq #1,ctdn(a6)
- bne.s b_loop
- bra outer
- cleanup: move.l myscreen(a6),a0
- move.l intuibase(a6),a6
- jsr _LVOCloseScreen(a6)
- move.l 4,a6
- rts
-
- setmode: lea mns(a6),a0
- move.l intuibase(a6),a6
- jsr _LVOOpenScreen(a6)
- move.l d0,myscreen
- move.l d0,a0
- lea sc_RastPort(a0),a2
- lea varbase,a6
- move.l a2,the_rp(a6)
- rts
-
- ; return random word in d0
- random: move.w seed(a6),d0
- mulu #$1efd,d0
- add.w #$dff,d0
- move.w d0,seed(a6)
- rts
-
- rand_xy:
- ; ret rnd x/y in d1/d2
- bsr random
- move #300*32,d1
- mulu d0,d1
- clr d1
- swap d1
- add #10,d1
- bsr random
- move #179*32,d2
- mulu d0,d2
- clr d2
- swap d2
- add #10,d2
- rts
-
- get_pnts: lea v0(a6),a0
- moveq #3,d3
- 1$: bsr rand_xy
- movem d1/d2,(a0)
- lea 4(a0),a0
- dbra d3,1$
- rts
-
-
- get_deltas: lea dx0(a6),a0
- moveq #7,d1
- 1$: bsr random
- mulu #512,d0
- swap d0
- sub #256,d0
- move d0,(a0)+
- dbra d1,1$
- bsr random
- rts
-
- update_coords:
- lea v0(a6),a0
- lea dx0(a6),a1
- moveq #3,d0
- pt_loop:
- clr d3
- 1$: move (a0),d1 ; x
- move (a1)+,d2 ; dx
- add.w d2,d1
- bmi.s 2$
- cmp #319*32,d1
- blt.s 3$
- 2$: neg -2(a1)
- moveq #1,d3
- 3$: move d1,d4
- do_y:
- 1$: move 2(a0),d1 ; x
- move (a1)+,d2 ; dx
- add.w d2,d1
- bmi.s 2$
- cmp #199*32,d1
- blt.s 3$
- 2$: moveq #1,d3
- neg -2(a1)
- 3$: tst d3
- bne.s 4$
- move d4,(a0)
- move d1,2(a0)
- 4$: lea 4(a0),a0
- dbra d0,pt_loop
- rts
-
-
- draw_bezier move.l myscreen(a6),a0
- lea sc_BitMap+bm_Planes(a0),a0
- lea ytab(a6),a2
- move color(a6),a3
- lea bitnum(a6),a1
- lea bytenum(a6),a6
- bsr bez_draw
- lea varbase,a6
- rts
-
-
- pstep macro
- move.l (a4)+,a5
- add d1,a5
- bclr d2,(a5)
- lsr #1,d3
- bcc.s no_or\@
- bset d2,(a5)
- no_or\@:
- endm
-
- set_it: move.l d0,d1
- swap d0
- lsr #5,d0
- lsr #5,d1
- set_pixel:
- ; d0,d1=x,y
- ; a0=bm array
- ; a1=bit #'s
- ; a2=ytab
- ; a3=color
- ; a6=bytenum
- add d1,d1
- move 0(a2,d1),d1
- move.b 0(a1,d0),d2
- add d0,d0
- add 0(a6,d0),d1
- move.l a0,a4
- move a3,d3
- pstep
- pstep
- pstep
- pstep
- move.l (a4),a5
- add d1,a5
- bclr d2,(a5)
- tst d3
- beq.s no_or
- bset d2,(a5)
- no_or: rts
-
-
- bez_draw: move d0,d4
- sub.w d3,d4
- bpl.s 1$
- neg d4
- 1$: move.l d0,d5
- swap d5
- swap d3
- sub d3,d5
- bpl.s 2$
- neg d5
- 2$: swap d3
- add d4,d5
- cmp #64,d5
- blt.s set_it
- subdivide: move #$7fff,d7
- move.l d0,d4
- add.l d1,d4
- lsr.l #1,d4
- and d7,d4 ; d4=s1
- move.l d1,d5
- add.l d2,d5
- lsr.l #1,d5
- and d7,d5 ; d5=t
- move.l d4,d6
- add.l d5,d6
- lsr.l #1,d6
- and d7,d6 ; d6=s2
- add.l d3,d2
- lsr.l #1,d2
- and d7,d2 ; d2=t2
- add.l d2,d5
- lsr.l #1,d5
- and d7,d5 ; d5=t1
- move.l d6,d7
- add.l d5,d7
- lsr.l #1,d7
- bclr #15,d7 ; d7=s3,t0
- movem.l d7/d5/d2/d3,-(a7)
- move.l d4,d1
- move.l d6,d2
- move.l d7,d3
- bsr bez_draw
- movem.l (a7)+,d7/d5/d2/d3
- move.l d7,d0
- move.l d5,d1
- bra bez_draw
-
-
- pt macro
- dc.l 65536*32*\1+32*\2
- endm
-
- section vars,DATA
- varbase
- v0 pt 0,100
- v1 pt 100,50
- v2 pt 200,150
- v3 pt 300,125
-
- dx0 dc.l 0
- dx1 dc.l 0
- dx2 dc.l 0
- dx3 dc.l 0
-
- ctdn dc.w 20000
- color dc.w 1
- gfxbase dc.l 0
- intuibase dc.l 0
- myscreen dc.l 0
- the_rp dc.l 0
- seed dc.w $5232
- mns dc.w 0,0,320,200,5
- dc.w -1,0,CUSTOMSCREEN
- dc.l 0,0,0,0
-
- ytab ds.w 200
- bytenum ds.w 320
- bitnum ds.b 320
- gfxname dc.b 'graphics.library',0
- intuiname dc.b 'intuition.library',0
-
- end
-