home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga 14 / MA_Cover_14.iso / source / c / q1source_amy / qw / client / math.asm < prev    next >
Encoding:
Assembly Source File  |  1996-09-18  |  11.7 KB  |  496 lines

  1.  .386P
  2.  .model FLAT
  3.  externdef _d_zistepu:dword
  4.  externdef _d_pzbuffer:dword
  5.  externdef _d_zistepv:dword
  6.  externdef _d_zrowbytes:dword
  7.  externdef _d_ziorigin:dword
  8.  externdef _r_turb_s:dword
  9.  externdef _r_turb_t:dword
  10.  externdef _r_turb_pdest:dword
  11.  externdef _r_turb_spancount:dword
  12.  externdef _r_turb_turb:dword
  13.  externdef _r_turb_pbase:dword
  14.  externdef _r_turb_sstep:dword
  15.  externdef _r_turb_tstep:dword
  16.  externdef _r_bmodelactive:dword
  17.  externdef _d_sdivzstepu:dword
  18.  externdef _d_tdivzstepu:dword
  19.  externdef _d_sdivzstepv:dword
  20.  externdef _d_tdivzstepv:dword
  21.  externdef _d_sdivzorigin:dword
  22.  externdef _d_tdivzorigin:dword
  23.  externdef _sadjust:dword
  24.  externdef _tadjust:dword
  25.  externdef _bbextents:dword
  26.  externdef _bbextentt:dword
  27.  externdef _cacheblock:dword
  28.  externdef _d_viewbuffer:dword
  29.  externdef _cachewidth:dword
  30.  externdef _d_pzbuffer:dword
  31.  externdef _d_zrowbytes:dword
  32.  externdef _d_zwidth:dword
  33.  externdef _d_scantable:dword
  34.  externdef _r_lightptr:dword
  35.  externdef _r_numvblocks:dword
  36.  externdef _prowdestbase:dword
  37.  externdef _pbasesource:dword
  38.  externdef _r_lightwidth:dword
  39.  externdef _lightright:dword
  40.  externdef _lightrightstep:dword
  41.  externdef _lightdeltastep:dword
  42.  externdef _lightdelta:dword
  43.  externdef _lightright:dword
  44.  externdef _lightdelta:dword
  45.  externdef _sourcetstep:dword
  46.  externdef _surfrowbytes:dword
  47.  externdef _lightrightstep:dword
  48.  externdef _lightdeltastep:dword
  49.  externdef _r_sourcemax:dword
  50.  externdef _r_stepback:dword
  51.  externdef _colormap:dword
  52.  externdef _blocksize:dword
  53.  externdef _sourcesstep:dword
  54.  externdef _lightleft:dword
  55.  externdef _blockdivshift:dword
  56.  externdef _blockdivmask:dword
  57.  externdef _lightleftstep:dword
  58.  externdef _r_origin:dword
  59.  externdef _r_ppn:dword
  60.  externdef _r_pup:dword
  61.  externdef _r_pright:dword
  62.  externdef _ycenter:dword
  63.  externdef _xcenter:dword
  64.  externdef _d_vrectbottom_particle:dword
  65.  externdef _d_vrectright_particle:dword
  66.  externdef _d_vrecty:dword
  67.  externdef _d_vrectx:dword
  68.  externdef _d_pix_shift:dword
  69.  externdef _d_pix_min:dword
  70.  externdef _d_pix_max:dword
  71.  externdef _d_y_aspect_shift:dword
  72.  externdef _screenwidth:dword
  73.  externdef _vright:dword
  74.  externdef _vup:dword
  75.  externdef _vpn:dword
  76.  externdef _BOPS_Error:dword
  77.  externdef _snd_scaletable:dword
  78.  externdef _paintbuffer:dword
  79.  externdef _snd_linear_count:dword
  80.  externdef _snd_p:dword
  81.  externdef _snd_vol:dword
  82.  externdef _snd_out:dword
  83.  externdef _r_leftclipped:dword
  84.  externdef _r_leftenter:dword
  85.  externdef _r_rightclipped:dword
  86.  externdef _r_rightenter:dword
  87.  externdef _modelorg:dword
  88.  externdef _xscale:dword
  89.  externdef _r_refdef:dword
  90.  externdef _yscale:dword
  91.  externdef _r_leftexit:dword
  92.  externdef _r_rightexit:dword
  93.  externdef _r_lastvertvalid:dword
  94.  externdef _cacheoffset:dword
  95.  externdef _newedges:dword
  96.  externdef _removeedges:dword
  97.  externdef _r_pedge:dword
  98.  externdef _r_framecount:dword
  99.  externdef _r_u1:dword
  100.  externdef _r_emitted:dword
  101.  externdef _edge_p:dword
  102.  externdef _surface_p:dword
  103.  externdef _surfaces:dword
  104.  externdef _r_lzi1:dword
  105.  externdef _r_v1:dword
  106.  externdef _r_ceilv1:dword
  107.  externdef _r_nearzi:dword
  108.  externdef _r_nearzionly:dword
  109.  externdef _edge_aftertail:dword
  110.  externdef _edge_tail:dword
  111.  externdef _current_iv:dword
  112.  externdef _edge_head_u_shift20:dword
  113.  externdef _span_p:dword
  114.  externdef _edge_head:dword
  115.  externdef _fv:dword
  116.  externdef _edge_tail_u_shift20:dword
  117.  externdef _r_apverts:dword
  118.  externdef _r_anumverts:dword
  119.  externdef _aliastransform:dword
  120.  externdef _r_avertexnormals:dword
  121.  externdef _r_plightvec:dword
  122.  externdef _r_ambientlight:dword
  123.  externdef _r_shadelight:dword
  124.  externdef _aliasxcenter:dword
  125.  externdef _aliasycenter:dword
  126.  externdef _a_sstepxfrac:dword
  127.  externdef _r_affinetridesc:dword
  128.  externdef _acolormap:dword
  129.  externdef _d_pcolormap:dword
  130.  externdef _r_affinetridesc:dword
  131.  externdef _d_sfrac:dword
  132.  externdef _d_ptex:dword
  133.  externdef _d_pedgespanpackage:dword
  134.  externdef _d_tfrac:dword
  135.  externdef _d_light:dword
  136.  externdef _d_zi:dword
  137.  externdef _d_pdest:dword
  138.  externdef _d_pz:dword
  139.  externdef _d_aspancount:dword
  140.  externdef _erroradjustup:dword
  141.  externdef _errorterm:dword
  142.  externdef _d_xdenom:dword
  143.  externdef _r_p0:dword
  144.  externdef _r_p1:dword
  145.  externdef _r_p2:dword
  146.  externdef _a_tstepxfrac:dword
  147.  externdef _r_sstepx:dword
  148.  externdef _r_tstepx:dword
  149.  externdef _a_ststepxwhole:dword
  150.  externdef _zspantable:dword
  151.  externdef _skintable:dword
  152.  externdef _r_zistepx:dword
  153.  externdef _erroradjustdown:dword
  154.  externdef _d_countextrastep:dword
  155.  externdef _ubasestep:dword
  156.  externdef _a_ststepxwhole:dword
  157.  externdef _a_tstepxfrac:dword
  158.  externdef _r_lstepx:dword
  159.  externdef _a_spans:dword
  160.  externdef _erroradjustdown:dword
  161.  externdef _d_pdestextrastep:dword
  162.  externdef _d_pzextrastep:dword
  163.  externdef _d_sfracextrastep:dword
  164.  externdef _d_ptexextrastep:dword
  165.  externdef _d_countextrastep:dword
  166.  externdef _d_tfracextrastep:dword
  167.  externdef _d_lightextrastep:dword
  168.  externdef _d_ziextrastep:dword
  169.  externdef _d_pdestbasestep:dword
  170.  externdef _d_pzbasestep:dword
  171.  externdef _d_sfracbasestep:dword
  172.  externdef _d_ptexbasestep:dword
  173.  externdef _ubasestep:dword
  174.  externdef _d_tfracbasestep:dword
  175.  externdef _d_lightbasestep:dword
  176.  externdef _d_zibasestep:dword
  177.  externdef _zspantable:dword
  178.  externdef _r_lstepy:dword
  179.  externdef _r_sstepy:dword
  180.  externdef _r_tstepy:dword
  181.  externdef _r_zistepy:dword
  182.  externdef _D_PolysetSetEdgeTable:dword
  183.  externdef _D_RasterizeAliasPolySmooth:dword
  184.  externdef float_point5:dword
  185.  externdef Float2ToThe31nd:dword
  186.  externdef izistep:dword
  187.  externdef izi:dword
  188.  externdef FloatMinus2ToThe31nd:dword
  189.  externdef float_1:dword
  190.  externdef float_particle_z_clip:dword
  191.  externdef float_minus_1:dword
  192.  externdef float_0:dword
  193.  externdef fp_16:dword
  194.  externdef fp_64k:dword
  195.  externdef fp_1m:dword
  196.  externdef fp_1m_minus_1:dword
  197.  externdef fp_8:dword
  198.  externdef entryvec_table:dword
  199.  externdef advancetable:dword
  200.  externdef sstep:dword
  201.  externdef tstep:dword
  202.  externdef pspantemp:dword
  203.  externdef counttemp:dword
  204.  externdef jumptemp:dword
  205.  externdef reciprocal_table:dword
  206.  externdef DP_Count:dword
  207.  externdef DP_u:dword
  208.  externdef DP_v:dword
  209.  externdef DP_32768:dword
  210.  externdef DP_Color:dword
  211.  externdef DP_Pix:dword
  212.  externdef DP_EntryTable:dword
  213.  externdef pbase:dword
  214.  externdef s:dword
  215.  externdef t:dword
  216.  externdef sfracf:dword
  217.  externdef tfracf:dword
  218.  externdef snext:dword
  219.  externdef tnext:dword
  220.  externdef spancountminus1:dword
  221.  externdef zi16stepu:dword
  222.  externdef sdivz16stepu:dword
  223.  externdef tdivz16stepu:dword
  224.  externdef zi8stepu:dword
  225.  externdef sdivz8stepu:dword
  226.  externdef tdivz8stepu:dword
  227.  externdef reciprocal_table_16:dword
  228.  externdef entryvec_table_16:dword
  229.  externdef ceil_cw:dword
  230.  externdef single_cw:dword
  231.  externdef fp_64kx64k:dword
  232.  externdef pz:dword
  233.  externdef spr8entryvec_table:dword
  234. _DATA SEGMENT
  235.  align 4
  236. Ljmptab dd Lcase0, Lcase1, Lcase2, Lcase3
  237.  dd Lcase4, Lcase5, Lcase6, Lcase7
  238. _DATA ENDS
  239. _TEXT SEGMENT
  240.  public _Invert24To16
  241. _Invert24To16:
  242.  mov ecx,ds:dword ptr[4+esp]
  243.  mov edx,0100h
  244.  cmp ecx,edx
  245.  jle LOutOfRange
  246.  sub eax,eax
  247.  div ecx
  248.  ret
  249. LOutOfRange:
  250.  mov eax,0FFFFFFFFh
  251.  ret
  252.  align 2
  253.  public _TransformVector
  254. _TransformVector:
  255.  mov eax,ds:dword ptr[4+esp]
  256.  mov edx,ds:dword ptr[8+esp]
  257.  fld ds:dword ptr[eax]
  258.  fmul ds:dword ptr[_vright]
  259.  fld ds:dword ptr[eax]
  260.  fmul ds:dword ptr[_vup]
  261.  fld ds:dword ptr[eax]
  262.  fmul ds:dword ptr[_vpn]
  263.  fld ds:dword ptr[4+eax]
  264.  fmul ds:dword ptr[_vright+4]
  265.  fld ds:dword ptr[4+eax]
  266.  fmul ds:dword ptr[_vup+4]
  267.  fld ds:dword ptr[4+eax]
  268.  fmul ds:dword ptr[_vpn+4]
  269.  fxch st(2)
  270.  faddp st(5),st(0)
  271.  faddp st(3),st(0)
  272.  faddp st(1),st(0)
  273.  fld ds:dword ptr[8+eax]
  274.  fmul ds:dword ptr[_vright+8]
  275.  fld ds:dword ptr[8+eax]
  276.  fmul ds:dword ptr[_vup+8]
  277.  fld ds:dword ptr[8+eax]
  278.  fmul ds:dword ptr[_vpn+8]
  279.  fxch st(2)
  280.  faddp st(5),st(0)
  281.  faddp st(3),st(0)
  282.  faddp st(1),st(0)
  283.  fstp ds:dword ptr[8+edx]
  284.  fstp ds:dword ptr[4+edx]
  285.  fstp ds:dword ptr[edx]
  286.  ret
  287.  align 2
  288.  public _BoxOnPlaneSide
  289. _BoxOnPlaneSide:
  290.  push ebx
  291.  mov edx,ds:dword ptr[4+12+esp]
  292.  mov ecx,ds:dword ptr[4+4+esp]
  293.  xor eax,eax
  294.  mov ebx,ds:dword ptr[4+8+esp]
  295.  mov al,ds:byte ptr[17+edx]
  296.  cmp al,8
  297.  jge Lerror
  298.  fld ds:dword ptr[0+edx]
  299.  fld st(0)
  300.  jmp dword ptr[Ljmptab+eax*4]
  301. Lcase0:
  302.  fmul ds:dword ptr[ebx]
  303.  fld ds:dword ptr[0+4+edx]
  304.  fxch st(2)
  305.  fmul ds:dword ptr[ecx]
  306.  fxch st(2)
  307.  fld st(0)
  308.  fmul ds:dword ptr[4+ebx]
  309.  fld ds:dword ptr[0+8+edx]
  310.  fxch st(2)
  311.  fmul ds:dword ptr[4+ecx]
  312.  fxch st(2)
  313.  fld st(0)
  314.  fmul ds:dword ptr[8+ebx]
  315.  fxch st(5)
  316.  faddp st(3),st(0)
  317.  fmul ds:dword ptr[8+ecx]
  318.  fxch st(1)
  319.  faddp st(3),st(0)
  320.  fxch st(3)
  321.  faddp st(2),st(0)
  322.  jmp LSetSides
  323. Lcase1:
  324.  fmul ds:dword ptr[ecx]
  325.  fld ds:dword ptr[0+4+edx]
  326.  fxch st(2)
  327.  fmul ds:dword ptr[ebx]
  328.  fxch st(2)
  329.  fld st(0)
  330.  fmul ds:dword ptr[4+ebx]
  331.  fld ds:dword ptr[0+8+edx]
  332.  fxch st(2)
  333.  fmul ds:dword ptr[4+ecx]
  334.  fxch st(2)
  335.  fld st(0)
  336.  fmul ds:dword ptr[8+ebx]
  337.  fxch st(5)
  338.  faddp st(3),st(0)
  339.  fmul ds:dword ptr[8+ecx]
  340.  fxch st(1)
  341.  faddp st(3),st(0)
  342.  fxch st(3)
  343.  faddp st(2),st(0)
  344.  jmp LSetSides
  345. Lcase2:
  346.  fmul ds:dword ptr[ebx]
  347.  fld ds:dword ptr[0+4+edx]
  348.  fxch st(2)
  349.  fmul ds:dword ptr[ecx]
  350.  fxch st(2)
  351.  fld st(0)
  352.  fmul ds:dword ptr[4+ecx]
  353.  fld ds:dword ptr[0+8+edx]
  354.  fxch st(2)
  355.  fmul ds:dword ptr[4+ebx]
  356.  fxch st(2)
  357.  fld st(0)
  358.  fmul ds:dword ptr[8+ebx]
  359.  fxch st(5)
  360.  faddp st(3),st(0)
  361.  fmul ds:dword ptr[8+ecx]
  362.  fxch st(1)
  363.  faddp st(3),st(0)
  364.  fxch st(3)
  365.  faddp st(2),st(0)
  366.  jmp LSetSides
  367. Lcase3:
  368.  fmul ds:dword ptr[ecx]
  369.  fld ds:dword ptr[0+4+edx]
  370.  fxch st(2)
  371.  fmul ds:dword ptr[ebx]
  372.  fxch st(2)
  373.  fld st(0)
  374.  fmul ds:dword ptr[4+ecx]
  375.  fld ds:dword ptr[0+8+edx]
  376.  fxch st(2)
  377.  fmul ds:dword ptr[4+ebx]
  378.  fxch st(2)
  379.  fld st(0)
  380.  fmul ds:dword ptr[8+ebx]
  381.  fxch st(5)
  382.  faddp st(3),st(0)
  383.  fmul ds:dword ptr[8+ecx]
  384.  fxch st(1)
  385.  faddp st(3),st(0)
  386.  fxch st(3)
  387.  faddp st(2),st(0)
  388.  jmp LSetSides
  389. Lcase4:
  390.  fmul ds:dword ptr[ebx]
  391.  fld ds:dword ptr[0+4+edx]
  392.  fxch st(2)
  393.  fmul ds:dword ptr[ecx]
  394.  fxch st(2)
  395.  fld st(0)
  396.  fmul ds:dword ptr[4+ebx]
  397.  fld ds:dword ptr[0+8+edx]
  398.  fxch st(2)
  399.  fmul ds:dword ptr[4+ecx]
  400.  fxch st(2)
  401.  fld st(0)
  402.  fmul ds:dword ptr[8+ecx]
  403.  fxch st(5)
  404.  faddp st(3),st(0)
  405.  fmul ds:dword ptr[8+ebx]
  406.  fxch st(1)
  407.  faddp st(3),st(0)
  408.  fxch st(3)
  409.  faddp st(2),st(0)
  410.  jmp LSetSides
  411. Lcase5:
  412.  fmul ds:dword ptr[ecx]
  413.  fld ds:dword ptr[0+4+edx]
  414.  fxch st(2)
  415.  fmul ds:dword ptr[ebx]
  416.  fxch st(2)
  417.  fld st(0)
  418.  fmul ds:dword ptr[4+ebx]
  419.  fld ds:dword ptr[0+8+edx]
  420.  fxch st(2)
  421.  fmul ds:dword ptr[4+ecx]
  422.  fxch st(2)
  423.  fld st(0)
  424.  fmul ds:dword ptr[8+ecx]
  425.  fxch st(5)
  426.  faddp st(3),st(0)
  427.  fmul ds:dword ptr[8+ebx]
  428.  fxch st(1)
  429.  faddp st(3),st(0)
  430.  fxch st(3)
  431.  faddp st(2),st(0)
  432.  jmp LSetSides
  433. Lcase6:
  434.  fmul ds:dword ptr[ebx]
  435.  fld ds:dword ptr[0+4+edx]
  436.  fxch st(2)
  437.  fmul ds:dword ptr[ecx]
  438.  fxch st(2)
  439.  fld st(0)
  440.  fmul ds:dword ptr[4+ecx]
  441.  fld ds:dword ptr[0+8+edx]
  442.  fxch st(2)
  443.  fmul ds:dword ptr[4+ebx]
  444.  fxch st(2)
  445.  fld st(0)
  446.  fmul ds:dword ptr[8+ecx]
  447.  fxch st(5)
  448.  faddp st(3),st(0)
  449.  fmul ds:dword ptr[8+ebx]
  450.  fxch st(1)
  451.  faddp st(3),st(0)
  452.  fxch st(3)
  453.  faddp st(2),st(0)
  454.  jmp LSetSides
  455. Lcase7:
  456.  fmul ds:dword ptr[ecx]
  457.  fld ds:dword ptr[0+4+edx]
  458.  fxch st(2)
  459.  fmul ds:dword ptr[ebx]
  460.  fxch st(2)
  461.  fld st(0)
  462.  fmul ds:dword ptr[4+ecx]
  463.  fld ds:dword ptr[0+8+edx]
  464.  fxch st(2)
  465.  fmul ds:dword ptr[4+ebx]
  466.  fxch st(2)
  467.  fld st(0)
  468.  fmul ds:dword ptr[8+ecx]
  469.  fxch st(5)
  470.  faddp st(3),st(0)
  471.  fmul ds:dword ptr[8+ebx]
  472.  fxch st(1)
  473.  faddp st(3),st(0)
  474.  fxch st(3)
  475.  faddp st(2),st(0)
  476. LSetSides:
  477.  faddp st(2),st(0)
  478.  fcomp ds:dword ptr[12+edx]
  479.  xor ecx,ecx
  480.  fnstsw ax
  481.  fcomp ds:dword ptr[12+edx]
  482.  and ah,1
  483.  xor ah,1
  484.  add cl,ah
  485.  fnstsw ax
  486.  and ah,1
  487.  add ah,ah
  488.  add cl,ah
  489.  pop ebx
  490.  mov eax,ecx
  491.  ret
  492. Lerror:
  493.  call near ptr _BOPS_Error
  494. _TEXT ENDS
  495.  END
  496.