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