home *** CD-ROM | disk | FTP | other *** search
/ Fish 'n' More 2 / fishmore-publicdomainlibraryvol.ii1991xetec.iso / dirs / a68kex_431.lzh / A68Kex / plane.asm < prev    next >
Assembly Source File  |  1991-01-17  |  16KB  |  667 lines

  1. ************************************************************************
  2. * This is the Red Baron of Germany. Snoopy's not around though.        *
  3. *                                                                      *
  4. * Seriously, this is a random walk on a three dimensional lattice.     *
  5. * The random walk is preformed by the climbing sine.                   *
  6. *                                                                      *
  7. * This implementation was written by:                                  *
  8. * E. Lenz                                                              *
  9. * Johann-Fichte-Strasse 11                                             *
  10. * 8 Munich 40                                                          *
  11. * Germany                                                              *
  12. *                                                                      *
  13. ************************************************************************
  14.  
  15.    XREF request
  16.  
  17. _AbsExecBase        equ 4
  18.  
  19. **** exec *****
  20.  
  21. _LVOForbid       equ -$84
  22. _LVOPermit       equ -$8a
  23. _LVOGetMsg       equ -$174
  24. _LVOReplyMsg     equ -$17a
  25. _LVOWaitPort     equ -$180
  26. _LVOCloseLibrary equ -$19e
  27. _LVOOpenLibrary  equ -$228
  28.  
  29. **** intuition ******
  30.  
  31. _LVOCloseWindow    equ -$48
  32. _LVOOpenWindow     equ -$cc
  33.  
  34. ***** graphics ******
  35.  
  36. _LVOMove            equ -$f0
  37. _LVODraw            equ -$f6
  38. _LVORectFill        equ -$132
  39. _LVOSetAPen         equ -$156
  40.  
  41. **** mathffp *****
  42.  
  43. _LVOSPFix       equ -$1e
  44. _LVOSPFlt       equ -$24
  45. _LVOSPAdd       equ -$42
  46. _LVOSPSub       equ -$48
  47. _LVOSPMul       equ -$4e
  48.  
  49. **** mathtrans ******
  50.  
  51. _LVOSPSin       equ -$24
  52. _LVOSPCos       equ -$2a
  53.  
  54. pr_MsgPort       equ $5c
  55. pr_CLI           equ $ac
  56. ThisTask         equ $114
  57. VBlankFrequency  equ $212
  58.  
  59. pi2   equ $c90fd943
  60. fif   equ $bb8ef340  .6
  61. dr    equ $80000040  .5
  62.  
  63.        code
  64.  
  65.        movea.l _AbsExecBase,a6   test if WB or CLI
  66.        movea.l ThisTask(a6),a0
  67.        tst.l   pr_CLI(a0)
  68.        bne.s   isCLI
  69.  
  70.        lea     pr_MsgPort(a0),a0 for WB get WB Message
  71.        jsr     _LVOWaitPort(a6)
  72.        jsr     _LVOGetMsg(a6)
  73.        move.l  d0,WBenchMsg
  74.  
  75. isCLI  cmpi.b  #60,VBlankFrequency(a6) check if PAL or NTSC
  76.        beq.s   isNTSC
  77.        move.w  #256,nw+6
  78.        move.l  #100,ntsc+2
  79.  
  80. isNTSC lea     GfxName(pc),a1        open graphics library
  81.        moveq   #0,d0
  82.        jsr     _LVOOpenLibrary(a6)
  83.        move.l  d0,GfxBase
  84.        beq.s   Gexit
  85.  
  86.        lea     FfpName(pc),a1        open mathffp library
  87.        moveq   #0,d0
  88.        jsr     _LVOOpenLibrary(a6)
  89.        move.l  d0,FfpBase
  90.        beq.s   Gexit
  91.  
  92.        lea     MTrName(pc),a1        open mathtrans library
  93.        moveq   #0,d0
  94.        jsr     _LVOOpenLibrary(a6)
  95.        move.l  d0,MTrans
  96.        bne.s   Tranok
  97.        lea     MTrName(pc),a0   first line
  98.        movem.l a4-a5,-(a7)
  99.        lea     notfnd(pc),a1     second line
  100.        suba.l  a2,a2             no third line
  101.        lea     hdtxt(pc),a3      header
  102.        lea     OkTxt(pc),a4      gadget text
  103.        suba.l  a5,a5             no 2nd gadget
  104.        moveq   #0,d0
  105.        moveq   #1,d1
  106.        jsr     request
  107.        movem.l (a7)+,a4-a5
  108. Gexit  bra.s   exit
  109.  
  110. Tranok lea     IntName(pc),a1        open intuition library
  111.        moveq   #0,d0
  112.        jsr     _LVOOpenLibrary(a6)
  113.        move.l  d0,IntBase
  114.        beq.s   Gexit
  115.  
  116.        lea     nw(pc),a0             open window
  117.        movea.l IntBase,a6
  118.        jsr     _LVOOpenWindow(a6)
  119.        move.l  d0,window
  120.        beq.s   Gexit
  121.  
  122.  
  123.        movea.l d0,a0
  124.        movea.l 50(a0),a5
  125.  
  126. next1  bsr     draw            draw aeroplane
  127.  
  128.        bsr.s   trycls
  129.        cmpi.l  #$200,d7
  130.        beq.s   exit
  131.  
  132.        bsr     walk
  133.        bra.s   next1
  134.  
  135.  
  136. exit   movea.l IntBase(pc),a6
  137.        move.l  window(pc),d0        close window
  138.        beq.s   noWin
  139.        movea.l d0,a0
  140.        jsr     _LVOCloseWindow(a6)
  141.  
  142. noWin  movea.l _AbsExecBase,a6
  143.        move.l   WBenchMsg(pc),d7
  144.        beq.s   NoBenh
  145.        jsr     _LVOForbid(a6)       reply to WB
  146.        movea.l d7,a1
  147.        jsr     _LVOReplyMsg(a6)
  148.        jsr     _LVOPermit(a6)
  149.  
  150. NoBenh move.l  IntBase(pc),d1       close intuition library
  151.        beq.s   noInt
  152.        movea.l d1,a1
  153.        jsr     _LVOCloseLibrary(a6)
  154.  
  155. noInt  move.l  MTrans(pc),d1        close mathtrans library
  156.        beq.s   noTran
  157.        movea.l d1,a1
  158.        jsr     _LVOCloseLibrary(a6)
  159.  
  160. noTran move.l  FfpBase(pc),d1       close mathffp library
  161.        beq.s   noFfp
  162.        movea.l d1,a1
  163.        jsr     _LVOCloseLibrary(a6)
  164.  
  165. noFfp  move.l  GfxBase(pc),d1       close graphics library
  166.        beq.s   noGfx
  167.        movea.l d1,a1
  168.        jsr     _LVOCloseLibrary(a6)
  169.  
  170. noGfx  moveq   #0,d0                no error
  171.        rts
  172.  
  173. trycls movem.l d0-d6/a0-a6,-(a7)
  174.        movea.l _AbsExecBase,a6
  175.        moveq   #0,d7
  176.        movea.l window(pc),a0
  177.        movea.l $56(a0),a0    load Window.UserPort
  178.        jsr     _LVOGetMsg(a6)
  179.        tst.l   d0
  180.        beq.s   noMsg1         No message
  181.  
  182.        movea.l d0,a1
  183.        move.l  $14(a1),d7       Message in d7
  184.        jsr     _LVOReplyMsg(a6) Always reply
  185.  
  186. noMsg1 movem.l (a7)+,d0-d6/a0-a6
  187. noMsg  tst.l   d7
  188.        rts
  189.  
  190. angle  move.l  d2,d0
  191.        jsr     _LVOSPSin(a6)
  192.        exg     d0,d2
  193.        jsr     _LVOSPCos(a6)
  194.        rts
  195.  
  196.  
  197. draw   movea.l MTrans(pc),a6    calculate angles
  198.        move.l  alpha(pc),d2
  199.        bsr.s   angle
  200.        move.l  d2,sa
  201.        move.l  d0,ca
  202.        move.l  beta(pc),d2
  203.        bsr.s   angle
  204.        move.l  d2,sb
  205.        move.l  d0,cb
  206.        move.l  gamma(pc),d2
  207.        bsr.s   angle
  208.        move.l  d2,sc
  209.        move.l  d0,cc
  210.  
  211.        move.l  #170,d7
  212.        lea     plane(pc),a2
  213.        lea     buffer(pc),a3
  214.  
  215. dlop   move.w  (a2)+,d2
  216.        ext.l   d2
  217.        move.w  (a2)+,d3
  218.        ext.l   d3
  219.        move.w  (a2)+,d4
  220.        ext.l   d4
  221.        bsr.s   persp        perspective
  222.  
  223. ntsc   add.l   #80,d4
  224.        add.l   #250,d3
  225.        move.l  d4,(a3)+
  226.        move.l  d3,(a3)+
  227.        dbra    d7,dlop
  228.  
  229.        movea.l GfxBase(pc),a6  clear screen
  230.        moveq   #0,d0
  231.        movea.l a5,a1
  232.        jsr     _LVOSetAPen(a6)
  233.  
  234.        movea.l a5,a1
  235.        moveq   #0,d0
  236.        moveq   #0,d1
  237.        move.l  #640,d2
  238.        move.l  #250,d3
  239.        jsr     _LVORectFill(a6)
  240.  
  241.        moveq   #3,d0
  242.        movea.l a5,a1
  243.        jsr     _LVOSetAPen(a6)
  244.  
  245.        lea     plot(pc),a3
  246.        lea     buffer(pc),a4
  247.        move.l  #170,d7
  248.        moveq   #1,d6
  249.  
  250. plop   move.l  (a4)+,d1
  251.        move.l  (a4)+,d0
  252.        movea.l a5,a1
  253.        subq.b  #1,d6
  254.        bne.s   nomove
  255.        jsr     _LVOMove(a6)
  256.        move.b  (a3)+,d6
  257.        bra.s   next
  258. nomove jsr     _LVODraw(a6)
  259. next   dbra    d7,plop
  260.        rts
  261.  
  262. persp  movem.l a2-a5,-(a7)
  263.        movea.l FfpBase(pc),a6
  264.  
  265.        move.l  d2,d0
  266.        jsr     _LVOSPFlt(a6)
  267.        move.l  d0,d2
  268.        move.l  d3,d0
  269.        jsr     _LVOSPFlt(a6)
  270.        move.l  d0,d3
  271.        move.l  d4,d0
  272.        jsr     _LVOSPFlt(a6)
  273.        move.l  d0,d4
  274.  
  275.        move.l  sa(pc),d1
  276.        jsr     _LVOSPMul(a6)
  277.        move.l  d0,d5
  278.        move.l  ca(pc),d0
  279.        move.l  d3,d1
  280.        jsr     _LVOSPMul(a6)
  281.        move.l  d5,d1
  282.        jsr     _LVOSPSub(a6)
  283.        exg     d0,d3           y = ca*y - sa*z
  284.  
  285.        move.l  sa(pc),d1
  286.        jsr     _LVOSPMul(a6)
  287.        exg     d0,d4
  288.        move.l  ca(pc),d1
  289.        jsr     _LVOSPMul(a6)
  290.        move.l  d4,d1
  291.        jsr     _LVOSPAdd(a6)
  292.        move.l  d0,d4          z = sa*y + ca*z
  293.  
  294.        move.l  sa(pc),d0
  295.        move.l  d4,d1
  296.        jsr     _LVOSPMul(a6)
  297.        move.l  d0,d5
  298.        move.l  cb(pc),d0
  299.        move.l  d2,d1
  300.        jsr     _LVOSPMul(a6)
  301.        move.l  d5,d1
  302.        jsr     _LVOSPSub(a6)
  303.        exg     d0,d2          x = cb*x - sb*z
  304.  
  305.        move.l  sb(pc),d1
  306.        jsr     _LVOSPMul(a6)
  307.        move.l  d0,d5
  308.        move.l  cb(pc),d0
  309.        move.l  d4,d1
  310.        jsr     _LVOSPMul(a6)
  311.        move.l  d5,d1
  312.        jsr     _LVOSPAdd(a6)
  313.        move.l  d0,d4         z = sb*x + cb*z
  314.  
  315.        move.l  sc(pc),d0
  316.        move.l  d3,d1
  317.        jsr     _LVOSPMul(a6)
  318.        move.l  d0,d5
  319.        move.l  cc(pc),d0
  320.        move.l  d2,d1
  321.        jsr     _LVOSPMul(a6)
  322.        move.l  d5,d1
  323.        jsr     _LVOSPSub(a6)
  324.        exg     d0,d2         x = cc*x - sc*y
  325.  
  326.        move.l  sc(pc),d1
  327.        jsr     _LVOSPMul(a6)
  328.        move.l  d0,d5
  329.        move.l  cc(pc),d0
  330.        move.l  d3,d1
  331.        jsr     _LVOSPMul(a6)
  332.        move.l  d5,d1
  333.        jsr     _LVOSPAdd(a6)
  334.        move.l  d0,d3         y = sc*x + cc*y
  335.  
  336.        move.l  d2,d0
  337.        jsr     _LVOSPFix(a6)
  338.        move.l  d0,d2
  339.        move.l  d3,d0
  340.        jsr     _LVOSPFix(a6)
  341.        move.l  d0,d3
  342.        move.l  d4,d0
  343.        jsr     _LVOSPFix(a6)
  344.        move.l  d0,d4
  345.  
  346.        movem.l (a7)+,a2-a5
  347.        rts
  348.  
  349. csine  movea.l FfpBase(pc),a6
  350.        move.l  #pi2,d1
  351.        move.l  d2,d0
  352.        jsr     _LVOSPMul(a6)
  353.        movea.l MTrans(pc),a6
  354.        jsr     _LVOSPSin(a6)
  355.        movea.l FfpBase(pc),a6
  356.        move.l  d7,d1
  357.        jsr     _LVOSPMul(a6)
  358.        move.l  d2,d1
  359.        jsr     _LVOSPAdd(a6)
  360.        rts
  361.  
  362.  
  363. walk   move.l  #fif,d7
  364.        move.l  alpha(pc),d2
  365.        bsr.s   csine
  366.        move.l  d0,alpha
  367.        move.l  beta(pc),d2
  368.        bsr.s   csine
  369.        move.l  d0,beta
  370.        move.l  gamma(pc),d2
  371.        bsr.s   csine
  372.        move.l  d0,gamma
  373.        move.l  #dr,d2
  374.        move.l  vx(pc),d3
  375.        move.l  alpha(pc),d0
  376.        bsr.s   step
  377.        move.l  d0,vx
  378.        move.l  vy(pc),d3
  379.        move.l  beta(pc),d0
  380.        bsr.s   step
  381.        move.l  d0,vy
  382.        move.l  vz(pc),d3
  383.        move.l  gamma(pc),d0
  384.        bsr.s   step
  385.        move.l  d0,vz
  386.        rts
  387.  
  388. step   movea.l MTrans(pc),a6
  389.        jsr     _LVOSPCos(a6)
  390.        movea.l FfpBase(pc),a6
  391.        move.l  d2,d1
  392.        jsr     _LVOSPMul(a6)
  393.        move.l  d3,d1
  394.        jsr     _LVOSPAdd(a6)
  395.        rts
  396.  
  397. ; angles
  398.  
  399. alpha  dc.l $c90fd942
  400. beta   dc.l pi2
  401. gamma  dc.l pi2
  402.  
  403. ; cosines
  404.  
  405. ca     dc.l 0
  406. cb     dc.l 0
  407. cc     dc.l 0
  408.  
  409. ; sines
  410.  
  411. sa     dc.l 0
  412. sb     dc.l 0
  413. sc     dc.l 0
  414.  
  415. ; displacement
  416.  
  417. vx     dc.l $80000042
  418. vy     dc.l $80000042
  419. vz     dc.l $80000042
  420.  
  421. buffer ds.l 171*2
  422.  
  423. plot   dc.b 13,7,7,4,4,9,11,14,7,7,3,3
  424.        dc.b 4,5,4,6,14,9,7,13,10,9
  425.        even
  426.  
  427. ; aeroplane coordinates
  428.  
  429. ; upper wing
  430.  
  431. plane       dc.w 20,0,0
  432.             dc.w 130,0,0
  433.             dc.w 140,50,0
  434.             dc.w 130,60,0
  435.             dc.w -130,60,0
  436.             dc.w -140,50,0
  437.             dc.w -130,0,0
  438.             dc.w -20,0,0
  439.             dc.w -10,15,0
  440.             dc.w 10,15,0
  441.             dc.w 20,0,0
  442.             dc.w 10,15,0
  443.             dc.w -10,15,0
  444.  
  445. ; lower right wing (from top)
  446.  
  447.             dc.w 10,60,-55
  448.             dc.w 10,50,-55
  449.             dc.w 10,-10,-55
  450.             dc.w 100,-10,-55
  451.             dc.w 110,40,-55
  452.             dc.w 100,50,-55
  453.             dc.w 10,50,-55
  454.  
  455. ; lower left wing (from top)
  456.  
  457.             dc.w -10,50,-55
  458.             dc.w -100,50,-55
  459.             dc.w -110,40,-55
  460.             dc.w -100,-10,-55
  461.             dc.w -10,-10,-55
  462.             dc.w -10,50,-55
  463.             dc.w -10,60,-55
  464.  
  465. ; the wing supports
  466.  
  467.             dc.w -82,10,0
  468.             dc.w -80,0,-55
  469.             dc.w -90,50,0
  470.             dc.w -88,40,-55
  471.             dc.w 82,10,0
  472.             dc.w 80,0,-55
  473.             dc.w 90,50,0
  474.             dc.w 88,40,-55
  475.  
  476. ; the nose of the plane
  477.  
  478.             dc.w 0,90,-35
  479.             dc.w 0,80,-30
  480.             dc.w -5,80,-35
  481.             dc.w 0,80,-40
  482.             dc.w 5,80,-35
  483.             dc.w 0,90,-35
  484.             dc.w 0,80,-40
  485.             dc.w 5,80,-35
  486.             dc.w 0,80,-30
  487.             dc.w 0,-140,-45
  488.             dc.w 15,-30,-45
  489.             dc.w 15,60,-45
  490.             dc.w 10,60,-55
  491.             dc.w -10,60,-55
  492.             dc.w -15,60,-45
  493.             dc.w -15,60,-25
  494.             dc.w 0,60,-15
  495.             dc.w 15,60,-25
  496.             dc.w 10,80,-25
  497.             dc.w 0,60,-15
  498.             dc.w 10,80,-25
  499.             dc.w 15,60,-25
  500.             dc.w 15,60,-45
  501.             dc.w 10,80,-45
  502.             dc.w -10,80,-45
  503.             dc.w -10,60,-55
  504.             dc.w -15,60,-45
  505.             dc.w -10,80,-45
  506.             dc.w -10,80,-25
  507.             dc.w -15,60,-25
  508.             dc.w -10,80,-25
  509.             dc.w 10,80,-25
  510.             dc.w 10,80,-45
  511.             dc.w 10,60,-55
  512.  
  513. ; wheels
  514.  
  515.             dc.w 35,60,-75
  516.             dc.w 35,70,-80
  517.             dc.w 35,70,-90
  518.             dc.w 35,60,-95
  519.             dc.w 35,50,-90
  520.             dc.w 35,50,-80
  521.             dc.w 35,60,-75
  522.             dc.w -35,60,-75
  523.             dc.w -35,70,-80
  524.             dc.w -35,70,-90
  525.             dc.w -35,60,-95
  526.             dc.w -35,50,-90
  527.             dc.w -35,50,-80
  528.             dc.w -35,60,-75
  529.             dc.w 10,-25,-20
  530.             dc.w 0,-25,-15
  531.             dc.w -10,-25,-20
  532.             dc.w -10,60,-55
  533.             dc.w -10,50,-55
  534.             dc.w 10,60,-55
  535.  
  536.  
  537. ; the body of the plane
  538.  
  539.             dc.w 15,60,-25
  540.             dc.w 15,-30,-25
  541.             dc.w 0,-140,-35
  542.             dc.w 5,-100,-35
  543.             dc.w 15,60,-45
  544.             dc.w 15,-30,-45
  545.             dc.w 0,-140,-45
  546.             dc.w -15,-30,-45
  547.             dc.w -15,60,-45
  548.             dc.w 10,-25,-20
  549.             dc.w 0,-140,-35
  550.             dc.w 0,-140,-45
  551.             dc.w 10,-10,-55
  552.             dc.w 15,-30,-45
  553.             dc.w 0,-140,-45
  554.             dc.w -10,-10,-55
  555.             dc.w 0,-140,-45
  556.             dc.w 0,-140,-35
  557.             dc.w -5,-100,-35
  558.             dc.w 5,-100,-35
  559.             dc.w 60,-120,-35
  560.             dc.w 60,-130,-35
  561.             dc.w 60,-140,-35
  562.             dc.w 50,-150,-35
  563.             dc.w 20,-150,-35
  564.             dc.w 2,-130,-35
  565.             dc.w -2,-130,-35
  566.             dc.w -20,-150,-35
  567.             dc.w -50,-150,-35
  568.             dc.w -60,-140,-35
  569.             dc.w -60,-130,-35
  570.             dc.w -60,-120,-35
  571.             dc.w -5,-100,-35
  572.             dc.w 0,-140,-35
  573.             dc.w 0,-100,-30
  574.             dc.w 0,-120,-5
  575.             dc.w 0,-140,0
  576.             dc.w 0,-140,-35
  577.             dc.w 0,-140,-45
  578.             dc.w 0,-155,-25
  579.             dc.w 0,-155,-5
  580.             dc.w 0,-140,0
  581.             dc.w 0,-25,-15
  582.             dc.w 0,-140,-35
  583.             dc.w -15,-30,-25
  584.             dc.w -15,60,-25
  585.             dc.w -15,60,-45
  586.             dc.w -15,-30,-45
  587.             dc.w 0,-140,-45
  588.             dc.w -10,85,5
  589.             dc.w -30,85,-5
  590.             dc.w -40,85,-25
  591.             dc.w -40,85,-45
  592.             dc.w -30,85,-65
  593.             dc.w -10,85,-75
  594.             dc.w 10,85,-75
  595.             dc.w 30,85,-65
  596.             dc.w 40,85,-45
  597.             dc.w 40,85,-25
  598.             dc.w 30,85,-5
  599.             dc.w 10,85,5
  600.             dc.w -10,85,5
  601.             dc.w 10,60,-55
  602.             dc.w 30,60,-85
  603.             dc.w 10,30,-55
  604.             dc.w 30,60,-85
  605.             dc.w 40,60,-85
  606.             dc.w -40,60,-85
  607.             dc.w -30,60,-85
  608.             dc.w -10,30,-55
  609.             dc.w -30,60,-85
  610.             dc.w -10,60,-55
  611.             dc.w 0,60,-15
  612.             dc.w 0,0,-15
  613.             dc.w 15,-10,-20
  614.             dc.w 15,-20,-20
  615.             dc.w 10,-25,-20
  616.             dc.w -10,-25,-20
  617.             dc.w -15,-20,-20
  618.             dc.w -15,-10,-20
  619.             dc.w 0,0,-15
  620.  
  621.  
  622. WBenchMsg   dc.l 0
  623. MTrans      dc.l 0
  624. FfpBase     dc.l 0
  625. DosBase     dc.l 0
  626. GfxBase     dc.l 0
  627. IntBase     dc.l 0
  628.  
  629. window      dc.l 0
  630.  
  631. MTrName     dc.b 'mathtrans.library',0
  632. FfpName     dc.b 'mathffp.library',0
  633. DosName     dc.b 'dos.library',0
  634. GfxName     dc.b 'graphics.library',0
  635. IntName     dc.b 'intuition.library',0
  636.             even
  637.  
  638. title       dc.b  'aeroplane',0
  639.             even
  640.  
  641. ; requester texts
  642.  
  643. notfnd      dc.b ' not found',0
  644. hdtxt       dc.b ' Plane Request',0
  645. OkTxt       dc.b ' OK',0
  646.             even
  647.  
  648. ***** Window definition *****
  649.  
  650. nw          dc.w 0,0         Position left,top
  651.             dc.w 640,199     Size width,height
  652.             dc.b 0,1         Colors detail-,block pen
  653.             dc.l $200        IDCMP-Flags
  654.             dc.l $144f       Window flags
  655.             dc.l 0           ^Gadget
  656.             dc.l 0           ^Menu check
  657.             dc.l title       ^Window name
  658. nws         dc.l 0           ^Screen structure,
  659.             dc.l 0           ^BitMap
  660.             dc.w 100         MinWidth
  661.             dc.w 40          MinHeight
  662.             dc.w -1          MaxWidth
  663.             dc.w -1,1        MaxHeight,Screen type
  664.  
  665.             end
  666.  
  667.