home *** CD-ROM | disk | FTP | other *** search
- ************************************************************************
- * This is the Red Baron of Germany. Snoopy's not around though. *
- * *
- * Seriously, this is a random walk on a three dimensional lattice. *
- * The random walk is preformed by the climbing sine. *
- * *
- * This implementation was written by: *
- * E. Lenz *
- * Johann-Fichte-Strasse 11 *
- * 8 Munich 40 *
- * Germany *
- * *
- ************************************************************************
-
- XREF request
-
- _AbsExecBase equ 4
-
- **** exec *****
-
- _LVOForbid equ -$84
- _LVOPermit equ -$8a
- _LVOGetMsg equ -$174
- _LVOReplyMsg equ -$17a
- _LVOWaitPort equ -$180
- _LVOCloseLibrary equ -$19e
- _LVOOpenLibrary equ -$228
-
- **** intuition ******
-
- _LVOCloseWindow equ -$48
- _LVOOpenWindow equ -$cc
-
- ***** graphics ******
-
- _LVOMove equ -$f0
- _LVODraw equ -$f6
- _LVORectFill equ -$132
- _LVOSetAPen equ -$156
-
- **** mathffp *****
-
- _LVOSPFix equ -$1e
- _LVOSPFlt equ -$24
- _LVOSPAdd equ -$42
- _LVOSPSub equ -$48
- _LVOSPMul equ -$4e
-
- **** mathtrans ******
-
- _LVOSPSin equ -$24
- _LVOSPCos equ -$2a
-
- pr_MsgPort equ $5c
- pr_CLI equ $ac
- ThisTask equ $114
- VBlankFrequency equ $212
-
- pi2 equ $c90fd943
- fif equ $bb8ef340 .6
- dr equ $80000040 .5
-
- code
-
- movea.l _AbsExecBase,a6 test if WB or CLI
- movea.l ThisTask(a6),a0
- tst.l pr_CLI(a0)
- bne.s isCLI
-
- lea pr_MsgPort(a0),a0 for WB get WB Message
- jsr _LVOWaitPort(a6)
- jsr _LVOGetMsg(a6)
- move.l d0,WBenchMsg
-
- isCLI cmpi.b #60,VBlankFrequency(a6) check if PAL or NTSC
- beq.s isNTSC
- move.w #256,nw+6
- move.l #100,ntsc+2
-
- isNTSC lea GfxName(pc),a1 open graphics library
- moveq #0,d0
- jsr _LVOOpenLibrary(a6)
- move.l d0,GfxBase
- beq.s Gexit
-
- lea FfpName(pc),a1 open mathffp library
- moveq #0,d0
- jsr _LVOOpenLibrary(a6)
- move.l d0,FfpBase
- beq.s Gexit
-
- lea MTrName(pc),a1 open mathtrans library
- moveq #0,d0
- jsr _LVOOpenLibrary(a6)
- move.l d0,MTrans
- bne.s Tranok
- lea MTrName(pc),a0 first line
- movem.l a4-a5,-(a7)
- lea notfnd(pc),a1 second line
- suba.l a2,a2 no third line
- lea hdtxt(pc),a3 header
- lea OkTxt(pc),a4 gadget text
- suba.l a5,a5 no 2nd gadget
- moveq #0,d0
- moveq #1,d1
- jsr request
- movem.l (a7)+,a4-a5
- Gexit bra.s exit
-
- Tranok lea IntName(pc),a1 open intuition library
- moveq #0,d0
- jsr _LVOOpenLibrary(a6)
- move.l d0,IntBase
- beq.s Gexit
-
- lea nw(pc),a0 open window
- movea.l IntBase,a6
- jsr _LVOOpenWindow(a6)
- move.l d0,window
- beq.s Gexit
-
-
- movea.l d0,a0
- movea.l 50(a0),a5
-
- next1 bsr draw draw aeroplane
-
- bsr.s trycls
- cmpi.l #$200,d7
- beq.s exit
-
- bsr walk
- bra.s next1
-
-
- exit movea.l IntBase(pc),a6
- move.l window(pc),d0 close window
- beq.s noWin
- movea.l d0,a0
- jsr _LVOCloseWindow(a6)
-
- noWin movea.l _AbsExecBase,a6
- move.l WBenchMsg(pc),d7
- beq.s NoBenh
- jsr _LVOForbid(a6) reply to WB
- movea.l d7,a1
- jsr _LVOReplyMsg(a6)
- jsr _LVOPermit(a6)
-
- NoBenh move.l IntBase(pc),d1 close intuition library
- beq.s noInt
- movea.l d1,a1
- jsr _LVOCloseLibrary(a6)
-
- noInt move.l MTrans(pc),d1 close mathtrans library
- beq.s noTran
- movea.l d1,a1
- jsr _LVOCloseLibrary(a6)
-
- noTran move.l FfpBase(pc),d1 close mathffp library
- beq.s noFfp
- movea.l d1,a1
- jsr _LVOCloseLibrary(a6)
-
- noFfp move.l GfxBase(pc),d1 close graphics library
- beq.s noGfx
- movea.l d1,a1
- jsr _LVOCloseLibrary(a6)
-
- noGfx moveq #0,d0 no error
- rts
-
- trycls movem.l d0-d6/a0-a6,-(a7)
- movea.l _AbsExecBase,a6
- moveq #0,d7
- movea.l window(pc),a0
- movea.l $56(a0),a0 load Window.UserPort
- jsr _LVOGetMsg(a6)
- tst.l d0
- beq.s noMsg1 No message
-
- movea.l d0,a1
- move.l $14(a1),d7 Message in d7
- jsr _LVOReplyMsg(a6) Always reply
-
- noMsg1 movem.l (a7)+,d0-d6/a0-a6
- noMsg tst.l d7
- rts
-
- angle move.l d2,d0
- jsr _LVOSPSin(a6)
- exg d0,d2
- jsr _LVOSPCos(a6)
- rts
-
-
- draw movea.l MTrans(pc),a6 calculate angles
- move.l alpha(pc),d2
- bsr.s angle
- move.l d2,sa
- move.l d0,ca
- move.l beta(pc),d2
- bsr.s angle
- move.l d2,sb
- move.l d0,cb
- move.l gamma(pc),d2
- bsr.s angle
- move.l d2,sc
- move.l d0,cc
-
- move.l #170,d7
- lea plane(pc),a2
- lea buffer(pc),a3
-
- dlop move.w (a2)+,d2
- ext.l d2
- move.w (a2)+,d3
- ext.l d3
- move.w (a2)+,d4
- ext.l d4
- bsr.s persp perspective
-
- ntsc add.l #80,d4
- add.l #250,d3
- move.l d4,(a3)+
- move.l d3,(a3)+
- dbra d7,dlop
-
- movea.l GfxBase(pc),a6 clear screen
- moveq #0,d0
- movea.l a5,a1
- jsr _LVOSetAPen(a6)
-
- movea.l a5,a1
- moveq #0,d0
- moveq #0,d1
- move.l #640,d2
- move.l #250,d3
- jsr _LVORectFill(a6)
-
- moveq #3,d0
- movea.l a5,a1
- jsr _LVOSetAPen(a6)
-
- lea plot(pc),a3
- lea buffer(pc),a4
- move.l #170,d7
- moveq #1,d6
-
- plop move.l (a4)+,d1
- move.l (a4)+,d0
- movea.l a5,a1
- subq.b #1,d6
- bne.s nomove
- jsr _LVOMove(a6)
- move.b (a3)+,d6
- bra.s next
- nomove jsr _LVODraw(a6)
- next dbra d7,plop
- rts
-
- persp movem.l a2-a5,-(a7)
- movea.l FfpBase(pc),a6
-
- move.l d2,d0
- jsr _LVOSPFlt(a6)
- move.l d0,d2
- move.l d3,d0
- jsr _LVOSPFlt(a6)
- move.l d0,d3
- move.l d4,d0
- jsr _LVOSPFlt(a6)
- move.l d0,d4
-
- move.l sa(pc),d1
- jsr _LVOSPMul(a6)
- move.l d0,d5
- move.l ca(pc),d0
- move.l d3,d1
- jsr _LVOSPMul(a6)
- move.l d5,d1
- jsr _LVOSPSub(a6)
- exg d0,d3 y = ca*y - sa*z
-
- move.l sa(pc),d1
- jsr _LVOSPMul(a6)
- exg d0,d4
- move.l ca(pc),d1
- jsr _LVOSPMul(a6)
- move.l d4,d1
- jsr _LVOSPAdd(a6)
- move.l d0,d4 z = sa*y + ca*z
-
- move.l sa(pc),d0
- move.l d4,d1
- jsr _LVOSPMul(a6)
- move.l d0,d5
- move.l cb(pc),d0
- move.l d2,d1
- jsr _LVOSPMul(a6)
- move.l d5,d1
- jsr _LVOSPSub(a6)
- exg d0,d2 x = cb*x - sb*z
-
- move.l sb(pc),d1
- jsr _LVOSPMul(a6)
- move.l d0,d5
- move.l cb(pc),d0
- move.l d4,d1
- jsr _LVOSPMul(a6)
- move.l d5,d1
- jsr _LVOSPAdd(a6)
- move.l d0,d4 z = sb*x + cb*z
-
- move.l sc(pc),d0
- move.l d3,d1
- jsr _LVOSPMul(a6)
- move.l d0,d5
- move.l cc(pc),d0
- move.l d2,d1
- jsr _LVOSPMul(a6)
- move.l d5,d1
- jsr _LVOSPSub(a6)
- exg d0,d2 x = cc*x - sc*y
-
- move.l sc(pc),d1
- jsr _LVOSPMul(a6)
- move.l d0,d5
- move.l cc(pc),d0
- move.l d3,d1
- jsr _LVOSPMul(a6)
- move.l d5,d1
- jsr _LVOSPAdd(a6)
- move.l d0,d3 y = sc*x + cc*y
-
- move.l d2,d0
- jsr _LVOSPFix(a6)
- move.l d0,d2
- move.l d3,d0
- jsr _LVOSPFix(a6)
- move.l d0,d3
- move.l d4,d0
- jsr _LVOSPFix(a6)
- move.l d0,d4
-
- movem.l (a7)+,a2-a5
- rts
-
- csine movea.l FfpBase(pc),a6
- move.l #pi2,d1
- move.l d2,d0
- jsr _LVOSPMul(a6)
- movea.l MTrans(pc),a6
- jsr _LVOSPSin(a6)
- movea.l FfpBase(pc),a6
- move.l d7,d1
- jsr _LVOSPMul(a6)
- move.l d2,d1
- jsr _LVOSPAdd(a6)
- rts
-
-
- walk move.l #fif,d7
- move.l alpha(pc),d2
- bsr.s csine
- move.l d0,alpha
- move.l beta(pc),d2
- bsr.s csine
- move.l d0,beta
- move.l gamma(pc),d2
- bsr.s csine
- move.l d0,gamma
- move.l #dr,d2
- move.l vx(pc),d3
- move.l alpha(pc),d0
- bsr.s step
- move.l d0,vx
- move.l vy(pc),d3
- move.l beta(pc),d0
- bsr.s step
- move.l d0,vy
- move.l vz(pc),d3
- move.l gamma(pc),d0
- bsr.s step
- move.l d0,vz
- rts
-
- step movea.l MTrans(pc),a6
- jsr _LVOSPCos(a6)
- movea.l FfpBase(pc),a6
- move.l d2,d1
- jsr _LVOSPMul(a6)
- move.l d3,d1
- jsr _LVOSPAdd(a6)
- rts
-
- ; angles
-
- alpha dc.l $c90fd942
- beta dc.l pi2
- gamma dc.l pi2
-
- ; cosines
-
- ca dc.l 0
- cb dc.l 0
- cc dc.l 0
-
- ; sines
-
- sa dc.l 0
- sb dc.l 0
- sc dc.l 0
-
- ; displacement
-
- vx dc.l $80000042
- vy dc.l $80000042
- vz dc.l $80000042
-
- buffer ds.l 171*2
-
- plot dc.b 13,7,7,4,4,9,11,14,7,7,3,3
- dc.b 4,5,4,6,14,9,7,13,10,9
- even
-
- ; aeroplane coordinates
-
- ; upper wing
-
- plane dc.w 20,0,0
- dc.w 130,0,0
- dc.w 140,50,0
- dc.w 130,60,0
- dc.w -130,60,0
- dc.w -140,50,0
- dc.w -130,0,0
- dc.w -20,0,0
- dc.w -10,15,0
- dc.w 10,15,0
- dc.w 20,0,0
- dc.w 10,15,0
- dc.w -10,15,0
-
- ; lower right wing (from top)
-
- dc.w 10,60,-55
- dc.w 10,50,-55
- dc.w 10,-10,-55
- dc.w 100,-10,-55
- dc.w 110,40,-55
- dc.w 100,50,-55
- dc.w 10,50,-55
-
- ; lower left wing (from top)
-
- dc.w -10,50,-55
- dc.w -100,50,-55
- dc.w -110,40,-55
- dc.w -100,-10,-55
- dc.w -10,-10,-55
- dc.w -10,50,-55
- dc.w -10,60,-55
-
- ; the wing supports
-
- dc.w -82,10,0
- dc.w -80,0,-55
- dc.w -90,50,0
- dc.w -88,40,-55
- dc.w 82,10,0
- dc.w 80,0,-55
- dc.w 90,50,0
- dc.w 88,40,-55
-
- ; the nose of the plane
-
- dc.w 0,90,-35
- dc.w 0,80,-30
- dc.w -5,80,-35
- dc.w 0,80,-40
- dc.w 5,80,-35
- dc.w 0,90,-35
- dc.w 0,80,-40
- dc.w 5,80,-35
- dc.w 0,80,-30
- dc.w 0,-140,-45
- dc.w 15,-30,-45
- dc.w 15,60,-45
- dc.w 10,60,-55
- dc.w -10,60,-55
- dc.w -15,60,-45
- dc.w -15,60,-25
- dc.w 0,60,-15
- dc.w 15,60,-25
- dc.w 10,80,-25
- dc.w 0,60,-15
- dc.w 10,80,-25
- dc.w 15,60,-25
- dc.w 15,60,-45
- dc.w 10,80,-45
- dc.w -10,80,-45
- dc.w -10,60,-55
- dc.w -15,60,-45
- dc.w -10,80,-45
- dc.w -10,80,-25
- dc.w -15,60,-25
- dc.w -10,80,-25
- dc.w 10,80,-25
- dc.w 10,80,-45
- dc.w 10,60,-55
-
- ; wheels
-
- dc.w 35,60,-75
- dc.w 35,70,-80
- dc.w 35,70,-90
- dc.w 35,60,-95
- dc.w 35,50,-90
- dc.w 35,50,-80
- dc.w 35,60,-75
- dc.w -35,60,-75
- dc.w -35,70,-80
- dc.w -35,70,-90
- dc.w -35,60,-95
- dc.w -35,50,-90
- dc.w -35,50,-80
- dc.w -35,60,-75
- dc.w 10,-25,-20
- dc.w 0,-25,-15
- dc.w -10,-25,-20
- dc.w -10,60,-55
- dc.w -10,50,-55
- dc.w 10,60,-55
-
-
- ; the body of the plane
-
- dc.w 15,60,-25
- dc.w 15,-30,-25
- dc.w 0,-140,-35
- dc.w 5,-100,-35
- dc.w 15,60,-45
- dc.w 15,-30,-45
- dc.w 0,-140,-45
- dc.w -15,-30,-45
- dc.w -15,60,-45
- dc.w 10,-25,-20
- dc.w 0,-140,-35
- dc.w 0,-140,-45
- dc.w 10,-10,-55
- dc.w 15,-30,-45
- dc.w 0,-140,-45
- dc.w -10,-10,-55
- dc.w 0,-140,-45
- dc.w 0,-140,-35
- dc.w -5,-100,-35
- dc.w 5,-100,-35
- dc.w 60,-120,-35
- dc.w 60,-130,-35
- dc.w 60,-140,-35
- dc.w 50,-150,-35
- dc.w 20,-150,-35
- dc.w 2,-130,-35
- dc.w -2,-130,-35
- dc.w -20,-150,-35
- dc.w -50,-150,-35
- dc.w -60,-140,-35
- dc.w -60,-130,-35
- dc.w -60,-120,-35
- dc.w -5,-100,-35
- dc.w 0,-140,-35
- dc.w 0,-100,-30
- dc.w 0,-120,-5
- dc.w 0,-140,0
- dc.w 0,-140,-35
- dc.w 0,-140,-45
- dc.w 0,-155,-25
- dc.w 0,-155,-5
- dc.w 0,-140,0
- dc.w 0,-25,-15
- dc.w 0,-140,-35
- dc.w -15,-30,-25
- dc.w -15,60,-25
- dc.w -15,60,-45
- dc.w -15,-30,-45
- dc.w 0,-140,-45
- dc.w -10,85,5
- dc.w -30,85,-5
- dc.w -40,85,-25
- dc.w -40,85,-45
- dc.w -30,85,-65
- dc.w -10,85,-75
- dc.w 10,85,-75
- dc.w 30,85,-65
- dc.w 40,85,-45
- dc.w 40,85,-25
- dc.w 30,85,-5
- dc.w 10,85,5
- dc.w -10,85,5
- dc.w 10,60,-55
- dc.w 30,60,-85
- dc.w 10,30,-55
- dc.w 30,60,-85
- dc.w 40,60,-85
- dc.w -40,60,-85
- dc.w -30,60,-85
- dc.w -10,30,-55
- dc.w -30,60,-85
- dc.w -10,60,-55
- dc.w 0,60,-15
- dc.w 0,0,-15
- dc.w 15,-10,-20
- dc.w 15,-20,-20
- dc.w 10,-25,-20
- dc.w -10,-25,-20
- dc.w -15,-20,-20
- dc.w -15,-10,-20
- dc.w 0,0,-15
-
-
- WBenchMsg dc.l 0
- MTrans dc.l 0
- FfpBase dc.l 0
- DosBase dc.l 0
- GfxBase dc.l 0
- IntBase dc.l 0
-
- window dc.l 0
-
- MTrName dc.b 'mathtrans.library',0
- FfpName dc.b 'mathffp.library',0
- DosName dc.b 'dos.library',0
- GfxName dc.b 'graphics.library',0
- IntName dc.b 'intuition.library',0
- even
-
- title dc.b 'aeroplane',0
- even
-
- ; requester texts
-
- notfnd dc.b ' not found',0
- hdtxt dc.b ' Plane Request',0
- OkTxt dc.b ' OK',0
- even
-
- ***** Window definition *****
-
- nw dc.w 0,0 Position left,top
- dc.w 640,199 Size width,height
- dc.b 0,1 Colors detail-,block pen
- dc.l $200 IDCMP-Flags
- dc.l $144f Window flags
- dc.l 0 ^Gadget
- dc.l 0 ^Menu check
- dc.l title ^Window name
- nws dc.l 0 ^Screen structure,
- dc.l 0 ^BitMap
- dc.w 100 MinWidth
- dc.w 40 MinHeight
- dc.w -1 MaxWidth
- dc.w -1,1 MaxHeight,Screen type
-
- end
-
-