home *** CD-ROM | disk | FTP | other *** search
/ The Pier Shareware 6 / The_Pier_Shareware_Number_6_(The_Pier_Exchange)_(1995).iso / 035 / modex32.zip / VPAL.ASM < prev    next >
Assembly Source File  |  1994-10-05  |  2KB  |  101 lines

  1.         .386
  2.         locals
  3.         include pmc.inc
  4.         ideal
  5.  
  6. ; VGA 256 Colour Palette Manipulation Routines
  7. ; Handle single colours as well as buffered palette sets
  8.  
  9. ; Copyright (c) 1994 Kumanan Yogaratnam
  10. ; Released to FreeWare
  11.  
  12. PALWRIT equ     03c8h
  13. PALDATA equ     03c9h
  14. CRTREG  equ     03dah
  15.  
  16. struc   parms1
  17.         dd      2 dup (?)       ; pushed EBP and ret addr
  18. pbuf    dd      ?               ; ptr to palette buffer
  19. ends
  20.  
  21. struc   parms2
  22.         dd      2 dup (?)
  23. stpal   dd      ?
  24. numpal  dd      ?
  25. pbuf    dd      ?
  26. ends
  27.  
  28.         @cseg
  29.  
  30. macro   WaitSync
  31.         mov dx, CRTREG
  32. @@1:
  33.         in al, dx
  34.         test al, 08h
  35.         jz @@1
  36. @@2:
  37.         in al, dx
  38.         test al, 08h
  39.         jnz @@2
  40. endm
  41.  
  42. public  _SetAllPalette, _SetIndexedPalette
  43.  
  44. proc    _SetAllPalette  near
  45.         push ebp
  46.         mov ebp, esp
  47.         push esi
  48.  
  49.         mov esi, [ebp+offset (parms1).pbuf]
  50.         mov dx, PALWRIT                 ; setup palette write
  51.         mov al, 0
  52.         out dx, al
  53.         mov ecx, (256*3) shr 2          ; read in dwords
  54.  
  55.         WaitSync
  56.  
  57.         mov dx, PALDATA                 ; set component port
  58. @@go:
  59.         lodsd                           ; read 4 bytes at a time
  60.         out dx, al
  61.         mov al, ah
  62.         out dx, al
  63.         shr eax, 16                     ; move hi word to lo word
  64.         out dx, al
  65.         mov al, ah
  66.         out dx, al
  67.         loop @@go
  68.  
  69.         pop esi
  70.         pop ebp
  71.         ret
  72. endp
  73.  
  74. proc    _SetIndexedPalette      near
  75.         push ebp
  76.         mov ebp, esp
  77.         push esi
  78.  
  79.         mov esi, [ebp+offset (parms2).pbuf]
  80.         mov dx, PALWRIT                 ; setup pal write
  81.         mov eax, [ebp+offset (parms2).stpal]
  82.         out dx, al                      ; set start pal ent
  83.         mov ecx, [ebp+offset (parms2).numpal]
  84.  
  85.         WaitSync
  86.  
  87.         mov dx, PALDATA
  88. @@go:
  89.         lodsb
  90.         out dx, al
  91.         loop @@go
  92.  
  93.         pop esi
  94.         pop ebp
  95.         ret
  96. endp
  97.  
  98. ends
  99. end
  100.  
  101.