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

  1. ;-------------------------------------------------------------- 
  2. ; Texture-mapping with multible GouraUd-shades by WizTom of AGGRESSION
  3. ; 25k pixel a frame, 1.25M a second!
  4. ; neliopiirtotestaus..
  5. ; flippizekki, flipatussa toka piste vasemmalla, muuten oikealla
  6. ; Gshade X sukka hiukan
  7.  
  8. PBC    equ    $ffe0
  9. HSR    equ    $ffe9
  10. HTX    equ    $ffeb
  11.  
  12. v1    equ    0
  13. v1b    equ    $003f80
  14. v2    equ    0
  15. v2b    equ    0
  16. v3    equ    0
  17. v3b    equ    0
  18. v4    equ    0
  19. v4b    equ    0
  20.  
  21.     org    p:$0
  22.     jmp    start
  23.  
  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,0,0,0,0,0,0,0,0
  28.     dc    0,0,0,0,0,0,0,0,0,0
  29.     dc    0,0,0,0,0,0,0,0,0,0
  30.     dc    0,0,0,0
  31.  
  32. start    
  33.     move    #>$ffff,m0
  34.     jsr    fixvakiot
  35.     move    m0,m1        
  36.     move    m0,m2        
  37.     move    m0,m3        
  38.     move    m0,m4        
  39.     move    m0,m5        
  40.     move    m0,m6        
  41.     move    m0,m7        
  42.     jsr    geninvert
  43.  
  44.     movep    #0,x:$fffe        ;fix read
  45.     move    #>$babe,x0
  46. x_ready    jclr    #1,X:HSR,x_ready
  47.     move    x0,X:HTX        
  48.  
  49. kasky    movep    #1,X:PBC        
  50.     jclr    #0,x:HSR,kasky
  51.     move    x:HTX,a
  52.     tst    a    #>1,x0
  53.     jeq    key0            ;feed texture
  54.     sub    x0,a
  55.     jeq    key1            ;render test
  56. ;    sub    x0,a
  57. ;    jeq    key2            
  58. ;    sub    x0,a
  59. ;    jeq    key3            
  60.     
  61.  
  62.     jmp    start
  63. ;---------------------------------------
  64. key1
  65.     jsr    getvalues
  66.     jsr    createginc
  67.     jsr    renderpoly
  68.     jmp    start
  69. ;-----------------------------
  70. renderpoly
  71.     move    #TXTlineinc,r0            ;y7.7 - x7.16 Tinc
  72.     move    #vakio,r1            ;v4b (maski)
  73.     move    #HTX,r3    
  74.     move    #texture,r2            ;
  75.     move    #invert,r6
  76.  
  77.     move    #GincY,r5
  78.     move    x:Ysize,a
  79.     tst    a
  80.     jle    zeroekapartti
  81.     move    a1,x0
  82.     jsr    drawhalfpoly
  83. zeroekapartti
  84.     
  85.     move    x:Ysize2,a
  86.     tst    a
  87.     jle    zerotokapartti
  88.     move    #POLYbase,r4
  89.     move    x:flip,b
  90.     tst    b
  91.     jeq    noflip    
  92. ;---
  93.     move    x:POLYbase2,x0
  94.     move    x0,x:(r4)+        ;flipattu poly muuta vasen laita
  95.     move    x:POLYinc2,x0
  96.     move    x0,x:(r4)+
  97.     
  98.     move    l:(r4)+,x        ;txt alin
  99.     move    x,l:TXTvasen    
  100.     move    l:(r4),x        ;txt alin inc
  101.     move    x,l:TXTvaseninc
  102.  
  103.     move    a1,x0
  104.     jsr    drawhalfpoly
  105. zerotokapartti
  106.     rts
  107. ;---
  108. noflip
  109.     move    x:POLYbase2,x0        ;default polu, muuta oikea laita
  110.     move    x0,y:(r4)+
  111.     move    x:POLYinc2,x0
  112.     move    x0,y:(r4)+
  113.     
  114.     move    l:(r4)+,x        ;txt alin
  115.     move    x,l:TXToikea    
  116.     move    l:(r4),x        ;txt alin inc
  117.     move    x,l:TXToikeainc
  118.  
  119.     move    a1,x0
  120.     jsr    drawhalfpoly
  121.     rts
  122. ;--------
  123. Drawhalfpoly
  124.     do    x0,lines
  125. ; Y-------
  126.     move    #-3,n4
  127.     move    #txtoikea,r4
  128.  
  129.     move    l:POLYbase,x            ;
  130.     move    l:POLYinc,a
  131.     add    x,a    #>2048,y0        ;inc seuraavalle scanlinelle
  132.     mpy    y0,x1,a    a,l:POLYbase        ;
  133.     mpy    y0,x0,a    a,y0            ;
  134.     move    #>0,a0
  135.  
  136. Wxoff    jclr    #1,X:HSR,Wxoff
  137.     move    y0,X:HTX            ;linen alku Xoffset
  138.  
  139.     sub    y0,a    #>$40000,y0
  140.     jle    zeroline
  141.     move    a,x0    
  142.     mpy    y0,x0,b    a1,n6
  143.     
  144. Wwide    jclr    #1,X:HSR,Wwide
  145.     move    b1,X:HTX            ;scanlinen dbf
  146.  
  147.     move    #>$1f,b
  148.     and    x0,b    #>32,y0
  149.     neg    b
  150.     add    y0,b
  151.     
  152. Wwide2    jclr    #1,X:HSR,Wwide2
  153.     move    b1,X:HTX            ;scanlinen jmp
  154.  
  155. ;-------
  156.     move    l:(r4)+,b            ;oikea
  157.     move    l:(r4)+,a            ;oikeainc
  158.     add    b,a    l:(r4)+,x        ;vasen
  159.     move        a,l:(r4+n4)        ;oikea
  160.  
  161.     move    l:(r4)-,a            ;vaseninc
  162.     add    x,a
  163.     sub    x,b    a,l:(r4)    ;txt wide?, vasen
  164.  
  165.     move    y:(r6+n6),y0    
  166.     move    b1,y1
  167.     mpy    y0,y1,b    b0,y1            ;scale y
  168.     move    x:(r6+n6),y0
  169.     mpy    y0,y1,a    
  170.     move    a1,b0                ;scale x
  171.     move    b10,l:(r0)            ;lineinc
  172.  
  173.     move    x1,b
  174.     rep    #9
  175.     asr    b
  176.     move    b1,x1    
  177.  
  178.     move    #GincX,r4        ;Gshade inc table (alkuun joka scanline)
  179.     move    y:(r5)+,b            ;Gbase
  180. ;fix eka pixel
  181.     move    x1,a
  182.     move    y:(r1),y1
  183.     and    y1,a    #>128,y0        ;vakio
  184.     mac    y0,x0,a    #>0,y1
  185.     move    a1,n2
  186.  
  187.     do    n6,scanline            ;(feed cpu start,wide)
  188. ; X-----------------
  189.     add    y1,b    l:(r0),a        ; inc G, get YX inc
  190.     add    x,a    y:(r1),y1        ; inc TXTbase, get mask
  191.     and    y1,a    a,x1    y:(r2+n2),y1    ; crop Y, get GFX
  192.     mac    y0,x0,a    a0,x0            ; Y+X old 
  193.     add    y1,b    a1,n2            ; mix GFX+G
  194. sync    jclr    #1,x:HSR,sync
  195.     sub    y1,b    b,x:(r3) y:(r4)+,y1    ; get G, feed CPU, get G inc
  196. scanline
  197. ;------------
  198. zeroback
  199.     nop
  200.     nop
  201. lines
  202.     rts
  203. ;---------------
  204. zeroline
  205.     clr    b    #>32,a
  206. Wwide3    jclr    #1,X:HSR,Wwide3
  207.     move    b1,X:HTX            ;scanlinen dbf
  208. Wwide4    jclr    #1,X:HSR,Wwide4
  209.     move    a1,X:HTX            ;scanlinen dbf
  210.  
  211.     move    l:(r4)+,b            ;oikea
  212.     move    l:(r4)+,a            ;oikeainc
  213.     add    b,a    l:(r4)+,x        ;vasen
  214.     move        a,l:(r4+n4)        ;oikea
  215.  
  216.     move    l:(r4)-,a            ;vaseninc
  217.     add    x,a    y:(r5)+,b        ;Gbase
  218.     move    a,l:(r4)            ;vasen
  219.  
  220.     jmp    zeroback
  221. ;------------------------------------
  222. createginc
  223.     move    x:Ysize,a
  224.     move    x:Ysize2,x0
  225.     move    x:flip,b
  226.     tst    b
  227.     jeq    eiflipGshade
  228. ;------------------------ Y table split
  229.     move    #GincY,n3
  230.     tst    a
  231.     jle    eiGXeka
  232.     move    a1,n0
  233.     move    #Geka,r0
  234.     move    #Gtoka,r1
  235.     jsr    GenGtable
  236.     move    r3,n3        ;ekan partin loppuosoite
  237. eiGxeka
  238.     move    x:Ysize2,a
  239.     tst    a
  240.     jle    creaGX
  241.     move    a1,n0
  242.     move    #Gtoka,r0
  243.     move    #Gkolmas,r1
  244.     jsr    GenGtable
  245. ;------------------------ X table flip
  246. creaGX    move    #GincX,n3
  247.     move    x:Xwide,a
  248.     tst    a
  249.     jle    creaGover
  250.     move    a1,n0
  251.     move    #Gtoka,r0
  252.     move    #Ghalf,r1
  253.     jsr    GenGtable
  254.     jmp    creaGover
  255. ;------------------------ Y table
  256. eiflipGshade
  257.     add    x0,a    
  258.     move    a1,n0            ;kokonaiskorkeus
  259.     move    #GincY,n3
  260.     move    #Geka,r0
  261.     move    #Gkolmas,r1
  262.     jsr    GenGtable
  263. ;----------------------- X table
  264.     move    #GincX,n3
  265.     move    x:Xwide,a
  266.     tst    a
  267.     jle    creaGover
  268.     move    a1,n0
  269.     move    #Ghalf,r0
  270.     move    #Gtoka,r1
  271.     jsr    GenGtable
  272. ;----------------------- X delta
  273. creaGover
  274.     move    n3,r3
  275.     do    n0,deltaconv
  276.     move    y:(r3)+,x0
  277.     move    y:(r3)-,a
  278.     sub    x0,a
  279.     move    a1,y:(r3)+
  280.     clr    a
  281. deltaconv
  282.     rep    #10            ;hiukka heittovaraa deltalle..
  283.     move    a,y:(r3)+
  284.     rts
  285.  
  286. ;----------------------------------
  287. GenGtable
  288.     clr    a    n3,r3
  289.     rep    n0
  290.     move    a,y:(r3)+
  291.  
  292.     move    n3,r3
  293.     move    x:(r0),y0
  294.     move    x:(r1),y1
  295.     move    #>128,x1
  296.     mpy    x1,y0,a    #GxB,r7
  297.     mpy    x1,y1,b    a0,a
  298.     move    b0,b
  299.     jsr    Gslide
  300.  
  301.     move    n3,r3
  302.     move    #GxG,r7
  303.     move    x:(r0),a
  304.     move    x:(r1),b
  305.     jsr    Gslide
  306.  
  307.     move    x:(r0),y0
  308.     move    x:(r1),y1
  309.     move    #>$8000,x1
  310.     mpy    x1,y0,a    n3,r3
  311.     mpy    x1,y1,b    #GxR,r7
  312.     jsr    Gslide
  313.  
  314.     rts
  315. ;------------------
  316. Gslide
  317.     move    #>$007f00,x1
  318.     and    x1,a
  319.     and    x1,b    a1,x1
  320.     move    b1,b
  321.     sub    x1,b    #>$40,y1        ;G delta
  322.     move    b1,x0
  323.     mpy    x0,y1,a    n0,x0
  324.  
  325.     andi    #$fe,ccr            ;clear carry
  326.     rep    #24
  327.     div    x0,a
  328.  
  329.     asl    a
  330.     move    a0,x0            ;inc
  331.     move    x1,a            ;base
  332.     rep    #7
  333.     asl    a
  334.     
  335.  
  336.     do    n0,gloopy
  337.     move    a1,y0
  338.     mpy    y1,y0,b
  339.     move    b1,n7
  340.     move    y:(r3),b
  341.     move    x:(r7+n7),y0        ;get 16 bit val
  342.     or    y0,b
  343.     add    x0,a    b1,y:(r3)+    ;step
  344. gloopy
  345.     rts
  346. ;----------------
  347. getvalues
  348.     move    #TXToikea,r0
  349.     do    #8,qq2
  350. qq    movep    #1,X:PBC        
  351.     jclr    #0,x:HSR,qq
  352.     move    x:HTX,x:(r0)
  353. qq3    movep    #1,X:PBC        
  354.     jclr    #0,x:HSR,qq3
  355.     move    x:HTX,y:(r0)+
  356. qq2
  357.     do    #10,qq4
  358. qq5    movep    #1,X:PBC        
  359.     jclr    #0,x:HSR,qq5
  360.     move    x:HTX,x:(r0)+
  361. qq4
  362.     rts
  363. ;------------------------------------
  364. key0
  365.     move    #texture,r0
  366.     move    #>128*120,x0
  367.     do    x0,gettxt
  368. getone
  369.     movep    #1,X:PBC        
  370.     jclr    #0,x:HSR,getone
  371.     move    x:HTX,y:(r0)+
  372. gettxt    
  373.     jmp    start
  374. ;------------------------------------
  375. geninvert
  376.     move    #invert,r0
  377.         
  378.     clr    b    #>1,x1
  379.     do    #300,genloop
  380.  
  381.     move    b1,x0
  382.     add    x1,b
  383.     move    #>1,a
  384.     andi    #$fe,ccr            ;clear carry
  385.     rep    #24
  386.     div    x0,a
  387.     asl    a
  388.     asr    a
  389.     move    a0,x:(r0)    
  390.     move    #>1,a
  391.     andi    #$fe,ccr            ;clear carry
  392.     rep    #24
  393.     div    x0,a
  394.     asl    a
  395.     move    a0,a
  396.     rep    #10
  397.     asr    a
  398.     move    a1,y:(r0)+    
  399. genloop
  400.  
  401.     move    #GxB,r2
  402.     move    #GxG,r1
  403.     move    #GxR,r0
  404.     clr    a    #>$0001,x0
  405.     clr    b    #>$0020,y0
  406.     move    #>$0800,x1
  407.     do    #16,genG
  408.     move    a0,x:(r2)+
  409.     move    b1,x:(r1)+
  410.     move    a1,x:(r0)+
  411.     add    y0,b        ;6 bit green!
  412.     move    a0,x:(r2)+
  413.     move    b1,x:(r1)+
  414.     move    a1,x:(r0)+
  415.     add    y0,b
  416.     add    x,a
  417. genG
  418.     rts
  419. ;------------------------------------
  420. fixvakiot
  421.     move    #vakio,r0
  422.     move    #>v1,x1
  423.     move    #>v1b,x0
  424.     move    x,l:(r0)+
  425.     move    #>v2,x1
  426.     move    #>v2b,x0
  427.     move    x,l:(r0)+
  428. ;    move    #>v3,x1
  429. ;    move    #>v1b,x0
  430. ;    move    x,l:(r0)+
  431. ;    move    #>v4,x1
  432. ;    move    #>v4b,x0
  433. ;    move    x,l:(r0)+
  434.     rts
  435. ;------------------------------------
  436. ;read_one
  437. ;    movep    #1,X:PBC        
  438. ;    jclr    #0,x:HSR,read_one
  439. ;    move    x:HTX,a1
  440. ;write_one
  441. ;    jclr    #1,X:HSR,write_one
  442. ;    move    a1,X:HTX        
  443. ;---------------------
  444. ;----------------------
  445. ;jako                        ;divs x0,a (signed $123.456)
  446. ;    rep    #12
  447. ;    asr    a
  448. ;    andi    #$fe,ccr            ;clear carry
  449. ;    rep    #24
  450. ;    div    x0,a
  451. ;    asl    a
  452. ;    jclr    #23,x0,pos_diver
  453. ;    neg    a
  454. ;pos_diver
  455. ;    rts        ;signed result in a0 (finally WORKS!!!)
  456. ;---------------------------------
  457.     org    x:$0
  458. vakio        ds    4
  459. TXTlineinc    ds    1
  460. TXToikea    ds    1        ;y.7 - x.16
  461. TXToikeainc    ds    1
  462. TXTvasen    ds    1
  463. TXTvaseninc    ds    1
  464. POLYbase    ds    1        ;vasen.12 - oikea.12
  465. POLYinc        ds    1
  466. TXTalin        ds    1
  467. TXTalininc    ds    1
  468. POLYbase2    ds    1
  469. POLYinc2    ds    1
  470. Geka        ds    1
  471. Gtoka        ds    1
  472. Gkolmas        ds    1
  473. Ysize        ds    1
  474. Ysize2        ds    1
  475. Xwide        ds    1
  476. Ghalf        ds    1
  477. flip        ds    1
  478. invert        ds    300
  479. GxR        ds    32        ;slidetablet
  480. GxG        ds    32
  481. GxB        ds    32
  482.  
  483.     org    y:$0
  484. vakiob        ds    4
  485.         ds    19
  486.         ds    300
  487. gincx        ds    300        ;relativ gshade(max gshade size)
  488. gincy        ds    256
  489. texture                ;128*120 (?), 350 vapaata
  490.     end
  491.