home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 113 / EnigmaAmiga113CD.iso / software / sviluppo / quakeworld_src / client / r_bspppc.s < prev    next >
Encoding:
Text File  |  2000-06-17  |  7.3 KB  |  322 lines

  1. # Copyright (C) 1996-1997 Id Software, Inc. 
  2. # This program is free software; you can redistribute it and/or 
  3. # modify it under the terms of the GNU General Public License 
  4. # as published by the Free Software Foundation; either version 2 
  5. # of the License, or (at your option) any later version. 
  6. # This program is distributed in the hope that it will be useful, 
  7. # but WITHOUT ANY WARRANTY; without even the implied warranty of 
  8. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.   
  9. # See the GNU General Public License for more details. 
  10. # You should have received a copy of the GNU General Public License 
  11. # along with this program; if not, write to the Free Software 
  12. # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. 
  13.  
  14. ##
  15. ## Quake for AMIGA
  16. ##
  17. ## r_bspPPC.s
  18. ##
  19. ## Define WOS for PowerOpen ABI, otherwise SVR4-ABI is used.
  20. ##
  21.  
  22. .include        "macrosPPC.i"
  23.  
  24. #
  25. # external references
  26. #
  27.  
  28.     xrefv    r_visframecount
  29.     xrefv    r_framecount
  30.     xrefv    r_currentkey
  31.     xrefv    r_drawpolys
  32.     xrefv    r_worldpolysbacktofront
  33.     xrefv    pbtofpolys
  34.     xrefv    numbtofpolys
  35.     xrefv    pfrustum_indexes
  36.     xrefa    modelorg
  37.     xrefa    vpn
  38.     xrefa    vright
  39.     xrefa    vup
  40.     xrefa    view_clipplanes
  41.     xrefv    currententity
  42.     xrefa    screenedge
  43.     xrefa    entity_rotation
  44.  
  45. .ifdef    __STORM__
  46.     xrefv    sin__r
  47.     xrefv    cos__r
  48. .else
  49.     xrefv    sin
  50.     xrefv    cos
  51. .endif
  52.  
  53. #
  54. # defines
  55. #
  56.  
  57. .set    PITCH                ,0
  58. .set    YAW                  ,1
  59. .set    ROLL                 ,2
  60.  
  61. .set    CLIP_NORMAL          ,0
  62. .set    CLIP_DIST            ,12
  63. .set    CLIP_NEXT            ,16
  64. .set    CLIP_LEFTEDGE        ,20
  65. .set    CLIP_RIGHTEDGE       ,21
  66. .set    CLIP_RESERVED        ,22
  67. .set    CLIP_SIZEOF          ,24
  68.  
  69. .set    MPLANE_NORMAL        ,0
  70. .set    MPLANE_DIST          ,12
  71. .set    MPLANE_TYPE          ,16
  72. .set    MPLANE_SIGNBITS      ,17
  73. .set    MPLANE_SIZEOF        ,20
  74.  
  75. .set    ENTITY_KEYNUM        ,0
  76. .set    ENTITY_ORIGIN        ,4
  77. .set    ENTITY_ANGLES        ,16
  78. .set    ENTITY_MODEL        ,28
  79. .set    ENTITY_FRAME        ,32
  80. .set    ENTITY_COLORMAP        ,36
  81. .set    ENTITY_SKINNUM        ,40
  82. .set    ENTITY_SCOREBOARD    ,44
  83. .set    ENTITY_SYNCBASE        ,48
  84. .set    ENTITY_EFRAG        ,52
  85. .set    ENTITY_VISFRAME        ,56
  86. .set    ENTITY_DLIGHTFRAME    ,60
  87. .set    ENTITY_DLIGHTBITS    ,64
  88. .set    ENTITY_TRIVIAL_ACCEPT    ,68
  89. .set    ENTITY_TOPNODE        ,72
  90. .set    ENTITY_SIZEOF           ,76
  91.  
  92.  
  93.  
  94.  
  95.  
  96. ###########################################################################
  97. #
  98. #       void R_RotateBmodel (void)
  99. #
  100. ###########################################################################
  101.  
  102.     funcdef    R_RotateBmodel
  103.  
  104.     init    0,0,1,18
  105.     stw    r31,gb(r1)
  106.     stfd    f14,fb+0*8(r1)
  107.     stfd    f15,fb+1*8(r1)
  108.     stfd    f16,fb+2*8(r1)
  109.     stfd    f17,fb+3*8(r1)
  110.     stfd    f18,fb+4*8(r1)
  111.     stfd    f19,fb+5*8(r1)
  112.     stfd    f20,fb+6*8(r1)
  113.     stfd    f21,fb+7*8(r1)
  114.     stfd    f22,fb+8*8(r1)
  115.     stfd    f23,fb+9*8(r1)
  116.     stfd    f24,fb+10*8(r1)
  117.     stfd    f25,fb+11*8(r1)
  118.     stfd    f26,fb+12*8(r1)
  119.     stfd    f27,fb+13*8(r1)
  120.     stfd    f28,fb+14*8(r1)
  121.     stfd    f29,fb+15*8(r1)
  122.     stfd    f30,fb+16*8(r1)
  123.     stfd    f31,fb+17*8(r1)
  124.  
  125.     ls      f14,cPI
  126.     lw      r31,currententity
  127.     lfs     f1,ENTITY_ANGLES+YAW*4(r31)
  128.     fmuls   f15,f1,f14
  129.     fmr     f1,f15
  130.     mcall    sin
  131.     fmr     f16,f1                  #f16 = s [YAW]
  132.     fmr     f1,f15
  133.     mcall    cos
  134.     fmr     f17,f1                  #f17 = c [YAW]
  135.     lfs     f1,ENTITY_ANGLES+PITCH*4(r31)
  136.     fmuls   f15,f1,f14
  137.     fmr     f1,f15
  138.     mcall    sin
  139.     fmr     f18,f1                  #f18 = s [PITCH]
  140.     fmr     f1,f15
  141.     mcall    cos
  142.     fmr     f19,f1                  #f19 = c [PITCH] = 32(a2)
  143.     lfs     f1,ENTITY_ANGLES+ROLL*4(r31)
  144.     fmuls   f15,f1,f14
  145.     fmr     f1,f15
  146.     mcall    sin
  147.     fmr     f20,f1                  #f20 = s [ROLL]
  148.     fmr     f1,f15
  149.     mcall    cos
  150.     fmuls   f0,f17,f19
  151.     fmr     f15,f1                  #f15 = c [ROLL]
  152.     lxa     r3,entity_rotation     #r3 = entity_rotation
  153.     stfs    f0,0(r3)                #f0 = entity_rotation [0,0]
  154.     fmuls   f1,f16,f19              #f1 = 4(a2)
  155.     fneg    f2,f18                  #f2 = 8(a2)
  156.     fneg    f3,f16
  157.     fmuls   f4,f17,f18
  158.     stfs    f3,12(r3)               #f3 = entity_rotation[1,0]
  159.     stfs    f4,24(r3)               #f4 = entity_rotation[2,0]
  160.     fmuls   f5,f16,f18              #f5 = 28(a2)
  161.     fmuls   f6,f20,f2
  162.     fmsubs  f7,f15,f1,f6
  163.     fmuls   f8,f20,f1
  164.     stfs    f7,4(r3)                #f7 = entity_rotation[0,1]
  165.     fmuls   f12,f20,f19
  166.     fmadds  f9,f2,f15,f8
  167.     fmuls   f10,f17,f15
  168.     stfs    f9,8(r3)                #f9 = entity_rotation[0,2]
  169.     stfs    f10,16(r3)              #f10 = entity_rotation[1,1]
  170.     fmuls   f2,f19,f15
  171.     fmuls   f11,f17,f20
  172.     fmsubs  f13,f15,f5,f12
  173.     stfs    f11,20(r3)              #f11 = entity_rotation[1,2]
  174.     stfs    f13,28(r3)              #f13 = entity_rotation[2,1]
  175.     fmadds  f1,f20,f5,f2
  176.     stfs    f1,32(r3)               #f1 = entity_rotation[2,2]
  177.     lxa     r7,modelorg
  178.     lfs     f19,0(r7)               #f19 = modelorg[0]
  179.     lfs     f20,4(r7)               #f20 = modelorg[1]
  180.     lfs     f21,8(r7)               #f21 = modelorg[2]
  181.     lxa     r4,vpn
  182.     lfs     f2,0(r4)                #f2 = vpn[0]
  183.     lfs     f6,4(r4)                #f6 = vpn[1]
  184.     lfs     f8,8(r4)                #f8 = vpn[2]
  185.     lxa     r5,vright
  186.     lfs     f12,0(r5)               #f12 = vright[0]
  187.     lfs     f14,4(r5)               #f14 = vright[1]
  188.     lfs     f15,8(r5)               #f15 = vright[2]
  189.     lxa     r6,vup
  190.     lfs     f16,0(r6)               #f16 = vup[0]
  191.     lfs     f17,4(r6)               #f17 = vup[1]
  192.     lfs     f18,8(r6)               #f18 = vup[2]
  193.  
  194.     fmuls   f22,f19,f0
  195.     fmuls   f25,f2,f0
  196.     fmuls   f28,f12,f0
  197.     fmuls   f31,f16,f0
  198.     fmadds  f22,f20,f7,f22
  199.     fmadds  f25,f6,f7,f25
  200.     fmadds  f28,f14,f7,f28
  201.     fmadds  f31,f17,f7,f31
  202.     fmadds  f22,f21,f9,f22
  203.     fmadds  f25,f8,f9,f25
  204.     fmadds  f28,f15,f9,f28
  205.     fmadds  f31,f18,f9,f31
  206.     fmuls   f23,f19,f3
  207.     fmuls   f26,f2,f3
  208.     fmuls   f29,f12,f3
  209.     fmuls   f0,f16,f3
  210.     fmadds  f23,f20,f10,f23
  211.     fmadds  f26,f6,f10,f26
  212.     fmadds  f29,f14,f10,f29
  213.     fmadds  f0,f17,f10,f0
  214.     fmadds  f23,f21,f11,f23
  215.     fmadds  f26,f8,f11,f26
  216.     fmadds  f29,f15,f11,f29
  217.     fmadds  f0,f18,f11,f0
  218.     fmuls   f24,f19,f4
  219.     fmuls   f27,f2,f4
  220.     fmuls   f30,f12,f4
  221.     fmuls   f7,f16,f4
  222.     fmadds  f24,f20,f13,f24
  223.     fmadds  f27,f6,f13,f27
  224.     fmadds  f30,f14,f13,f30
  225.     fmadds  f7,f17,f13,f7
  226.     fmadds  f21,f21,f1,f24
  227.     fmadds  f8,f8,f1,f27
  228.     fmadds  f15,f15,f1,f30
  229.     fmadds  f18,f18,f1,f7
  230.     fmr     f19,f22
  231.     fmr     f2,f25
  232.     fmr     f12,f28
  233.     fmr     f16,f31
  234.     fmr     f20,f23
  235.     fmr     f6,f26
  236.     fmr     f14,f29
  237.     fmr     f17,f0
  238.  
  239.     li      r0,4
  240.     mtctr   r0
  241.     lxa     r8,screenedge
  242.     subi    r8,r8,4
  243.     lxa     r9,view_clipplanes
  244.     subi    r9,r9,4
  245. .loop:
  246.     lfsu    f0,4(r8)
  247.     lfsu    f7,4(r8)
  248.     lfsu    f9,4(r8)
  249.     fmuls   f3,f16,f7
  250.     fmuls   f10,f17,f7
  251.     fmuls   f11,f18,f7
  252.     fmadds  f3,f2,f9,f3
  253.     fmadds  f10,f6,f9,f10
  254.     fmadds  f11,f8,f9,f11
  255.     fnmsubs f3,f12,f0,f3
  256.     stfsu   f3,4(r9)
  257.     fmuls   f3,f3,f19
  258.     fnmsubs f10,f14,f0,f10
  259.     stfsu   f10,4(r9)
  260.     fmadds  f3,f10,f20,f3
  261.     fnmsubs f11,f15,f0,f11
  262.     stfsu   f11,4(r9)
  263.     fmadds  f3,f11,f21,f3
  264.     la      r8,MPLANE_SIZEOF-12(r8)
  265.     stfsu   f3,4(r9)
  266.     la      r9,CLIP_SIZEOF-16(r9)
  267.     bdnz    .loop
  268.  
  269.     stfs    f19,0(r7)
  270.     stfs    f20,4(r7)
  271.     stfs    f21,8(r7)
  272.     stfs    f2,0(r4)
  273.     stfs    f6,4(r4)
  274.     stfs    f8,8(r4)
  275.     stfs    f12,0(r5)
  276.     stfs    f14,4(r5)
  277.     stfs    f15,8(r5)
  278.     stfs    f16,0(r6)
  279.     stfs    f17,4(r6)
  280.     stfs    f18,8(r6)
  281.  
  282.     lfd    f14,fb+0*8(r1)
  283.     lfd    f15,fb+1*8(r1)
  284.     lfd    f16,fb+2*8(r1)
  285.     lfd    f17,fb+3*8(r1)
  286.     lfd    f18,fb+4*8(r1)
  287.     lfd    f19,fb+5*8(r1)
  288.     lfd    f20,fb+6*8(r1)
  289.     lfd    f21,fb+7*8(r1)
  290.     lfd    f22,fb+8*8(r1)
  291.     lfd    f23,fb+9*8(r1)
  292.     lfd    f24,fb+10*8(r1)
  293.     lfd    f25,fb+11*8(r1)
  294.     lfd    f26,fb+12*8(r1)
  295.     lfd    f27,fb+13*8(r1)
  296.     lfd    f28,fb+14*8(r1)
  297.     lfd    f29,fb+15*8(r1)
  298.     lfd    f30,fb+16*8(r1)
  299.     lfd    f31,fb+17*8(r1)
  300.     lwz    r31,gb(r1)
  301.     exit
  302.  
  303.     funcend    R_RotateBmodel
  304.  
  305.  
  306.  
  307.  
  308. .ifdef    WOS
  309.     .tocd
  310. .else
  311.     .data
  312. .endif
  313.  
  314. lab cPI
  315.     .float    0.017453293        # => M_PI*2/360
  316.