home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / 3DTOSHI2.ZIP / mpgfx / source / Lgfxvsaw.asm < prev   
Encoding:
Assembly Source File  |  1996-04-08  |  2.6 KB  |  163 lines

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