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