home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / AGGRESSN / MOTION.ZIP / MOTION / DSP / HUKKA14.S56 < prev    next >
Text File  |  1995-07-21  |  10KB  |  536 lines

  1. ;---------------------------------------------------------------
  2. ; Doom'ish Wolfie math.. third version onwards by WizTom..
  3. ;---------------------------------------------------------------
  4. ; feed sin(alfa),cos(alfa),x_position,y_position,number of walls
  5. ; x1,z1,x2,z2,txt number (15-bit positive map, same for x/y_position)
  6. ; fucked up non signed maths.. finally?
  7. ; gone insane of Dvl-buggering..
  8. ; fixed getcord error, no more wild x:ram terror..
  9. ; fixed 'early' zero-wide clip error
  10. ; working..(no more accu low word error in Jcc)
  11. ; zeta-nega 2 zero in progress.. 
  12. ; 0.5 steppibaset
  13. ; last version! mark 2
  14. ; 32 leveet seinat
  15. ; store map ,(just one map feed)
  16. ; variable perspective variables
  17.  
  18. PBC        equ    $ffe0
  19. HSR        equ    $ffe9
  20. HTX        equ    $ffeb
  21.  
  22. txt_wide    equ    32        ;vakioleveys kaikille textureille
  23. buf_wide    equ    384
  24. dyy        equ    277*128
  25.     
  26.     org    p:$200
  27.  
  28. start    
  29.  
  30. secure    movep    #1,X:PBC
  31.     jclr    #0,x:HSR,secure
  32.     move    x:HTX,a
  33.     lsl    a    
  34.     movep    #0,x:$fffe        ;port a (luku tahtoo tökkiä ilman..)
  35. secure2    jclr    #1,X:HSR,secure2
  36.     move    a1,X:HTX        
  37.  
  38. main
  39.     move    #$ffff,m0
  40.     move    #$ffff,m1
  41.     move    #$ffff,m2
  42.     move    #$ffff,m3
  43.     move    #$ffff,m4
  44.     move    #$ffff,m5
  45.     move    #$ffff,m6
  46.     move    #$ffff,m7
  47.  
  48.     jsr    get_cords
  49.     jsr    scroll
  50.     jsr    rotate
  51.     jsr    sort
  52.     jsr    clear_z_buffer
  53.     jsr    project_Walls
  54.     jsr    scale_z_buffer
  55.     jsr    write_z_buf
  56.  
  57.     jmp    main
  58. ;---------------------------------------
  59. get_cords
  60. g_sin    movep    #1,x:PBC
  61.     jclr    #0,X:HSR,g_sin
  62.     move    X:HTX,x0
  63.     move    x0,x:sin
  64.  
  65. g_cos    movep    #1,x:PBC
  66.     jclr    #0,X:HSR,g_cos
  67.     move    X:HTX,x0
  68.     move    x0,x:cos    
  69.  
  70. g_x    movep    #1,x:PBC
  71.     jclr    #0,X:HSR,g_x
  72.     move    X:HTX,x0
  73.     move    x0,x:x_pos
  74.  
  75. g_z    movep    #1,x:PBC
  76.     jclr    #0,X:HSR,g_z
  77.     move    X:HTX,x0
  78.     move    x0,x:z_pos
  79.  
  80. g_d    movep    #1,x:PBC
  81.     jclr    #0,X:HSR,g_d
  82.     move    X:HTX,a
  83.     move    a1,x:rdee
  84.     move    #>1,x0
  85.  
  86. g_dy    movep    #1,x:PBC
  87.     jclr    #0,X:HSR,g_dy
  88.     move    X:HTX,x0
  89.     move    x0,x:rdyy
  90.  
  91. num    movep    #1,x:PBC
  92.     jclr    #0,X:HSR,num
  93.     move    X:HTX,a
  94.     tst    a
  95.     jeq    get_data
  96.     move    a1,x:number_orig
  97.  
  98.     move    #cords_of_walls,r0    
  99.     do    a1,get_data
  100.  
  101. g_x1    movep    #1,x:PBC
  102.     jclr    #0,X:HSR,g_x1
  103.     move    X:HTX,x:(r0)+
  104. g_z1    movep    #1,x:PBC
  105.     jclr    #0,X:HSR,g_z1
  106.     move    X:HTX,x:(r0)+
  107.  
  108. g_x2    movep    #1,x:PBC
  109.     jclr    #0,X:HSR,g_x2
  110.     move    X:HTX,x:(r0)+
  111. g_z2    movep    #1,x:PBC
  112.     jclr    #0,X:HSR,g_z2
  113.     move    X:HTX,x:(r0)+
  114.  
  115. g_txt    movep    #1,x:PBC
  116.     jclr    #0,X:HSR,g_txt
  117.     move    X:HTX,x:(r0)+
  118.     nop
  119. get_data
  120.  
  121.     rts
  122. ;---------------------------------------
  123. write_z_buf
  124.     move    #z_buf,r0
  125.     do    #buf_wide,hard
  126.  
  127. w1    jclr    #1,X:HSR,w1
  128.     move    x:(r0)+,X:HTX        
  129. w2    jclr    #1,X:HSR,w2
  130.     move    x:(r0)+,X:HTX        
  131. w3    jclr    #1,X:HSR,w3
  132.     move    x:(r0)+,X:HTX        
  133.     nop
  134.     nop
  135. hard
  136.     rts
  137. ;---------------------------------------
  138. scale_z_buffer
  139.     move    #z_buf,r0
  140.     move    #2,n0
  141.     move    #>buf_wide,x0
  142.     do    x0,jekku
  143.     move    x:(r0),a
  144.     rep    #8
  145.     asr    a
  146.     move    a1,x:(r0)+        ;zeta
  147.  
  148.     move    x:(r0),a        ;txt
  149. ;    rep    #8
  150. ;    asr    a
  151.     move    a1,x:(r0)+
  152.  
  153.     move    x:(r0),a        ;x offse in txtt
  154.     rep    #8
  155.     asr    a
  156.     move    a1,x:(r0)+
  157. jekku
  158.     rts
  159. ;---------------------------------------
  160. clear_z_buffer
  161.     move    #z_buf,r0
  162.     move    #>buf_wide,x0
  163.     move    #>$0,x1
  164.     do    x0,tyhjaa
  165.     move    x1,x:(r0)+
  166.     move    x1,x:(r0)+
  167.     move    x1,x:(r0)+
  168. tyhjaa
  169.     rts
  170. ;---------------------------------------
  171. rotate
  172.     move    #rotta_walls,r0
  173.     move    #2,n0
  174.  
  175.     move    x:sin,x1
  176.     move    x:cos,y1
  177.     move    x:number_orig,x0
  178.     do    x0,kesy
  179. ;------
  180.     move    x:(r0)+,x0
  181.     mpy    x0,y1,a        x:(r0)-,y0
  182.     mac    y0,x1,a                ;x*cos+z*sin (x1)
  183.  
  184.     mpy    y0,y1,b        a1,x:(r0)+
  185.     mac    -x0,x1,b            ;z*cos-x*sin (z1)
  186.     move    b1,x:(r0)+
  187.  
  188.     move    x:(r0)+,x0
  189.     mpy    x0,y1,a        x:(r0)-,y0
  190.     mac    y0,x1,a                ;toka piste
  191.  
  192.     mpy    y0,y1,b        a1,x:(r0)+
  193.     mac    -x0,x1,b            
  194.     move    b1,x:(r0)+n0
  195. kesy
  196.     rts
  197. ;---------------------------------------
  198. ; terminoi z-negat veke, wide zero/nega vasta projectiosta!
  199. ; ehkä puolikaat z-negat zeroon..(?)
  200.  
  201. sort
  202.     move    #sorted_walls,r1    ;copy dest
  203.     move    #rotta_Walls,r0
  204.     move    #2,n0
  205.     move    #0,r7
  206.     move    #>256*276,x1        ;zeta nolla silmään..
  207. ; zek if visible, copy r0 -> r1
  208.     move    x:number_orig,x0
  209.     do    x0,kelaa_kaikki
  210. ;----
  211.     nop
  212.     move    r0,r2            ;source base
  213.     move    (r0)+
  214.     move    x:(r0)+,a        ;z1
  215.     add    x1,a        (r0)+
  216.     move    x:(r0),b        ;z1
  217.     add    x1,b
  218.     tst    a
  219.     jgt    no_eka_fake
  220.     tst    b
  221.     jle    rankkaa
  222.     move    #>-256*276,a
  223.     move    (r0)-n0
  224.     move    a1,x:(r0)+n0        ;feed back
  225.  
  226. no_eka_fake
  227.     tst    b
  228.     jgt    eka_ok    
  229.  
  230.     move    #>-256*276,b
  231.     move    b1,x:(r0)        ;feed back
  232.  
  233. eka_ok        
  234.     move    x:(r2)+,x0
  235.     move    x0,x:(r1)+
  236.     move    x:(r2)+,x0
  237.     move    x0,x:(r1)+        ;copy x1,z1
  238.  
  239.     move    x:(r2)+,x0
  240.     move    x0,x:(r1)+
  241.     move    x:(r2)+,x0
  242.     move    x0,x:(r1)+        ;x2,z2
  243.  
  244.     move    x:(r2)+,x0
  245.     move    x0,x:(r1)+        ;txt
  246.  
  247.     move    (r7)+            ;inc destcount
  248.  
  249. rankkaa
  250.     move    (r0)+n0
  251.     nop
  252.     nop
  253. kelaa_kaikki
  254.     move    r7,x:number_of_walls
  255.     rts
  256. ;---------------------------------------
  257.  
  258. scroll
  259.     move    x:x_pos,x0
  260.     move    x:z_pos,y0
  261.     move    #cords_of_Walls,r0
  262.     move    #rotta_Walls,r1
  263.     move    #2,n0
  264.     move    x:number_orig,x1
  265.     do    x1,mega
  266.  
  267.     move    x:(r0)+,a
  268.     sub    x0,a        x:(r0)+,b
  269.     rep    #8
  270.     asl    a                ;scroll map and conv to 24bit
  271.     sub    y0,b        a1,x:(r1)+
  272.     rep    #8
  273.     asl    b
  274.     move    b1,x:(r1)+
  275.  
  276.     move    x:(r0)+,a
  277.     sub    x0,a        x:(r0)+,b
  278.     rep    #8
  279.     asl    a                ;toka piste..
  280.     sub    y0,b        a1,x:(r1)+
  281.     rep    #8
  282.     asl    b
  283.     move    b1,x:(r1)+            ;skip txt
  284.     move    x:(r0)+,x1
  285.     move    x1,x:(r1)+            ;copy txt number
  286. mega
  287.     rts
  288. ;---------------------------------------
  289. project_walls
  290.     move    #sorted_walls,r0
  291.     move    #z_buf,r7
  292.     move    #3,n6
  293.     move    x:number_of_walls,a
  294.     tst    a
  295.     jeq    zero_wall            ;all walls killed in sort!
  296.     do    a,bring_the_beat_back
  297.  
  298. ; laske x1:n projection
  299.  
  300.     move    x:rdee,y0            ;(15.8)
  301.     move    x:(r0)+,x0            ;(15.8)
  302.     mpy    y0,x0,a        x:(r0)+,b    ;d*x1 (15.8 -> 32.17)
  303.     rep    #2
  304.     asr    a                ;
  305.     add    y0,b                ;d+z1 (16.8)
  306.     asr    b
  307.     move    b1,x0
  308.     move    b1,x:eka_zeta            ;(16.7)
  309.  
  310.     jsr    jako                ;a/x0 (tnx 2 dee, a<x0)
  311.     move    a0,a
  312.     rep    #8
  313.     asr    a
  314.     move    #>(buf_wide/2),x0
  315.     add    x0,a    
  316.     move    a1,x:vasen_reuna        ;
  317.     move    a1,y1                ;y1=vasen reuna
  318. ; laske x2 projectio
  319.     move    x:rdee,y0
  320.     move    x:(r0)+,x0
  321.     mpy    y0,x0,a        x:(r0)+,b    ;d*x1
  322.     rep    #2
  323.     asr    a        
  324.     add    y0,b                ;d+z1        
  325.     asr    b    
  326.     move    b1,x0
  327.     move    b1,x:toka_zeta
  328.  
  329.     jsr    jako                ;oikea reuna
  330.     move    a0,a                ;
  331.     rep    #8
  332.     asr    a
  333.     move    #>(buf_wide/2),x0
  334.     add    x0,a
  335.     
  336.     move    x:(r0)+,m5            ;get txt
  337.     move    #0,a0                ;wipe f@cking lo_word
  338.     sub    y1,a        a1,x:oikea_reuna     ;wide in z_buf
  339.     jle    zero_wall             ;PIIRRETAANKO NOLLA TAI ALLE?!
  340.     
  341. ; laske x1,z1 korkeus
  342.  
  343.     move    x:eka_zeta,x0            ;d + z1 (16.7)
  344.     move    x:rdyy,a                ;d * max_y (16)    
  345.     rep    #8
  346.     asr    a
  347.     jsr    jako
  348.     move    a0,a
  349.     asr    a
  350.     move    a1,x:eka_zeta            ;korkeus 0-127 (15.8)
  351.  
  352. ; laske x2,z2 korkeus
  353.  
  354.     move    x:toka_zeta,x0            ;d + z1 / 2
  355.     move    X:rdyy,a                ;d * max_y /2    
  356.     rep    #8
  357.     asr    a
  358.     jsr    jako
  359.     move    a0,a
  360.     asr    a
  361.     move    a1,x:toka_zeta            ;korkeus 0-127 (8.8)
  362.  
  363. ; laske x_stepit
  364.  
  365.     move    x:oikea_reuna,a
  366.     move    x:vasen_reuna,x0
  367.     sub    x0,a
  368.     move    a,x0                ;(16.0)
  369.     move    #>txt_wide,a
  370.     rep    #8
  371.     asr    a
  372.     jsr    jako                ;x step (txt/z_buffeilla)
  373.     move    a0,a
  374.     rep    #8
  375.     asr    a    
  376.     move    a1,x:x_step            ;(8.8)
  377.  
  378. ; laske z stepit
  379.  
  380.     move    x:toka_zeta,a
  381.     move    x:eka_zeta,x1            ;(15.8)
  382.     sub    x1,a        x0,x:z_buf_wide ;korkeus steppi,rendaus leveys muistiin
  383.     rep    #16
  384.     asr    a
  385.     jsr    jako                ;jakaja (9.0)
  386.     move    a0,a
  387.     rep    #8
  388.     asr    a
  389.     move    a1,x:z_step            ;(8.8)
  390.  
  391. ; clippaa oikea
  392.     move    #>buf_wide,x1
  393.     move    x:vasen_reuna,b
  394.     sub    x1,b
  395.     jgt    zero_wall            ;vasen ulkona oikealta
  396.  
  397.     move    x:oikea_reuna,b
  398.     sub    x1,b
  399.     jlt    no_oikea_clip            ;oikea yli?
  400.     
  401.     move    b1,x1
  402.     move    x0,a
  403.     sub    x1,a
  404.     move    a1,x0                ;wombla new wide.. 
  405.     move        x0,x:z_buf_wide
  406. no_oikea_clip
  407.  
  408. ; clippaa vasen
  409.     move    x:oikea_reuna,a
  410.     tst    a
  411.     jle    zero_wall            ;oikea ulkona vasemmalta
  412.  
  413.     clr    b    x:vasen_reuna,a
  414.     tst    a
  415.     jge    no_vasen_clip
  416.  
  417.     neg    a    x0,b            ;z_wide x0:ssa..
  418.     move    a1,x1                ;x1 - hukattu seinapala..
  419.     sub    x1,b        x:eka_zeta,a0    ;new wide.. (zeta 15.8)
  420.     move    x:z_step,x0            ;(8.8)
  421.     asl    a    b1,x:z_buf_wide    
  422.     mac    x1,x0,a
  423.     asr    a            ;z_base+overflow*z_step (8.8)
  424.     move    a0,x:eka_zeta
  425.     
  426.     move    x:x_step,x0
  427.     mpy    x1,x0,b
  428.     asr    b            ;x_base+ovari*x_step,8bit dec    
  429.     clr    a    b0,b
  430. no_vasen_clip
  431.     move    a1,x1            ;lisää x1*3 z_buffin alkuun
  432.     add    x1,a
  433.     add    x1,a
  434.     move    a1,n7
  435.     move    x:z_step,x0    
  436.     move    x:x_step,y0
  437.     lua    (r7)+n7,r6            ;x in z_buf * 3
  438.     move    x:z_buf_wide,a
  439.     tst    a
  440.     jle    zero_wall            ;clipin jälkeen zero wall?
  441.     move    a,n5
  442.     move    x:eka_zeta,a
  443.     move    #>$000080,x1
  444.     add    x1,a
  445.     add    x1,b
  446.     do    n5,lusifer_rulz
  447. ;--------
  448.     add    x0,a                ;z_step (korkeus)
  449.     add    y0,b                ;inc txt_off
  450.  
  451.     move    x:(r6),x1
  452.     cmp    x1,a                ;seinakorkeus-zeta!!
  453.     jlt    kauempana
  454.  
  455.     move    a1,x:(r6)+
  456.     move    m5,x:(r6)+
  457.     move     b1,x:(r6)+            ;write new z, txt, x_offset
  458.     move    (r6)-n6
  459. kauempana
  460.     move    (r6)+n6
  461.     nop
  462.     nop
  463. lusifer_rulz                    ;z_buffer loop end
  464. ;----------
  465.     nop
  466. zero_wall
  467.     nop
  468.     nop
  469.     nop
  470.  
  471. bring_the_beat_back
  472.     move    #$ffff,m5
  473.     rts
  474. ;---------------------------------------
  475. jako
  476.     andi    #$fe,ccr            ;clear carry
  477.     rep    #24
  478.     div    x0,a
  479.     asl    a
  480.     jclr    #23,x0,pos_diver
  481.     neg    a
  482. pos_diver
  483.     rts                    ;signed result in a0 
  484.  
  485. ;    rep    #12
  486. ;    asr    a
  487. ;    andi    #$fe,ccr            ;clear carry
  488. ;    rep    #24
  489. ;    div    x0,a
  490. ;    asl    a
  491. ;    jclr    #23,x0,pos_diver
  492. ;    neg    a
  493. ;pos_diver
  494. ;-------------------------------------------
  495. ;-------------------------------------------
  496. ;write    jclr    #1,X:HSR,securex
  497. ;    move    x0,X:HTX        
  498. ;
  499. ;read    movep    #1,x:PBC
  500. ;    jclr    #0,X:HSR,read
  501. ;    move    X:HTX,x0        
  502. ;--------------
  503.     org    x:$0
  504.  
  505. spare        ds    1
  506. number_orig    ds    1
  507. number_of_walls    
  508.         ds    1
  509. sin        
  510.         ds    1
  511. cos        
  512.         ds    1
  513. x_pos        
  514.         ds    1
  515. z_pos        
  516.         ds    1
  517. vasen_reuna    ds    1
  518. oikea_reuna    ds    1
  519. eka_zeta    ds    1
  520. toka_zeta    ds    1
  521. x_step        ds    1
  522. z_step        ds    1
  523. z_buf_wide    ds    1
  524. rdee        ds    1
  525. rdyy        ds    1
  526. cords_of_Walls    
  527.         ds    5*900            ;x,z,txt
  528. rotta_walls    ds    5*900
  529. sorted_walls    ds    5*900
  530. z_buf        ds    buf_wide*3            ;z(eta),txt,x_offset
  531.     end
  532.     
  533.  
  534.  
  535.  
  536.