home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / 3DTOSHI2.ZIP / mpgfx / source / lgfxdibm.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-12  |  3.5 KB  |  211 lines

  1.  
  2. // lgfxdibm.cpp 
  3. // 
  4. // Copyright (c) 1995 by Toshiaki Tsuji, all rights reserved. 
  5.  
  6. #include "stdgfx.h" 
  7. #include "lgfxdib.h" 
  8.  
  9. LONG  U; 
  10. LONG  V; 
  11. LONG  Du; 
  12. LONG  Dv; 
  13. LONG  SrcAdd; 
  14.  
  15. // VOID WaitForRetraceMany ( LONG Count ) 
  16. // 
  17. // EAX = Count 
  18.  
  19. VOID WaitForRetraceMany ( LONG Count ) 
  20. __asm { 
  21.   pushad  
  22.    
  23.   mov  EAX, Count 
  24.  
  25.   mov  ECX, EAX 
  26.   mov  EDX, 03DAh 
  27.    
  28.   WFRLoop : 
  29.     WaitManyEnd : 
  30.       in   al, dx 
  31.       test al, 08h 
  32.       jnz   WaitManyEnd  
  33.        
  34.     WaitManyStart : 
  35.       in   al, dx 
  36.       test al, 08h 
  37.       jz   WaitManyStart 
  38.          
  39.     cmp ECX, 0 
  40.     jle EndWaitMany 
  41.     dec ECX 
  42.     jmp WFRLoop   
  43.      
  44.   EndWaitMany : 
  45.          
  46.   popad 
  47. } // End asm 
  48. } // End of WaitForRetrace 
  49.  
  50.  
  51. // VOID WaitForRetraceOnce () 
  52.  
  53. VOID WaitForRetraceOnce () 
  54. __asm { 
  55.   pushad 
  56.  
  57.   mov  EDX, 03DAh 
  58.    
  59.   WaitOnceEnd : 
  60.     in   al, dx 
  61.     test al, 08h 
  62.     jnz   WaitOnceEnd  
  63.        
  64.   WaitOnceStart : 
  65.     in   al, dx 
  66.     test al, 08h 
  67.     jz   WaitOnceStart 
  68.          
  69.   popad 
  70. } // End asm 
  71. } // End of WaitForRetrace 
  72.  
  73.  
  74. // VOID WaitForRetraceTerminate () 
  75.  
  76. VOID WaitForRetraceTerminate () 
  77. __asm { 
  78.   pushad 
  79.   mov  EDX, 03DAh 
  80.    
  81.   WaitTerminate : 
  82.     in   al, dx 
  83.     test al, 08h 
  84.     jnz   WaitTerminate  
  85.        
  86.   popad 
  87. } // End asm 
  88. } // End of WaitForRetrace 
  89.  
  90.  
  91. // VOID TransBlt256To256 ( BYTE *Dest, BYTE *Src, LONG Wd, BYTE TransColor ) 
  92. // 
  93. // EAX = Dest, EDX = Src, EBX = Wd, ECX = TransColor 
  94.  
  95. VOID TransBlt256To256 ( BYTE *Dest, BYTE *Src,  
  96.                                             LONG dWd, BYTE TransColor ) 
  97. __asm { 
  98.    
  99.   pushad 
  100.  
  101.   mov  EAX, Dest 
  102.   mov  EDX, Src 
  103.   mov  EBX, dWd 
  104.   mov  CL, TransColor 
  105.  
  106.   mov  EDI, EAX 
  107.   mov  ESI, EDX 
  108.   mov  AH, CL 
  109.   mov  ECX, EBX 
  110.   cld 
  111.  
  112.   TransLoop : 
  113.     mov AL, [ESI] 
  114.     inc ESI 
  115.     cmp AH, AL 
  116.     je  Skip 
  117.       mov [EDI], AL 
  118.  
  119.     Skip : 
  120.       inc EDI 
  121.       dec ECX 
  122.     jnz TransLoop 
  123.  
  124.   popad 
  125. } // End asm 
  126. } // End of TransBlt256To256 
  127.  
  128.  
  129. // VOID ScaleBlt256To256 ( BYTE *Dest, BYTE *Src, LONG Wd, DWORD Error, DWORD AddError ) 
  130. // 
  131. // EAX = Dest, EDX = Src, EBX = Wd, ECX = Error 
  132.  
  133. VOID ScaleBlt256To256 ( BYTE *Dest, BYTE *Src,  
  134.                                             LONG dWd, LONG Error, DWORD AddError ) 
  135. __asm { 
  136.   pushad 
  137.  
  138.   mov  EAX, Dest 
  139.   mov  EDX, Src 
  140.   mov  EBX, dWd 
  141.   mov  ECX, Error 
  142.    
  143.   mov  EDI, EAX 
  144.   mov  ESI, EDX 
  145.    
  146.   xchg EBX, ECX  // ECX is the loop count, EBX is the Error   
  147.   mov  EDX, AddError 
  148.   mov  EBP, 0 
  149.   cld  
  150.   //InitClockCycle 
  151.  
  152.   ScaleLoop : 
  153.     mov AL, [ESI+EBP]  
  154.     add EBX, EDX 
  155.     mov EBP, EBX 
  156.     mov [EDI], AL 
  157.     shr EBP, 16 
  158.     inc EDI 
  159.     dec ECX 
  160.     jnz ScaleLoop 
  161.      
  162.   //GetElapsedClock 
  163.  
  164.   popad 
  165. } // End asm 
  166. } // End of _ScaleBlt256To256 
  167.  
  168.  
  169. // VOID SetSrcAdd ( LONG Add1, LONG Add2 ) 
  170. // 
  171. // EAX = U, EDX = V, EBX = Du, ECX = Dv 
  172.  
  173. // VOID SetAffineUV ( LONG U, LONG V, LONG Du, LONG Dv ) 
  174. // 
  175. // EAX = U, EDX = V, EBX = Du, ECX = Dv 
  176.  
  177. VOID SetAffineUV ( LONG U, LONG V, LONG Du, LONG Dv ) 
  178.   if (U&V&Du&Dv) 
  179.   {} 
  180. } // End of SetAffineUV 
  181.    
  182.  
  183. // VOID Affine256To256 ( BYTE *Dest, BYTE *Src, LONG Wd ) 
  184. //   
  185. // EAX = Dest, EDX = Src, EBX = Wd 
  186.  
  187. VOID Affine256To256 ( BYTE *Dest, BYTE *Src, LONG dWd ) 
  188. __asm { 
  189.   pushad 
  190.    
  191.   mov  EDI, EAX 
  192.   mov  ESI, EDX 
  193.    
  194.   LoopAffine256 : 
  195.    
  196.     loop LoopAffine256 
  197.    
  198.   popad 
  199. } // End asm 
  200. } // End of Affin256To256 
  201.  
  202.  
  203.  
  204.