TMAP_INC.ASM 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. ; THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
  2. ; SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
  3. ; END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
  4. ; ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
  5. ; IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
  6. ; SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
  7. ; FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
  8. ; CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
  9. ; AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
  10. ; COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
  11. include psmacros.inc
  12. extb _gr_fade_table
  13. extd _write_buffer
  14. extd _window_left,_window_right,_window_top,_window_bottom,_window_width,_window_height
  15. extd _bytes_per_row,_y_pointers
  16. extd _Lighting_on,_transparency_on,_per2_flag
  17. extd _tmap_flat_cthru_table
  18. extb _tmap_flat_color,_tmap_flat_shade_value
  19. extd _dither_intensity_lighting
  20. extw _pixel_data_selector
  21. extd _fx_y,_fx_u,_fx_v,_fx_z,_fx_l
  22. extd _fx_du_dx,_fx_dv_dx,_fx_dz_dx,_fx_dl_dx
  23. extd _fx_xleft,_fx_xright
  24. extd _fx_u_right, _fx_v_right, _fx_z_right
  25. extd _pixptr
  26. extd _loop_count
  27. extd _dest_row_data
  28. extd _tmap_pln_tmp, _tmap_pln_timer, _tmap_pln_counter;
  29. extd U0, U1, V0, V1, DU1, DV1, DZ1, num_left_over
  30. _lighting_tables equ _gr_fade_table
  31. write_buffer equ _write_buffer
  32. max_window_width equ 320
  33. num_iters = max_window_width
  34. if num_iters and 1
  35. num_iters = num_iters + 1
  36. endif
  37. TIMER_CODE = 0
  38. IF TIMER_CODE
  39. START_TIMER MACRO
  40. ; Returns EDX:EAX as system clocks
  41. push edx
  42. push eax
  43. cli
  44. db 0fh
  45. db 31h ; RDTSC
  46. mov _tmap_pln_tmp, eax
  47. ; mov eax, _loop_count
  48. ; add _tmap_pln_counter, eax
  49. pop eax
  50. pop edx
  51. ENDM
  52. STOP_TIMER MACRO
  53. ; Returns EDX:EAX as system clocks
  54. push edx
  55. push eax
  56. db 0fh
  57. db 31h ; RDTSC
  58. sti
  59. sub eax, _tmap_pln_tmp
  60. js @f
  61. inc _tmap_pln_counter
  62. add _tmap_pln_timer, eax
  63. @@:
  64. pop eax
  65. pop edx
  66. ENDM
  67. ELSE
  68. START_TIMER MACRO
  69. ENDM
  70. STOP_TIMER MACRO
  71. ENDM
  72. ENDIF
  73. NBITS = 4 ; 2^NBITS pixels plotted per divide
  74. DIVIDE_SIG_BITS = 12
  75. Z_SHIFTER = (30-DIVIDE_SIG_BITS)
  76. DIVIDE_TABLE_SIZE = (1 SHL DIVIDE_SIG_BITS)
  77. extrn _divide_table:dword
  78. PDIV MACRO
  79. imul ecx ; eax = (v*z)
  80. shrd eax,edx,16
  81. ;USE_DIV mov edx,eax
  82. ;USE_DIV sar edx,16
  83. ;USE_DIV shl eax,16
  84. ;USE_DIV idiv ecx ; eax = (v/z)
  85. ENDM
  86. INVERT_ECX MACRO
  87. ; shr ecx, Z_SHIFTER ; ECX = 18 bits precision
  88. ; mov eax, 65536
  89. ; mov edx, eax
  90. ; sar edx,16
  91. ; shl eax,16
  92. ; idiv ecx
  93. ; mov ecx, eax
  94. shr ecx, Z_SHIFTER
  95. ; cmp ecx, DIVIDE_TABLE_SIZE-1
  96. ; jl @f
  97. ; mov ecx, DIVIDE_TABLE_SIZE-1
  98. and ecx, DIVIDE_TABLE_SIZE-1
  99. mov ecx, dword ptr _divide_table[ecx*4];
  100. ENDM