home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / AGGRESSN / MOTION.ZIP / MOTION / DSP / HUKKAXXX.S < prev    next >
Text File  |  1995-05-10  |  10KB  |  539 lines

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