home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / AGGRESSN / MOTION.ZIP / MOTION / DSP / GSHADE11.S56 < prev    next >
Text File  |  1995-04-06  |  9KB  |  483 lines

  1. ;---------------------------------------------------------
  2. ; Gshade matikat by WizTom.. 
  3. ;--------------------------------------------
  4. ; pari vittuilua dsp:ltä.. 
  5. ; flagit asettuu vain accu laskuista, tst a rulz (accu move ylivuotoon)
  6. ; 32kwordia ext rammia p/x/y, 512+256*2 int.
  7. ; mpy kertaa vastauksen kahdella
  8.  
  9. ; reunastepit, delta vasenreuna (+wide)
  10. ; entire polygon, unzekked size (toka kulma vajaa?), endaa  reunojen törmätessä..
  11. ; deltaclear...
  12.  
  13. PBC    equ    $ffe0
  14. HSR    equ    $ffe9
  15. HTX    equ    $ffeb
  16.  
  17.     org    p:$200
  18.     jmp    start
  19.     dc    $fac030
  20. start    
  21. secure    movep    #1,X:PBC
  22.     jclr    #0,x:HSR,secure
  23.     move    x:HTX,a
  24.     lsl    a    
  25.     movep    #0,x:$fffe        ;port a (luku tahtoo tökkiä ilman..)
  26. secure2    jclr    #1,X:HSR,secure2
  27.     move    a1,X:HTX        
  28.     
  29.     move    #$ffff,m0    
  30.     move    #$ffff,m1    
  31.     move    #$ffff,m2    
  32.     move    #$ffff,m3    
  33.     move    #$ffff,m4    
  34.     move    #$ffff,m5    
  35.     move    #$ffff,m6    
  36.     move    #$ffff,m7    
  37. start2
  38.  
  39.     move    #$123456,x0
  40. secure3    jclr    #1,X:HSR,secure3
  41.     move    x0,X:HTX        
  42.  
  43.  
  44. kasky    movep    #1,X:PBC
  45.     jclr    #0,x:HSR,kasky
  46.     move    x:HTX,a
  47.     tst    a
  48.     jne    jotain
  49.  
  50. kasky_zero
  51.     jsr    get_polys
  52.     jsr    clear_x_buf
  53.     jsr    calc_poly_steps
  54.     jsr    x_delta
  55.     jsr    write_result
  56.  
  57.     jmp    start2
  58.  
  59. jotain
  60.     move    #>$fac,x0
  61. jotain2    jclr    #1,X:HSR,jotain2        ;feed object,clear x_buf
  62.     move    x0,X:HTX        
  63.     jmp    start2
  64. ;---------------------------------------------------
  65.  
  66. get_polys
  67. ae    movep    #1,X:PBC            ;screen base
  68.     jclr    #0,x:HSR,ae
  69.     move    x:HTX,x0
  70.     move    x0,x:Screen
  71.  
  72. aa    movep    #1,X:PBC        
  73.     jclr    #0,x:HSR,aa
  74.     move    x:HTX,x0            ;polymäärä
  75.     move    x0,x:number_of_polys
  76.     move    x0,a
  77.     add    x0,a
  78.     add    x0,a
  79.     move    a1,x0
  80.     
  81.     move    #cords,r0
  82.     do    x0,feed_me1
  83. aab    movep    #1,X:PBC            ;feed x
  84.     jclr    #0,x:HSR,aab
  85.     move    x:HTX,x:(r0)+
  86. ac    movep    #1,X:PBC            ;y
  87.     jclr    #0,x:HSR,ac
  88.     move    x:HTX,x:(r0)+
  89. ad    movep    #1,X:PBC            ;z (kulman shadeval)
  90.     jclr    #0,x:HSR,ad
  91.     move    x:HTX,x:(r0)+
  92.     nop
  93. feed_me1
  94.     rts
  95. ;-------------------------------------------------
  96. write_result
  97.     move    #-1,x0
  98.     move    x0,x:(r4)+
  99.     move    x0,x:(r4)+            ;lopeta lista
  100.     move    #cpu_list,r0
  101.     move    #-1,a
  102.     
  103. suck    move    x:(r0)+,x0
  104.     cmp    x0,a
  105.     jne    aba
  106.     move    x:(r0),x1
  107.     cmp    x1,a
  108.     jeq    skriivattu_vika
  109. aba    jclr    #1,X:HSR,aba
  110.     move    x0,X:HTX        
  111.     jmp    suck
  112. skriivattu_vika
  113. aaa    jclr    #1,X:HSR,aaa
  114.     move    x0,X:HTX        
  115. abc    jclr    #1,X:HSR,abc
  116.     move    x1,X:HTX        
  117.  
  118.     move    #x_buf_delta,r0
  119.     do    #200*4,lusifer
  120. a_666    jclr    #1,X:HSR,a_666
  121.     move    x:(r0)+,x0
  122.     move    x0,X:HTX        
  123.     nop
  124. lusifer
  125.     rts
  126. ;---------------------------------------------------------
  127. cleaR_x_buf
  128.     move    #x_buffer1,r0
  129.     move    #0,x0
  130.     rep    #2*200
  131.     move    x0,x:(r0)+
  132.     rts
  133. ;---------------------------------------------------------
  134. x_delta
  135.     move    #x_buffer1,r0
  136.     move    #x_buffer2,r1
  137.     move    #x_buf_delta,r2
  138.     do    #200,elder_ones
  139. ;---------
  140.     move    x:(r0)+,a        ;new
  141.     move    x:(r1),x0        ;old
  142.     sub    x0,a    a,x:(r1)+    ;new -> old
  143.     jgt    amok1
  144.     move    #0,a
  145. amok1    
  146.     move    x0,x:(r2)+        ;x1    
  147.     move    a,x:(r2)+        ;wide (zero if none)
  148.  
  149.     move    x:(r0)+,x0        
  150.     move    x:(r1),a    
  151.     sub    x0,a    x0,x:(r1)+    
  152.     jgt    amok2
  153.     move    #0,a
  154. amok2
  155.     move    x0,x:(r2)+        ;x2    
  156.     move    a,x:(r2)+        ;wide2 
  157.  
  158. elder_ones
  159.     rts
  160. ;---------------------------------------------------------
  161. calc_poly_steps
  162.     move    #cpu_list,r4
  163.     move    #cords,r0
  164.     move    #cords+1,r1        ;y cords..
  165.     move    #cords+4,r2
  166.     move    #cords+7,r3
  167.     move    #9+1,n1    
  168.     move    #9+1,n2    
  169.     move    #9+1,n3    
  170.     move    #-1,n5
  171.     move    x:number_of_polys,x0
  172.     
  173.     do    x0,step_one    
  174.  
  175. ;--------------------------- sort polycords
  176.     move    x:(r1),a
  177.     move    x:(r2),x0
  178.     cmp    x0,a
  179.     jlt    lame1
  180.     move    x:-(r1),y0            ;jos 1<2 swap
  181.     move    x:-(r2),y1
  182.     move    y0,x:(r2)+
  183.     move    y1,x:(r1)+
  184.     move    x:(r1),y0        
  185.     move    x:(r2),y1
  186.     move    y0,x:(r2)+
  187.     move    y1,x:(r1)+
  188.     move    x:(r1),y0        
  189.     move    x:(r2),y1
  190.     move    y0,x:(r2)-
  191.     move    y1,x:(r1)-
  192. lame1    
  193.     move    x:(r1),a
  194.     move    x:(r3),x0
  195.     cmp    x0,a
  196.     jlt    lame2
  197.     move    x:-(r1),y0            ;jos 1<3 swap
  198.     move    x:-(r3),y1
  199.     move    y0,x:(r3)+
  200.     move    y1,x:(r1)+
  201.     move    x:(r1),y0        
  202.     move    x:(r3),y1
  203.     move    y0,x:(r3)+
  204.     move    y1,x:(r1)+
  205.     move    x:(r1),y0        
  206.     move    x:(r3),y1
  207.     move    y0,x:(r3)-
  208.     move    y1,x:(r1)-
  209. lame2    
  210.     move    x:(r2),a
  211.     move    x:(r3),x0
  212.     cmp    x0,a
  213.     jlt    lame3
  214.     move    x:-(r2),y0            ;jos 2<3 swap
  215.     move    x:-(r3),y1
  216.     move    y0,x:(r3)+
  217.     move    y1,x:(r2)+
  218.     move    x:(r2),y0        
  219.     move    x:(r3),y1
  220.     move    y0,x:(r3)+
  221.     move    y1,x:(r2)+
  222.     move    x:(r2),y0        
  223.     move    x:(r3),y1
  224.     move    y0,x:(r3)-
  225.     move    y1,x:(r2)-
  226. lame3    
  227.  
  228. ;listaan x1+y1*640.l, polyn alku, loput deltana..
  229.     move    (r1)-
  230.     move    (r2)-
  231.     move    (r3)-
  232.     move    #>640,x0
  233.     move    x:(r1)+,x1            ;x
  234.     move    x:(r1)-,y0            ;y
  235.     mpy    y0,x0,a    x:screen,y1
  236.     rep    #23
  237.     asl    a
  238.     add    y1,a        x1,x:x_start    ;inc y*640, base
  239.     tfr    a,b    
  240.     rep    #16
  241.     lsr    a
  242.     move    a1,x:(r4)+            ;high word
  243.     move    b1,x:(r4)+            ;low word
  244.  
  245.     move    y0,a
  246.     lsl    a
  247.     lsl    a    #x_buffer1,y0
  248.     add    y0,a
  249.     move    a1,r5                ;x_buffer (alkaa x:n alusta!)
  250.     
  251.     move    x:(r2)+,a
  252.     move    x:(r1)+,x0
  253.     sub    x0,a    x:(r2)-,b        ;delta x
  254.     move    x:(r1)-,x0
  255.     sub    x0,b                ;delta y
  256.     move    b1,x0
  257.     move    x0,x:eka_kork                ;eka korkeus
  258.     jsr    jako
  259.     move    a0,x1                ;eka reuna
  260.  
  261.     move    x:(r3)+,a
  262.     move    x:(r1)+,x0
  263.     sub    x0,a    x:(r3)-,b        ;delta x
  264.     move    x:(r1)-,x0
  265.     sub    x0,b                ;delta y
  266.     move    b1,x0
  267.     move    x0,x:toka_kork
  268.     jsr    jako                ;toka reuna
  269.     move    a0,x0                ;toka reuna
  270.  
  271.     move    x1,a    
  272.     move    x0,x:pitka_sivu
  273.     move    x0,b
  274.     cmp    a,b
  275.     jgt    vasen_small
  276.     move    a,x0
  277.     move    b,x1        
  278. vasen_small
  279.     move    x:x_start,a
  280.     rep    #12
  281.     asl    a
  282.     move    #$800,y0
  283.     add    y0,a    a0,x:oldpixleft        ;zero deltat
  284.     move    a0,x:oldwide            ;sortatut reunat, x+0.5
  285.     move    x:eka_kork,b
  286.     tst    b
  287.     jeq    vain_alaosa    
  288.     move    b,y0
  289.     tfr    a,b
  290.     do    y0,end_eka_puolisko
  291. ;----------
  292.     add    x1,a                ;
  293.     add    x0,b        #$800,y0    ;stepit
  294.                         
  295.     move    a1,x:s_eka            ;
  296.     move    b1,x:s_toka            ;
  297.     move    a1,y1                ;
  298.     mpy    y0,y1,a        b1,y1        ;
  299.     mpy    y0,y1,b        x:oldpixleft,y1    ;
  300.     move    #0,a0                ;
  301.     move    a1,x:d_eka            ;
  302.     move    #0,b0                ;
  303.     move    b1,x:d_toka            ;reunapisteet cleraukseen..
  304.     sub    a,b        a1,x:oldpixleft    ;wide reunapisteista, no dec
  305.     jne    ok                ;
  306.     move    #>$1,b                ;
  307. ok    move    b1,x:(r4)+            ;
  308.     move    b1,x:widespare            ;
  309.  
  310.     sub    y1,a        x:oldwide,y1    ;reuna delta
  311.     sub    y1,a        x:widespare,y1    ;subaa oldwide
  312.     move    y1,x:oldwide            ;
  313.     lsl    a        #$280,y1    ;
  314.     add    y1,a                ;
  315.     move    a1,x:(r4)+            ;vasen reuna screen delta
  316.  
  317.     move    x:d_eka,a    
  318.     move    x:(r5)+,y0            ;edellinen reuna..
  319.     cmp    y0,a
  320.     jge    alter1
  321.     move    a1,x:(r5+n5)
  322. alter1    
  323.     move    x:d_toka,a
  324.     move    x:(r5)+,y0
  325.     cmp    y0,a
  326.     jle    alter2
  327.     move    a1,x:(r5+n5)
  328. alter2
  329.  
  330.     move    x:s_eka,a            ;
  331.     move    x:s_toka,b            ;
  332.  
  333. end_eka_puolisko
  334.  
  335.     move    x0,y1
  336.     move    x:eka_kork,y0
  337.     move    x:toka_kork,a    a,y1
  338.     sub    y0,a    
  339.     jeq    toka_puolisko
  340.     move    a1,x0
  341.     move    x:(r3),a    
  342.     move    x:(r2),y0
  343.     sub    y0,a                ;
  344.     jsr    jako                ;kolmas reuna
  345.     move    a0,x0                ;toka reuna, x0 and x1 or y1
  346.  
  347.     move    x:pitka_sivu,a
  348.     move    x0,b
  349.     cmp    a,b
  350.     jlt    menee_hermot
  351.     tfr    a,b    x0,a
  352. menee_hermot
  353.     move    a1,x1
  354.     move    b1,x0
  355.     move    x:s_eka,a
  356.     move    x:s_toka,b
  357.     cmp    a,b
  358.     jgt    vasen_small2
  359.     move    b,y0
  360.     tfr    a,b    y0,a
  361. vasen_small2
  362.  
  363. ;---------------------------
  364. toka_puolisko
  365.     add    x1,a                ;
  366.     add    x0,b        #$800,y0    ;stepit
  367.                         
  368.     move    a1,x:s_eka            ;
  369.     move    b1,x:s_toka            ;
  370.     move    a1,y1                ;
  371.     mpy    y0,y1,a        b1,y1        ;
  372.     mpy    y0,y1,b        x:oldpixleft,y1    ;
  373.     move    y0,a0                ;
  374.     move    a1,x:d_eka            ;
  375.     move    y0,b0                ;
  376.     move    b1,x:d_toka            ;
  377.     sub    a,b        a1,x:oldpixleft    ;wide reunapisteista, no dec
  378.     jne    ok2                ;
  379.     jmi    bail_out_if_negative
  380.     move    #>$1,b                ;
  381. ok2    move    b1,x:(r4)+            ;
  382.     move    b1,x:widespare            ;
  383.  
  384.     sub    y1,a        x:oldwide,y1    ;reuna delta
  385.     sub    y1,a        x:widespare,y1    ;subaa oldwide
  386.     move    y1,x:oldwide            ;
  387.     lsl    a        #$280,y1    ;
  388.     add    y1,a                ;
  389.     move    a1,x:(r4)+            ;vasen reuna screen delta
  390.  
  391.     move    x:d_eka,a    
  392.     move    x:(r5)+,y0            ;edellinen reuna..
  393.     cmp    y0,a
  394.     jge    alter3
  395.     move    a1,x:(r5+n5)
  396. alter3
  397.     move    x:d_toka,a
  398.     move    x:(r5)+,y0
  399.     cmp    y0,a
  400.     jle    alter4
  401.     move    a1,x:(r5+n5)
  402. alter4
  403.  
  404.     move    x:s_eka,a            ;
  405.     move    x:s_toka,b            ;
  406.  
  407.     jmp    toka_puolisko
  408.  
  409. bail_out_if_negative
  410.     move    #-1,x0
  411.     move    x0,x:(r4)+            ;next poly
  412.     move    (r1)+n1
  413.     move    (r2)+n2
  414.     move    (r3)+n3
  415.  
  416. step_one
  417.     move    #-1,x0
  418.     move    x0,x:(r4)+            ;end of list
  419.     rts
  420.  
  421. ;----------------
  422. vain_alaosa
  423.     move    x:(r2),b
  424.     move    x:(r1),a
  425.     move    #>$800000,b0
  426.     move    #>$800000,a0
  427.     rep    #12
  428.     lsl    b    
  429.     rep    #12
  430.     lsl    a    
  431.  
  432.     move    a,x:s_eka
  433.     jmp    end_eka_puolisko
  434. ;---------------------------------------------------
  435. jako                        ;divs x0,a (signed $123.456)
  436.     rep    #12
  437.     asr    a
  438.     andi    #$fe,ccr            ;clear carry
  439.     rep    #24
  440.     div    x0,a
  441.     asl    a
  442.     jclr    #23,x0,pos_diver
  443.     neg    a
  444. pos_diver
  445.     rts        ;signed result in a0 (finally WORKS!!!)
  446.  
  447. ;------------------------------------
  448.  
  449.     org    x:$0
  450. jakospare    ds    1
  451. s_eka        ds    1
  452. s_toka        ds    1
  453. d_eka        ds    1
  454. d_toka        ds    1
  455. eka_kork    ds    1
  456. toka_kork    ds    1
  457. pitka_sivu    ds    1
  458. x_start        ds    1
  459. oldpixleft    ds    1
  460. oldwide        ds    1
  461. widespare    ds    1
  462. screen        
  463. ;        dc    $220000
  464.         ds    1
  465. number_of_polys    
  466. ;        dc    1
  467.         ds    1
  468. cords        
  469. ;        dc    300,10,0
  470. ;        dc    100,100,0
  471. ;        dc    200,150,0
  472.         ds    9*10
  473.  
  474. x_buffer1    ds    2*200            ;objectin reunataulut x1,x2
  475. x_buffer2    ds    2*200            ;vanha frame..
  476. x_buf_delta    ds    4*200            ;x1,wide1,x2,wide2
  477.  
  478. cpu_list    ds    4*200            ;cpu listat, kaikki vapaa muisti
  479.  
  480.  
  481.     end
  482.  
  483.