TMAP_FLT.ASM 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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. .386
  12. public asm_tmap_scanline_flat_
  13. include tmap_inc.asm
  14. _DATA SEGMENT DWORD PUBLIC USE32 'DATA'
  15. _DATA ENDS
  16. DGROUP GROUP _DATA
  17. _TEXT SEGMENT DWORD PUBLIC USE32 'CODE'
  18. ASSUME DS:_DATA
  19. ASSUME CS:_TEXT
  20. ; --------------------------------------------------------------------------------------------------
  21. ; Enter:
  22. ; _xleft fixed point left x coordinate
  23. ; _xright fixed point right x coordinate
  24. ; _y fixed point y coordinate
  25. ;**; _pixptr address of source pixel map
  26. ; for (x = (int) xleft; x <= (int) xright; x++) {
  27. ; _setcolor(read_pixel_from_tmap(srcb,((int) (u/z)) & 63,((int) (v/z)) & 63));
  28. ; _setpixel(x,y);
  29. ;
  30. ; z += dz_dx;
  31. ; }
  32. asm_tmap_scanline_flat_:
  33. pusha
  34. ; Setup for loop: _loop_count iterations = (int) xright - (int) xleft
  35. ; edi initial row pointer = y*320+x
  36. ; set edi = address of first pixel to modify
  37. mov edi, _dest_row_data
  38. mov ecx, _loop_count
  39. ; edi = destination pixel pointer
  40. cmp _tmap_flat_cthru_table, 0
  41. jne do_flat_cthru
  42. mov al,_tmap_flat_color
  43. ; word align
  44. inc ecx
  45. test edi,1
  46. je edi_even
  47. mov [edi],al
  48. inc edi
  49. dec ecx
  50. je _none_to_do
  51. edi_even: shr ecx,1
  52. je _no_full_words
  53. mov ah,al
  54. rep stosw
  55. _no_full_words: adc ecx,ecx ; if cy set, then write one more pixel (ecx == 0)
  56. rep stosb ; write 0 or 1 pixel
  57. _none_to_do: popa
  58. ret
  59. do_flat_cthru:
  60. mov esi, _tmap_flat_cthru_table
  61. xor eax, eax
  62. cmp ecx, 0
  63. je _none_to_do
  64. ; edi = dest, esi = table, ecx = count
  65. flat_cthru_loop:
  66. mov al, [edi] ; get already drawn pixel
  67. mov al, [eax+esi] ; xlat thru cthru table
  68. mov [edi],al ; write it
  69. inc edi
  70. dec ecx
  71. jnz flat_cthru_loop
  72. popa
  73. ret
  74. _TEXT ends
  75. end