home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / AGGRESSN / MOTION.ZIP / MOTION / BEZIER13.S < prev    next >
Text File  |  1999-01-03  |  21KB  |  1,159 lines

  1. ;      /| __    _    /  __      
  2. ;     / |/ _ __| \  <  <    _   
  3. ;    /__|\ // _| / / \  \ |/ \  |
  4. ;   <   | \ \ /|< <_  >  >|\_/|\|
  5. ;    \  |    \ | \ \ / _/ |   | | 
  6. ;     \        |    /
  7. ;
  8. ; bezier test..
  9. ; 30*30 matto
  10. ; screen 320*240
  11. ; VGA version, runs in one frame on RGB..
  12.  
  13. bezi.vga = 0    ; set to true for vga screensetup
  14.  
  15.  
  16. bezi.run    =    1
  17.  
  18. bez.superpixels    =    0        ; 0 = disabled, 1 = enabled
  19.  
  20. bez.blur    =    1
  21.  
  22.     IFNE    bezi.run
  23.     
  24. memory        =    500*1024
  25.  
  26. Overdose_Beyond_Braindamage
  27.     include    freeintx.s
  28.     even
  29.  
  30. DEMO:
  31.     move.w    activepoint,d0
  32.     move.l    (activelist,pc,d0.w*4),a0
  33.     jsr    (a0)
  34.     rts
  35.  
  36. viimeinen
  37.     st     Space_Pressed
  38.     rts
  39.  
  40. activepoint    dc.w    0    
  41. activelist    
  42.     DC.L    bez.DSP_LOAD
  43.     DC.L    initbez
  44.     DC.L    runbez
  45.     dc.l    viimeinen
  46.     ENDC
  47.  
  48. ;------------
  49. SQRT    MACRO
  50.     moveq    #0,\2
  51.     bfffo    \1{0:31},\3
  52.     beq.s    .\@zero
  53.     neg.w    \3
  54.     add.w    #31,\3
  55.     lsr.w    #1,\3
  56.     addx.w    \2,\3
  57.  
  58.     move.l    \1,\2
  59.     lsr.l    \3,\2
  60.     beq.s    .\@zero
  61.  
  62.     move.l    \1,\3
  63.     divu.w    \2,\3
  64.     add.w    \3,\2
  65.     lsr.w    #1,\2
  66.     beq.s    .\@zero
  67.  
  68.     move.l    \1,\3
  69.     divu.w    \2,\3
  70.     add.w    \3,\2
  71.     lsr.w    #1,\2
  72.     beq.s    .\@zero
  73.  
  74.     divu.w    \2,\1
  75.     add.w    \2,\1
  76.  
  77.     lsr.w    #1,\1
  78.  
  79. .\@zero
  80.     ENDM
  81. ;------------
  82. bezTV:
  83. .HHT    SET     $fe        ; Horizontal Hold Timer
  84. .HBB    SET     $9a+32        ; Horizontal Border Begin
  85. .HBE    SET     $30         ; Horizontal Border End
  86. .HDB    SET     $38         ; Horizontal Display Begin
  87. .HDE    SET     $98+32         ; Horizontal Display End
  88. .HSS    SET     $d8        ; Horizontal Synchro Start
  89.  
  90. .VFT    SET    $271        ; (31250/Hz!1) ; V FREQUENCY
  91. .VBB    SET     $270        ; V BORDER BLANK
  92. .VBE    SET     $49        ; ($265-$02f)/2 = 283 LINES
  93. .VDB    SET     $49        ; V DISPLAY SIZE (256 lines..)
  94. .VDE    SET     $249        ; ($237-$057)/2 = 240 LINES
  95. .VSS    SET     $26b        ; V SYNCHRO START (<FREQUENCY!)
  96. .VCLK    SET    $183        ; Video Clock
  97. .VCO    SET    $000        ; Video Control
  98. .WIDE    set    160        ;screen wide (words)
  99. .modulo    set    0        ;screen modulo
  100. .VMODE    set    $010        ;screen mode (true)
  101. ; Video Control TV Bits                3 2 1 0
  102. ;    Horizontal Resolution-------------------+-+ + +
  103. ;        00: LORES (320 Pixels)            | |
  104. ;        01: HIRES (640 Pixels)            | |
  105. ;        10: SUPER HIRES (1280 Pixels)        | |
  106. ;            (shires seems to work with        | |
  107. ;             16 colors only (???))        | |
  108. ;    Interlace-----------------------------------' |
  109. ;        To enable interlacing, set VFT          |
  110. ;        bit 0 to logic 0.              |
  111. ;    Vertical Resolution---------------------------'
  112. ;        0: 200 lines
  113. ;        1: 100 lines
  114.  
  115.     dc.w    .HHT&$1ff,.HBB&$1ff,.HBE&$1ff,.HDB&$1ff,.HDE&$1ff,.HSS&$1ff
  116.     dc.w    .VFT&$3ff,.VBB&$3ff,.VBE&$3ff,.VDB&$3ff,.VDE&$3ff,.VSS&$3ff
  117.     dc.w    .VCLK&$1ff,.VCO&$00f
  118.     dc.l    .wide,.modulo,.vmode
  119.  
  120.  
  121. *********************************************************************************
  122. *
  123. * DSP Gourand Texture mapping junk..
  124. *
  125. *********************************************************************************
  126. bez.cls
  127.     move.w    #320*256/32-1,d7
  128.     move.l    #0,d1
  129.     move.l    d0,a0
  130. .wipe
  131.     move.l    d1,(a0)+
  132.     move.l    d1,(a0)+
  133.     move.l    d1,(a0)+
  134.     move.l    d1,(a0)+
  135.     move.l    d1,(a0)+
  136.     move.l    d1,(a0)+
  137.     move.l    d1,(a0)+
  138.     move.l    d1,(a0)+
  139.     dbf    d7,.wipe
  140.     rts
  141.  
  142. initbez:
  143.     move.l    #beztv,pointertv
  144. ;---------------------------------- modification for vga monitors
  145.     IFEQ    bezi.vga
  146.     jsr    middlesetscreen
  147.     ELSE
  148. * ###########################################################################
  149. * #                                                                         #
  150. * #  'Screens Pain' coded 1993 by Chris of AURA & Scandion of the Mugwumps  #
  151. * #                                                                         #
  152. * #                 --- It's an INDEPENDENT-Product ---                     #
  153. * #                                                                         #
  154. * ###########################################################################
  155. * Monitor: VGA
  156. * 320*240, 256 Farben, 50.0 Hz, 31470 Hz
  157.  
  158.         MOVE.L   #$C6008D,$FFFF8282.W
  159.         MOVE.L   #$15029A,$FFFF8286.W
  160.         MOVE.L   #$7B0097,$FFFF828A.W
  161.         MOVE.L   #$4EB04D1,$FFFF82A2.W
  162.         MOVE.L   #$3F00A5,$FFFF82A6.W
  163.         MOVE.L   #$46504E7,$FFFF82AA.W
  164.         MOVE.W   #$200,$FFFF820A.W
  165.         MOVE.W   #$186,$FFFF82C0.W
  166.         CLR.W    $FFFF8266.W
  167.         MOVE.W   #$10,$FFFF8266.W
  168.         MOVE.W   #$5,$FFFF82C2.W
  169.         MOVE.W   #$A0,$FFFF8210.W
  170.     
  171.     ENDC
  172. ;-------------------------------    
  173.     move.w    #$2300,sr
  174.  
  175.     move.l    address.freemem,d0
  176.     add.l    #bez.screen+255,d0
  177.     clr.b    d0
  178.     bsr    bez.cls
  179.     move.l    d0,adr_screen1
  180.     move.l    d0,bez.physic
  181.  
  182.     IFEQ    bez.superpixels-1
  183.     move.w    #$00c7,$ffff8282.w    hht
  184.     move.w    #$00a0,$ffff8284.w    hbb
  185.     move.w    #$001f,$ffff8286.w    hbe
  186.     move.w    #$02c7,$ffff8288.w    hdb
  187.     move.w    #$0096,$ffff828a.w    hde
  188.     move.w    #$00aa,$ffff828c.w    hss
  189.  
  190.     move.w    #$0271,$ffff82a2.w    vft
  191.     move.w    #$0021+576,$ffff82a4.w    vbd
  192.     move.w    #$0021,$ffff82a6.w    vbe
  193.     move.w    #$0021,$ffff82a8.w    vdb
  194.     move.w    #$0021+576,$ffff82aa.w    vde
  195.     move.w    #$026b,$ffff82ac.w    vss
  196.  
  197.     move.b    #$02,$ffff820a.w    st 50hz
  198.     move.w    #$0186,$ffff82c0.w    vclock
  199.     move.w    #$000,$ffff8266.w    
  200.     move.w    #$100,$ffff8266.w    spshift (vmode)
  201.     move.w    #$001,$ffff82c2.w    vco
  202.     move.w    #$140,$ffff8210.w    wide
  203.     ENDC
  204.  
  205.     bsr    bez_feedtables
  206.  
  207.     lea    texture1,a2
  208.     bsr    bez_feedtexture
  209.     lea    texture2,a2
  210.     bsr    bez_feedtexture
  211.     lea    texture3,a2
  212.     bsr    bez_feedtexture
  213.     lea    texture4,a2
  214.     bsr    bez_feedtexture
  215.     lea    texture5,a2
  216.     bsr    bez_feedtexture
  217.  
  218.     bsr    bez.clear
  219.     bsr    prefeed.pal
  220.  
  221.     clr.l    d0
  222.     move.w    d0,bez.mixer            ;max ekalle
  223.     move.w    d0,bez.mixspeed
  224.     move.w    d0,bez.objectlistN        ;objectilistan alkuun
  225.     move.w    d0,lentopiste
  226.     move.l    #lentocontrol,lentocontrolN
  227.     move.l    d0,bez.xpos
  228.     move.l    d0,bez.ypos
  229.     move.l    d0,bez.zpos
  230.     move.w    #0,d0
  231.     jsr    xsin
  232.     move.l    d1,bez.sinalfa
  233.     move.l    d1,bez.sinbeta
  234.     move.l    d1,bez.singamma
  235.     move.w    #0,d0
  236.     jsr    xcos
  237.     move.l    d1,bez.cosalfa
  238.     move.l    d1,bez.cosbeta
  239.     move.l    d1,bez.cosgamma
  240.     bsr    bez.rottamatikat
  241.     bsr    bez.rottamatikat
  242.  
  243.     move.l    #bezvbl,own_vbl
  244.     addq.w    #1,activepoint
  245.  
  246.     rts
  247. ;----------------------------------------------------
  248. bezvbl:
  249.     move.l    #$0,$ffff9800.w
  250.     rts
  251. ;---------------------------------------------
  252. ; txt mapped bezier by  WizTom of AGGRESSION
  253. ; kaskyt:
  254. ; 0 - feed controlpoints (matto N, txt N, 16 x-y)
  255. ; 1 - render in dsp
  256. ; 2 - feed screen to cpu
  257. ; 3 - feed kerrointable, make x offsets etc precacl...
  258. ; 4 - clear screen1
  259. ; 5 - feed texture (txt number,1024 data)
  260.  
  261. runbez:
  262.     bsr    feed.pal
  263.     move.l    #$00200040,$ffff9800.w
  264.     bsr    bez.render.screen
  265.  
  266.     bsr    feed.control
  267.     ifeq    bez.blur
  268.     bsr    bez.clear
  269.     endc
  270.     bsr    render.bez
  271.     bsr    bez.rottamatikat
  272.  
  273.  
  274. ;.waitdsp
  275. ;    btst    #0,$ffffa202.w        
  276. ;    beq.s    .waitdsp
  277.  
  278.     rts
  279.  
  280. bez.physic    dc.l    0
  281. ;-------------------
  282. bez.rottamatikat:
  283.  
  284.     bsr    bez.objectcontrol
  285. ; settaa objectit, morphit etc, ajastukset
  286.  
  287.     bsr    bez.objectmotion
  288. ; juoksee splinea, settaa paikan ja rotation
  289.  
  290.     bsr    bez.morph
  291. ; mophaa bez.object (xyz±511pixel) bez.newcordiin (xyz±511pixel)
  292.  
  293.     bsr    bez.rotta
  294. ; pyorita objectia bez.newcord (xyz±511pixel)ja projisoi bez.newcordiin (±xy+$7fff)
  295.  
  296.     rts
  297.  
  298. ;--------
  299. bez.objectcontrol:
  300.     tst.b    keytab+$44
  301.     beq.s    .noeka
  302.     clr.b    keytab+$44
  303.     move.w    #0,bez.objectlistN        ;listapointer
  304.     move.w    #$7fff,bez.mixer        ;max ekalle
  305.     move.w    #0,bez.mixspeed
  306. .noeka
  307.     tst.b    keytab+$43
  308.     beq.s    .notoka
  309.     clr.b    keytab+$43
  310.     move.w    #1,bez.objectlistN
  311.     move.w    #$7fff,bez.mixer        ;max ekalle
  312.     move.w    #0,bez.mixspeed
  313. .notoka
  314.  
  315. ;object anim
  316.     lea    bez.objectlist,a0
  317.     move.w    bez.objectlistN,d0
  318.     lsl.w    #4,d0
  319.  
  320.     move.l    (a0,d0.w),a1            ;object
  321.     move.l    4(a0,d0.w),d3            ;mattoN
  322.     move.l    8(a0,d0.w),d1            ;anim frame/max
  323.     move.w    d3,bez.objectN            ;mattomaara (ekasta objectista)
  324.     move.l    d1,d2
  325.     swap    d2
  326.     add.w    #1,d2
  327.     cmp.w    d1,d2
  328.     blt    .nowarp1
  329.     sub.w    d1,d2
  330. .nowarp1
  331.     move.w    d2,8(a0,d0.w)
  332.     mulu.w    #98,d2                ;(16*3)+1 wordia byteina
  333.     mulu.w    d3,d2                ;kertaa matot
  334.     add.l    d2,a1
  335.     move.l    a1,bez.eka            ;haluttun framen alku
  336.  
  337.     move.l    16(a0,d0.w),a1            ;object
  338.     move.l    20(a0,d0.w),d3            ;mattoN
  339.     move.l    24(a0,d0.w),d1            ;anim frame/max
  340.     move.l    d1,d2
  341.     swap    d2
  342.     add.w    #1,d2
  343.     cmp.w    d1,d2
  344.     blt    .nowarp2
  345.     sub.w    d1,d2
  346. .nowarp2
  347.     move.w    d2,24(a0,d0.w)
  348.     mulu.w    #98,d2                ;(16*3)+1 wordia byteina
  349.     mulu.w    d3,d2                ;kertaa matot
  350.     add.l    d2,a1
  351.     move.l    a1,bez.toka            ;haluttun framen alku
  352.  
  353. ; morphi boink
  354.     move.w    bez.mixer,d0
  355.     move.w    bez.mixspeed,d1
  356.      add.w    #100,d1            ;kiihtyvyys
  357.     sub.w    d1,d0
  358.     bgt.s    .noboink_oink_ink_nk_k
  359.     clr.w    d0
  360.     neg.w    d1            ;kimpoa
  361.     muls    #3,d1
  362.     asr.l    #2,d1    
  363. .noboink_oink_ink_nk_k
  364.     move.w    d0,bez.mixer
  365.     move.w    d1,bez.mixspeed
  366.  
  367.     rts
  368.  
  369. bez.mixer    dc.w    0
  370. bez.mixspeed    dc.w    0
  371. bez.eka        dc.l    0
  372. bez.toka    dc.l    0
  373. bez.objectN    dc.w    0
  374. bez.objectlistN    dc.w    0
  375. bez.objectlist:
  376.     dc.l    bez.object1,10,36,0    ;object,mattoN,framecount/frameN,(time?)
  377.     dc.l    bez.object2,8,1,0
  378.     dc.l    bez.object1,10,36,0    ;object,mattoN,framecount/frameN,(time?)
  379.     dc.l    bez.object2,8,1,0
  380.     dc.l    -1
  381. ;-------------
  382. bez.objectmotion:
  383.     move.l    lentocontrolN,a1
  384.     move.w    lentopiste,d0
  385.     add.w    #1,d0
  386.     cmp.w    #31,d0
  387.     blt    .samatpisteet
  388.     sub.w    #31,d0
  389.     addq.l    #6,a1
  390.     move.w    24(a1),d1
  391.     cmp.w    #$7fff,d1
  392.     bne.s    .nowarp
  393.     lea    lentocontrol,a1
  394. .nowarp
  395.     move.l    a1,lentocontrolN
  396. .samatpisteet
  397.     move.w    d0,lentopiste
  398.  
  399.     lea    lentotable,a0
  400.     lea    (a0,d0.w*8),a0
  401.     move.w    (a1)+,d0
  402.     move.w    (a1)+,d1
  403.     move.w    (a1)+,d2        ;kontrol x,y,z
  404.     muls.w    (a0),d0
  405.     muls.w    (a0),d1
  406.     muls.w    (a0)+,d2        ;kertoimilla
  407.  
  408.     rept    3
  409.     move.w    (a1)+,d3
  410.     move.w    (a1)+,d4
  411.     move.w    (a1)+,d5
  412.     muls.w    (a0),d3    
  413.     muls.w    (a0),d4    
  414.     muls.w    (a0)+,d5    
  415.     add.l    d3,d0
  416.     add.l    d4,d1
  417.     add.l    d5,d2
  418.     endr
  419.  
  420.     asr.l    #7,d0
  421.     asr.l    #7,d1
  422.     asr.l    #7,d2
  423.     sub.l    #100*256,d2
  424.  
  425.     move.l    bez.xpos,d3
  426.     move.l    bez.ypos,d4
  427.     move.l    bez.zpos,d5
  428.  
  429.     move.l    d0,bez.xpos
  430.     move.l    d1,bez.ypos
  431.     move.l    d2,bez.zpos
  432.  
  433.     sub.l    d3,d0        ;deltat
  434.     sub.l    d4,d1
  435.     sub.l    d5,d2
  436.     neg.l    d0
  437.     neg.l    d1
  438.     neg.l    d2
  439.  
  440. ;-----beta
  441.     move.l    d0,d3
  442.     muls.w    d3,d3        ;x^2
  443.     move.l    d2,d4
  444.     muls.w    d4,d4        ;z^2
  445.     add.l    d4,d3        ;r^2
  446.     move.l    r3,r7
  447.  
  448.     sqrt    d3,d4,d5    ;matka pixeleina (hypotenuusa)
  449.     and.l    #$ffff,d3
  450.     bne.s    .nozeror
  451.     not.w    $ffff9802.w
  452.     moveq    #1,d3
  453. .nozeror
  454.     move.l    d3,d6        ;r
  455.  
  456.     move.l    d0,d4
  457.     asl.l    #8,d4        ;
  458.     asl.l    #7,d4        ;
  459.     divs.l    d3,d4        ;z/r
  460.     move.l    d4,bez.sinbeta    
  461.  
  462.     move.l    d2,d4
  463.     neg.l    d4
  464.     asl.l    #8,d4
  465.     asl.l    #7,d4
  466.     divs.l    d3,d4        ;x/r
  467.     move.l    d4,bez.cosbeta
  468.  
  469. ;------alfa
  470.     move.l    d1,d3
  471.     muls.w    d3,d3        ;y^2
  472.     move.l    d7,d4        ;r^2
  473.     add.l    d4,d3        ;r2^2
  474.  
  475.     sqrt    d3,d4,d5    ;matka pixeleina (hypotenuusa)
  476.     and.l    #$ffff,d3
  477.     bne.s    .nozeror2
  478.     not.w    $ffff9802.w
  479.     moveq    #1,d3
  480. .nozeror2
  481.  
  482.     move.l    d1,d4
  483.     neg.l    d4
  484.     asl.l    #8,d4        ;
  485.     asl.l    #7,d4        ;
  486.     divs.l    d3,d4        ;y/r2
  487.     move.l    d4,bez.sinalfa    
  488.  
  489.     move.l    d6,d4
  490.     asl.l    #8,d4
  491.     asl.l    #7,d4
  492.     divs.l    d3,d4        ;r/r2
  493.     move.l    d4,bez.cosalfa
  494.  
  495. ;------gamma
  496.     move.l    d0,d3
  497.     muls.w    d3,d3        ;x^2
  498.     move.l    d2,d4
  499.     muls.w    d4,d4        ;z^2
  500.     add.l    d4,d3        ;r^2
  501.     move.l    r3,r7
  502.  
  503.     sqrt    d3,d4,d5    ;matka pixeleina (hypotenuusa)
  504.     and.l    #$ffff,d3
  505.     bne.s    .nozeror3
  506.     not.w    $ffff9802.w
  507.     moveq    #1,d3
  508. .nozeror3
  509.     move.l    d3,d6        ;r
  510.  
  511.     move.l    d0,d4
  512.     bge.s    .zetapositive
  513.     neg.l    d4
  514. .zetapositive
  515.     asl.l    #8,d4        ;
  516.     asl.l    #7,d4        ;
  517.     divs.l    d3,d4        ;z/r
  518.     move.l    d4,bez.singamma
  519.  
  520.     move.l    d2,d4
  521.     asl.l    #8,d4
  522.     asl.l    #7,d4
  523.     divs.l    d3,d4        ;x/r
  524.     move.l    d4,bez.cosgamma
  525.     
  526. ;    move.l    bez.singamma,d0
  527. ;    cmp.l    #200,d0
  528. ;    bgt.s    .ok1
  529. ;    cmp.l    #-200,d0
  530. ;    blt.s    .ok1
  531. ;    move.l    #0,bez.singamma
  532. ;    move.l    #$7fff,bez.cosgamma
  533. ;.ok1
  534.  
  535.     rts
  536. ;-----
  537. bez.sinalfa    dc.l    0
  538. bez.cosalfa    dc.l    0
  539. bez.sinbeta    dc.l    0
  540. bez.cosbeta    dc.l    0
  541. bez.singamma    dc.l    0
  542. bez.cosgamma    dc.l    0
  543. bez.xpos    dc.l    0
  544. bez.ypos    dc.l    0
  545. bez.zpos    dc.l    0
  546. lentopiste    dc.w    0        ;kohta splinessa
  547. lentocontrolN    dc.l    0
  548. lentocontrol
  549.     dc.w    -120,0,900    
  550.     dc.w    0,0,900
  551.     dc.w    120,0,900
  552. ;    dc.w    80,0,700
  553.     dc.w    0,0,600
  554. ;    dc.w    -80,0,700
  555.     dc.w    -120,0,900    
  556.     dc.w    0,0,900
  557.     dc.w    120,0,900
  558. ;    dc.w    80,0,700
  559.     dc.w    0,0,600
  560. ;    dc.w    -80,0,700
  561.  
  562.  
  563.     dc.w    $7fff
  564. ;lentocontrol
  565.     Dc.w    -130,-100,720
  566.     Dc.w    -160,-60,860
  567.     Dc.w    -90,-30,1020
  568.     Dc.w    -120,0,1340
  569.     Dc.w    -60,30,1500
  570.     Dc.w    30,60,1500
  571.     Dc.w    100,100,1400
  572.     Dc.w    60,70,1140
  573.     Dc.w    170,40,1000
  574.     Dc.w    180,10,640
  575.     Dc.w    100,-20,640
  576.     Dc.w    40,-50,540
  577.     Dc.w    -30,-75,560
  578.  
  579.     Dc.w    -130,-100,720
  580.     Dc.w    -160,-60,860
  581.     Dc.w    -90,-30,1020
  582.     Dc.w    -120,0,1340
  583.     dc.w    $7fff
  584. ;rata2
  585. ;lentocontrol
  586.     Dc.w    -10,0,500
  587.     Dc.w    -320,0,1060
  588.     Dc.w    -60,0,1500
  589.     Dc.w    170,0,1500
  590.     Dc.w    320,0,1120
  591.     Dc.w    50,0,580
  592.     Dc.w    -130,0,660
  593.     Dc.w    -190,0,1060
  594.     Dc.w    -150,50,1400
  595.     Dc.w    -10,0,1500
  596.     Dc.w    100,-50,1480
  597.     Dc.w    150,0,1320
  598.     Dc.w    150,0,1040
  599.     Dc.w    100,0,940
  600.     Dc.w    20,0,820
  601.     Dc.w    -70,0,860
  602.     Dc.w    -110,0,1000
  603.     Dc.w    -100,0,1160
  604.     Dc.w    -50,0,1300
  605.     Dc.w    70,0,1380
  606.     Dc.w    170,50,1360
  607.     Dc.w    200,100,1260
  608.     Dc.w    210,50,1060
  609.     Dc.w    100,0,660
  610.     Dc.w    -10,0,500
  611.     Dc.w    -320,0,1060
  612.     Dc.w    -60,0,1500
  613.     Dc.w    170,0,1500
  614.     dc.w    $7fff
  615. ;--------------
  616. bez.rotta:
  617.  
  618. .bsxk    EQUR    d0
  619. .bcxk    EQUR    d1
  620. .bsyk    EQUR    d2
  621. .bcyk    EQUR    d3
  622. .bszk    EQUR    d4
  623. .bczk    EQUR    d5
  624.  
  625.     lea    bez.sinalfa,a0
  626.     movem.l    (a0)+,a1-a6
  627.  
  628.     move.l    a1,.bsxk
  629.     move.l    a2,.bcxk
  630.     move.l    a3,.bsyk
  631.     move.l    a4,.bcyk
  632.     move.l    a5,.bszk
  633.     move.l    a6,.bczk
  634.  
  635.     asr.l    #7,.bsxk
  636.     asr.l    #7,.bcxk
  637.     asr.l    #7,.bsyk
  638.     asr.l    #7,.bcyk
  639.     asr.l    #7,.bszk
  640.     asr.l    #7,.bczk
  641.  
  642.     move.w    .bcyk,d6
  643.     muls.w    .bczk,d6
  644.     asr.l    #8,d6
  645.     move.w    .bsxk,d7
  646.     muls    .bsyk,d7
  647.     asr.l    #8,d7
  648.     muls    .bszk,d7
  649.     asr.l    #8,d7
  650.     sub.w    d7,d6
  651.     move.w    d6,.bmatrix0
  652.  
  653.     move.w    .bcyk,d6
  654.     muls.w    .bszk,d6
  655.     asr.l    #8,d6
  656.     move.w    .bsxk,d7
  657.     muls    .bsyk,d7
  658.     asr.l    #8,d7
  659.     muls    .bczk,d7
  660.     asr.l    #8,d7
  661.     add.w    d7,d6
  662.     move.w    d6,.bmatrix1
  663.  
  664.     move.w    .bcxk,d6
  665.     muls    .bsyk,d6
  666.     asr.l    #8,d6
  667.     neg.w    d6
  668.     move.w    d6,.bmatrix2
  669.  
  670.     move.w    .bcxk,d6
  671.     muls    .bszk,d6
  672.     asr.l    #8,d6
  673.     neg.w    d6
  674.     move.w    d6,.bmatrix3
  675.  
  676.     move.w    .bcxk,d6
  677.     muls    .bczk,d6
  678.     asr.l    #8,d6
  679.     move.w    d6,.bmatrix4
  680.  
  681.     move.w    .bsxk,.bmatrix5
  682.  
  683.     move.w    .bsyk,d6
  684.     muls.w    .bczk,d6
  685.     asr.l    #8,d6
  686.     move.w    .bsxk,d7
  687.     muls    .bcyk,d7
  688.     asr.l    #8,d7
  689.     muls    .bszk,d7
  690.     asr.l    #8,d7
  691.     add.w    d7,d6
  692.     move.w    d6,.bmatrix6
  693.  
  694.     move.w    .bsyk,d6
  695.     muls.w    .bszk,d6
  696.     asr.l    #8,d6
  697.     move.w    .bsxk,d7
  698.     muls    .bcyk,d7
  699.     asr.l    #8,d7
  700.     muls    .bczk,d7
  701.     asr.l    #8,d7
  702.     sub.w    d7,d6
  703.     move.w    d6,.bmatrix7
  704.  
  705.     move.w    .bcxk,d6
  706.     muls    .bcyk,d6
  707.     asr.l    #8,d6
  708.     move.w    d6,.bmatrix8
  709.  
  710.     movec    cacr,d0
  711.     or.w    #$808,d0
  712.     movec    d0,cacr
  713.  
  714. ;------------------------------------ rotatoi matriisissa objecti
  715.  
  716.     lea    bez.newcords,a0        ;rotta xyz source
  717.     lea    bez.newcords,a1        ;rotta xyz destination
  718.  
  719.     move.w    bez.objectN,d6
  720.     ble    .noobject
  721.     subq.w    #1,d6
  722. .bhi
  723.     move.w    (a0)+,(a1)+        ;txt number
  724.     move.w    #16-1,d7
  725.  
  726.  
  727. .bloop    movem.w    (a0)+,d0/d1/d2
  728.  
  729.     move.w    d0,d3
  730. .bmatrix0    = *+2
  731.     muls.w    #$1234,d3
  732.     move.w    d1,d4
  733. .bmatrix1    = *+2
  734.     muls.w    #$1234,d4
  735.     add.l    d4,d3
  736.     move.w    d2,d4
  737. .bmatrix2    = *+2
  738.     muls.w    #$1234,d4
  739.     add.l    d4,d3
  740.  
  741.     move.w    d0,d4
  742. .bmatrix3    = *+2
  743.     muls.w    #$1234,d4
  744.     move.w    d1,d5
  745. .bmatrix4    = *+2
  746.     muls.w    #$1234,d5
  747.     add.l    d5,d4
  748.     move.w    d2,d5
  749. .bmatrix5    = *+2
  750.     muls.w    #$1234,d5
  751.     add.l    d5,d4
  752.  
  753. .bmatrix6    = *+2
  754.     muls.w    #$1234,d0
  755. .bmatrix7    = *+2
  756.     muls.w    #$1234,d1
  757.     add.l    d1,d0
  758. .bmatrix8    = *+2
  759.     muls.w    #$1234,d2
  760.     add.l    d2,d0
  761.  
  762.     add.l    bez.xpos,d3
  763.     add.l    bez.ypos,d4
  764.     add.l    bez.zpos,d0
  765.     asr.l    #8,d0            
  766.     asr.w    #1,d0
  767.  
  768.     bne    .nozero
  769. ;    not.l    $ffff9800.w
  770.     move.w    #1,d0
  771. .nozero    
  772.  
  773.     divs.w    d0,d3
  774.     divs.w    d0,d4            
  775.  
  776.     add.w    #$7fff,d3
  777.     move.w    d3,(a1)+
  778.     add.w    #$7fff,d4
  779.     move.w    d4,(a1)+
  780.  
  781.     dbra    d7,.bloop
  782.     dbf    d6,.bhi
  783. .noobject
  784.     rts
  785. ;---------
  786. bez.morph
  787.     move.l    bez.eka,a0
  788.     move.l    bez.toka,a1
  789.     lea    bez.newcords,a2
  790.     move.w    bez.mixer,d0        ;tokan suhde
  791.     move.w    #$7fff,d1
  792.     sub.w    d0,d1            ;ekan suhde
  793.     move.w    bez.objectN,d7
  794.     ble    .noobject
  795.     subq.w    #1,d7
  796. .hi
  797.     move.w    (a0)+,(a2)+        ;copy texture ekasta
  798.     move.w    (a1)+,d2        ;skip tokan texture
  799.     move.w    #16-1,d6
  800. .lo
  801.     move.w    (a0)+,d2
  802.     muls.w    d1,d2
  803.     move.w    (a1)+,d3
  804.     muls.w    d0,d3
  805.     add.l    d3,d2            ;mix X
  806.     add.l    d2,d2
  807.     swap    d2
  808.     move.w    d2,(a2)+
  809.  
  810.     move.w    (a0)+,d2
  811.     muls.w    d1,d2
  812.     move.w    (a1)+,d3
  813.     muls.w    d0,d3
  814.     add.l    d3,d2            ;mix Y
  815.     add.l    d2,d2
  816.     swap    d2
  817.     move.w    d2,(a2)+
  818.  
  819.     move.w    (a0)+,d2
  820.     muls.w    d1,d2
  821.     move.w    (a1)+,d3
  822.     muls.w    d0,d3
  823.     add.l    d3,d2            ;mix Z
  824.     add.l    d2,d2
  825.     swap    d2
  826.     move.w    d2,(a2)+
  827.  
  828.     dbf    d6,.lo
  829.  
  830.     dbf    d7,.hi
  831. .noobject
  832.     rts
  833.  
  834. bez.newcords
  835.     ds.w    10*(16+16+16+1)
  836. ;-------------------
  837. feed.control
  838.     lea    $ffffa202.w,a1    
  839.     lea    $ffffa206.w,a0    
  840.  
  841.     move.w    bez.objectN,d6
  842.     ble    .no_objects
  843.  
  844. .lpx    btst    #0,(a1)        
  845.     beq.s    .lpx
  846.     move.w    (a0),d0
  847.     cmp.w    #$babe,d0
  848.     bne    bez.reset
  849.  
  850. .lp1    btst    #1,(a1)        
  851.     beq.s    .lp1
  852.     move.l    #0,-2(a0)
  853.  
  854.     lea    bez.newcords,a2
  855.  
  856. .sync2    btst    #1,(a1)
  857.     beq.s    .sync2
  858.     move.w    d6,(a0)                ;matto N
  859.     subq    #1,d6
  860. .filler2
  861. .sync    btst    #1,(a1)
  862.     beq.s    .sync
  863.     rept    33
  864.     move.w    (a2)+,(a0)        ;txt number, 16 x-y
  865.     endr
  866.     dbf    d6,.filler2
  867.  
  868. .no_objects
  869.     rts
  870. ;-------------------
  871. render.bez
  872.     lea    $ffffa202.w,a1    
  873.     lea    $ffffa206.w,a0    
  874.  
  875.  
  876. .lpx    btst    #0,(a1)        
  877.     beq.s    .lpx
  878.     move.w    (a0),d0
  879.     cmp.w    #$babe,d0
  880.     bne    bez.reset
  881.  
  882. .lp1    btst    #1,(a1)        
  883.     beq.s    .lp1
  884.     move.l    #1,-2(a0)        ;render beziers
  885.     rts
  886. ;-------------------
  887. bez.clear
  888.     lea    $ffffa202.w,a1    
  889.     lea    $ffffa206.w,a0    
  890.  
  891. .lpx    btst    #0,(a1)        
  892.     beq.s    .lpx
  893.     move.w    (a0),d0
  894.     cmp.w    #$babe,d0
  895.     bne    bez.reset
  896.  
  897. .lp1    btst    #1,(a1)        
  898.     beq.s    .lp1
  899.     move.l    #4,-2(a0)        ;clear screen
  900.  
  901.     rts
  902.  
  903. ;-------------------
  904. bez.render.screen
  905.     lea    $ffffa202.w,a1    
  906.     lea    $ffffa206.w,a0        ;read words..
  907.  
  908. .lpx    btst    #0,(a1)        
  909.     beq.s    .lpx
  910.     move.w    (a0),d0
  911.     cmp.w    #$babe,d0
  912.     bne    bez.reset
  913.  
  914. .lp1    btst    #1,(a1)        
  915.     beq.s    .lp1
  916.     move.l    #2,-2(a0)        ;render poly!
  917.  
  918.     movec    cacr,d0
  919.     bclr    #8,d0
  920.     movec    d0,cacr
  921.     
  922.     move.l    bez.physic(pc),a2
  923.     lea    .killerlist,a5
  924.     move.w    bez.palpoint,d1
  925.     move.l    a2,a3
  926.     move.l    a2,a4
  927.     add.w    (a5,d1.w*8),a2
  928.     add.w    2(a5,d1.w*8),a3
  929.     add.w    4(a5,d1.w*8),a4
  930.  
  931.     move.l    #16,d0
  932.     move.w    #(238*2)-1,d7
  933. .sync    btst    #0,(a1)
  934.     beq.s    .sync
  935.  
  936. .fil
  937.     rept    10
  938.     move.w    (a0),(a2)
  939.     add.l    d0,a2
  940.     move.w    (a0),(a3)
  941.     add.l    d0,a3
  942.     move.w    (a0),(a4)
  943.     add.l    d0,a4
  944.     endr
  945.     dbf    d7,.fil
  946.  
  947.     movec    cacr,d0
  948.     bset    #8,d0
  949.     movec    d0,cacr
  950.  
  951.     rts
  952.  
  953. .killerlist
  954.     dc.w    10,12,14,0
  955.     dc.w    12,14,0,0
  956.     dc.w    14,0,2,0
  957.     dc.w    0,2,4,0
  958.     dc.w    2,4,6,0
  959.     dc.w    4,6,8,0
  960.     dc.w    6,8,10,0
  961.     dc.w    8,10,12,0
  962. ;---------------------------------------------
  963. feed.pal
  964.     move.w    bez.palpoint,d0
  965.     ifne    bez.blur
  966.     addq.w    #1,d0
  967.     endc
  968.     and.w    #$7,d0
  969.     move.w    d0,bez.palpoint
  970.     move.l    address.freemem,a0
  971.     add.l    #bez.palette,a0
  972.     lsl.w    #8,d0
  973.     lea    (a0,d0.w*4),a0
  974.     lea    $ffff9800.w,a1
  975.     move.w    #16-1,d7
  976. .loop
  977.     rept    16
  978.     move.l    (a0)+,(a1)+    
  979.     endr
  980.     dbf    d7,.loop    
  981.     rts
  982. bez.palpoint
  983.     dc.w    0
  984.  
  985. ;---------------------------------------------
  986. prefeed.pal
  987.     lea    bez.prepalette,a0
  988.     move.l    address.freemem,a1
  989.     add.l    #bez.palette,a1
  990.     moveq    #0,d0
  991.     moveq    #8-1,d6
  992. .framet
  993.     moveq    #0,d1
  994.     move.w    #256-1,d7
  995. .loop
  996.     move.w    d1,d2
  997.     ror.b    d0,d2
  998.     move.w    d2,d4
  999.     add.w    d4,d4
  1000.     add.w    d2,d4
  1001.     moveq    #0,d3
  1002.     move.b    (a0,d4.w),d3
  1003.     lsl.w    #8,d3
  1004.     move.b    1(a0,d4.w),d3
  1005.     swap    d3
  1006.     move.b    2(a0,d4.w),d3
  1007.     move.l    d3,(a1)+    
  1008.     addq    #1,d1
  1009.     dbf    d7,.loop    
  1010.  
  1011.     addq    #1,d0
  1012.     dbf    d6,.framet
  1013.     rts
  1014. ;---------------------------------------------
  1015. ; a2 - texture number.b, 32*32 texture.b 3 bittisena
  1016. bez_feedtexture
  1017.  
  1018.     lea    $ffffa202.w,a1    
  1019.     lea    $ffffa207.w,a0
  1020.  
  1021. .lpx    btst    #0,(a1)        
  1022.     beq.s    .lpx
  1023.     move.w    -1(a0),d0
  1024.     cmp.w    #$babe,d0
  1025.     bne    bez.reset
  1026.  
  1027. .lp    btst    #1,(a1)        
  1028.     beq.s    .lp        
  1029.     move.l    #5,-3(a0)        ; feed gfx
  1030.  
  1031. .lp2    btst    #1,(a1)        
  1032.     beq.s    .lp2        
  1033.  
  1034.     move.b    (a2)+,(a0)        ;texture number
  1035.  
  1036. .lp3    btst    #1,(a1)        
  1037.     beq.s    .lp3
  1038.  
  1039.     move.w    #30-1,d7
  1040. .loop
  1041.     moveq    #30-1,d6
  1042.  
  1043. .wlo    move.b    (a2)+,(a0)            ;write texture (0-7) to dsp (dot order)
  1044.     dbf    d6,.wlo
  1045.  
  1046.     addq.l    #2,a2
  1047.     dbf    d7,.loop
  1048.  
  1049.     rts
  1050. ;---------------------------------------------
  1051. bez_feedtables:
  1052.     lea    $ffffa202.w,a1    
  1053.     lea    $ffffa206.w,a0
  1054.  
  1055. .lpx    btst    #0,(a1)        
  1056.     beq.s    .lpx
  1057.     move.w    (a0),d0
  1058.     cmp.w    #$babe,d0
  1059.     bne    bez.reset
  1060.  
  1061. .lp    btst    #1,(a1)        
  1062.     beq.s    .lp        
  1063.     move.l    #3,-2(a0)        ;feed tables
  1064.  
  1065. .lp2    btst    #1,(a1)        
  1066.     beq.s    .lp2        
  1067.  
  1068.     lea    kerrointable,a2
  1069.     move.w    #120-1,d7
  1070. .loop2
  1071.     move.l    (a2)+,d0
  1072.     lsl.l    #7,d0
  1073.     move.l    d0,-2(a0)
  1074.     dbf    d7,.loop2
  1075.  
  1076.     rts
  1077.  
  1078. ;---------------------------------------------
  1079. ;  DSP ROUTINES..
  1080. ;------------------------------------------------------------------------
  1081. bez.DSP_LOAD:
  1082.     move.w    #$2300,sr
  1083.     MOVE.W    #1,-(SP)
  1084.     move.l    #(bez.dsp_end-bez.dsp_boot)/3,-(sp)
  1085.     move.l    #bez.dsp_boot+9,-(sp)        ;devpac56:n headereita
  1086.     MOVE.W    #$6e,-(SP)
  1087.     TRAP    #14
  1088.     LEA    12(SP),SP
  1089.     tst.l    d0
  1090.     bmi    bez.reset            ;dsp melted beyond braindamage..
  1091.     tst.l    d1
  1092.     bmi    bez.reset            ;dsp melted beyond braindamage..
  1093.  
  1094.     addq.w    #1,activepoint
  1095.     rts
  1096.  
  1097. bez.reset
  1098.     jmp    reset
  1099.  
  1100. bez.dsp_boot
  1101.     incbin    d:\motion\revenge\dsp\bezier6.p56
  1102.     even
  1103. bez.dsp_end
  1104.     even
  1105. ;----------------------------------------
  1106.  
  1107.     cnop    4,0
  1108. bez.prepalette
  1109. ;    dc.l    0
  1110. ;x    set    36*256
  1111. ;    rept    255
  1112. ;    dc.b    x/256,x/256,0
  1113. ;x    set    x+(255-36)
  1114. ;    endr
  1115.     incbin    bezier\pal.bin
  1116.     even
  1117. texture1    
  1118.     dc.b    0
  1119. ;    dcb.b    900,4
  1120.     incbin    bezier\tmap1.bin
  1121.     even
  1122. texture2
  1123.     dc.b    1
  1124.     incbin    bezier\tmap2.bin
  1125.     even
  1126. texture3
  1127.     dc.b    2
  1128.     incbin    bezier\tmap3.bin
  1129.     even
  1130. texture4
  1131.     dc.b    3
  1132.     incbin    bezier\tmap4.bin
  1133.     even
  1134. texture5
  1135.     dc.b    4
  1136.     incbin    bezier\tmap5.bin
  1137.     even
  1138. kerrointable
  1139.     incbin    bezier\beztab30.bin
  1140.     even
  1141. lentotable
  1142.     incbin    bezier\bspltabl.bin
  1143.     even
  1144. bez.object1
  1145.     incbin    bezier\amppari.ani
  1146. ;    incbin    bezier\mato.ani
  1147. ;    incbin  bezier\a.ani
  1148.     even
  1149. bez.object2
  1150. ;    incbin    bezier\mato.ani
  1151.     incbin    bezier\torus.ani
  1152.     even
  1153.  
  1154.     rsreset
  1155. bez.palette    rs.l    256*8
  1156. bez.screen:    rs.w    320*256/2+128
  1157.  
  1158.  
  1159.