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

  1.  
  2. // lgfxvsam.cpp
  3. //
  4. // Copyright (c) 1995 by Toshiaki Tsuji, all rights reserved.
  5.  
  6. #include "stdgfx.h"
  7. #include "lgfxvsa.h"
  8.  
  9. LONG ScreenWd;
  10. LONG ScreenHt;
  11. LONG ScreenLen;
  12. LONG BankNumber;
  13.  
  14. LONG vesaSrcWd;
  15. LONG vesaSrcHt;
  16.  
  17. // EDX = Bank Number
  18.  
  19. #define SetBank __asm \
  20. { \
  21.   __asm push AX \
  22.   __asm push BX \
  23.   __asm push EDX \
  24.   __asm xor  BX, BX \
  25.   __asm mov  EDX, BankNumber \
  26.   __asm mov  AX, 0x4F05 \
  27.   __asm int  0x10 \
  28.   __asm pop  EDX \
  29.   __asm pop  BX \
  30.   __asm pop  AX \
  31. }
  32.  
  33. // VOID SetVESASelector ( SHORT Selector )
  34. // EAX = Selector
  35.  
  36. VOID SetVESASelector ( SHORT Selector )
  37. {
  38.   if (Selector)
  39.     {}    
  40. } // End of SetVESASelector
  41.  
  42.  
  43. // VOID SetVESAData ( LONG SrcWidth, LONG SrcHeight, LONG SrcLen )
  44. // EAX = SrcWidth, EDX = Srcheight, EBX = SrcLen
  45.  
  46. VOID SetVESAData ( LONG SrcWidth, LONG SrcHeight, LONG SrcLen )
  47. {
  48. __asm {
  49.   pushad
  50.  
  51.   mov  EAX, SrcWidth
  52.   mov  EDX, SrcHeight
  53.   mov  EBX, SrcLen
  54.   mov  ScreenWd, EAX
  55.   mov  ScreenHt, EDX
  56.   mov  ScreenLen, EBX
  57.  
  58.   popad
  59. } // End asm
  60. } // End of SetVESAData 
  61.  
  62. // VOID VESACopy256To256 ( BYTE *Src, LONG AddSrc, LONG vesaSrcWd, LONG vesaSrcHt,
  63. //                         LONG DestCx, LONG DestCy )
  64. //
  65. // EAX = Src, EDX = AddSrc, EBX = vesaSrcWd, ECX = vesaSrcHt
  66.  
  67. VOID VESACopy256To256 ( BYTE *Src, LONG AddSrc, LONG SrcWidth, LONG SrcHeight,
  68.                         LONG DestCx, LONG DestCy )
  69. {
  70. __asm {
  71.   pushad
  72.  
  73.   mov  EAX, Src
  74.   mov  EDX, AddSrc
  75.   mov  EBX, SrcWidth
  76.   mov  ECX, SrcHeight
  77.  
  78.   mov  ESI, EAX   ; ESI = Src
  79.   mov  vesaSrcWd, EBX
  80.   mov  vesaSrcHt, ECX
  81.   
  82.   sub  EDX, EBX
  83.   mov  EBX, EDX   ; EBX = AddSrc - vesaSrcWd
  84.  
  85.   mov  EDI, 0A0000h
  86.   mov  EAX, DestCy
  87.   mov  EDX, ScreenLen
  88.   mul  DX  
  89.   add  EAX, DestCx
  90.   adc  EDX, 0        ; EDX is the Bank Number
  91.   and  EAX, 0FFFFh
  92.   mov  BankNumber, EDX
  93.   
  94.   SetBank 
  95.   
  96.   add  EDI, EAX
  97.   
  98.   mov  EDX, ScreenLen
  99.   sub  EDX, vesaSrcWd
  100.   cld
  101.  
  102.   Copy256OutLoop :
  103.     mov ECX, vesaSrcWd
  104.     mov EAX, ECX
  105.     and EAX, 03h
  106.     shr ECX, 2
  107.     rep movsd
  108.     mov ECX, EAX
  109.     rep movsb
  110.     add ESI, EBX
  111.     add EDI, EDX
  112.     cmp EDI, 0AFFFFh
  113.     jle DoNext
  114.       inc BankNumber
  115.       SetBank
  116.       and EDI, 0AFFFFh
  117.  
  118.     DoNext :
  119.       dec vesaSrcHt
  120.     jnz Copy256OutLoop
  121.  
  122.   popad
  123. } // End asm
  124. } // End of VESACopy256To256
  125.  
  126. // VOID VESAClear256 ( BYTE Color )
  127. //
  128. // EAX = Color
  129.  
  130. VOID VESAClear256 ( BYTE Color )
  131. {
  132. __asm {
  133.   pushad
  134.  
  135.   mov  AL, Color
  136.  
  137.   mov  AH, AL
  138.   mov  CX, AX
  139.   shl  EAX, 16  
  140.   mov  AX, CX
  141.   
  142.   mov  EDI, 0A0000h
  143.   mov  BankNumber, 0
  144.   
  145.   SetBank 
  146.   
  147.   mov  EDX, ScreenLen
  148.   sub  EDX, ScreenWd
  149.   mov  ESI, ScreenHt
  150.   cld
  151.  
  152.   Clear256OutLoop :
  153.     mov ECX, ScreenWd
  154.     mov EBX, ECX
  155.     and EBX, 03h
  156.     shr ECX, 2
  157.     rep stosd
  158.     mov ECX, EBX
  159.     rep stosb
  160.     add EDI, EDX
  161.     cmp EDI, 0AFFFFh
  162.     jle DoNextClear
  163.       inc BankNumber
  164.       SetBank 
  165.       and EDI, 0AFFFFh
  166.     
  167.     DoNextClear :
  168.       dec ESI
  169.     jnz Clear256OutLoop
  170.  
  171.   popad
  172. } // End asm
  173. } // End of VESAClear256
  174.  
  175.