home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / video / a / a_2.asm < prev   
Encoding:
Assembly Source File  |  1988-08-11  |  2.5 KB  |  120 lines

  1.         TITLE    'Listing A-2'
  2.         NAME    EstablishUPP
  3.         PAGE    55,132
  4.  
  5. ;
  6. ; Name:        EstablishUPP
  7. ;
  8. ; Function:    Establish a User Palette Profile Save Area for the VGA video BIOS.
  9. ;        This save area overrides the usual default palette values for a
  10. ;        specified list of video modes.
  11. ;
  12. ; Caller:    Microsoft C:
  13. ;
  14. ;            void EstablishUPP();
  15. ;
  16.  
  17. SAVE_PTR    EQU    0A8h
  18.  
  19. DGROUP        GROUP    _DATA
  20.  
  21. _TEXT        SEGMENT    byte public 'CODE'
  22.         ASSUME    cs:_TEXT,ds:DGROUP,es:DGROUP
  23.  
  24.         PUBLIC    _EstablishUPP
  25. _EstablishUPP    PROC    near
  26.  
  27.         push    bp
  28.         mov    bp,sp
  29.         push    si
  30.         push    di
  31.  
  32. ; preserve previous SAVE_PTR
  33.  
  34.         push    ds
  35.         pop    es        ; ES -> DGROUP
  36.         mov    di,offset DGROUP:Old_SAVE_PTR
  37.  
  38.         mov    ax,40h
  39.         mov    ds,ax        ; DS -> video BIOS data area
  40.         mov    si,SAVE_PTR    ; DS:SI -> SAVE_PTR
  41.  
  42.         mov    cx,4
  43.         rep    movsb
  44.  
  45. ; copy SAVE POINTER table to RAM
  46.  
  47.         lds    si,es:Old_SAVE_PTR    ; DS:SI -> SAVE POINTER table
  48.         mov    di,offset DGROUP:SP_TABLE1
  49.         mov    cx,7*4        ; number of bytes to move
  50.         rep    movsb
  51.  
  52. ; update SAVE_PTR with the address of the new SAVE POINTER table
  53.  
  54.         mov    ds,ax        ; DS -> video BIOS data area
  55.         mov    si,SAVE_PTR
  56.         mov    word ptr [si],offset DGROUP:SP_TABLE1
  57.         mov    [si+2],es
  58.  
  59. ; copy SECONDARY SAVE POINTER table to RAM
  60.  
  61.         lds    si,es:SP_TABLE1[16]    ; DS:SI -> SEC SAVE POINTER table
  62.         mov    di,offset DGROUP:SP_TABLE2
  63.         mov    cx,[si]
  64.         rep    movsb
  65.  
  66. ; update new SAVE POINTER table with address of new SECONDARY SAVE POINTER table
  67.  
  68.         push    es
  69.         pop    ds    ; DS -> DGROUP
  70.  
  71.         mov    word ptr SP_TABLE1[16],offset DGROUP:SP_TABLE2
  72.         mov    word ptr SP_TABLE1[18],ds
  73.  
  74. ; update SECONDARY SAVE POINTER with address of User Palette Profile
  75.  
  76.         mov    word ptr SP_TABLE2[10],offset DGROUP:UPP
  77.         mov    word ptr SP_TABLE2[12],ds
  78.  
  79. ; restore registers and exit
  80.  
  81.         pop    di
  82.         pop    si
  83.         mov    sp,bp
  84.         pop    bp
  85.         ret
  86.  
  87. _EstablishUPP    ENDP
  88.  
  89. _TEXT        ENDS
  90.  
  91.  
  92. _DATA        SEGMENT    word public 'DATA'
  93.  
  94. Old_SAVE_PTR    DD    ?        ; previous value of SAVE_PTR
  95.  
  96. SP_TABLE1    DD    7 dup(?)    ; copy of SAVE POINTER table
  97.  
  98. SP_TABLE2    DW    ?        ; copy of SECONDARY SAVE POINTER table
  99.         DD    6 dup(?)
  100.  
  101. UPP        DB    0        ; underlining flag
  102.         DB    0        ; (reserved)
  103.         DW    0        ; (reserved)
  104.         DW    17        ; # of palette & overscan registers
  105.         DW    0        ; first register specified in table
  106.         DW    DGROUP:PalTable    ; pointer to palette table
  107.         DW    seg DGROUP
  108.         DW    0        ; number of video DAC color regs
  109.         DW    0        ; first video DAC register
  110.         DD    0        ; pointer to video DAC color table
  111.         DB    3,0FFh        ; list of applicable video modes
  112.  
  113. PalTable    DB    30h,31h,32h,33h,34h,35h,36h,37h    ; a custom palette
  114.         DB    00h,01h,02h,03h,04h,05h,14h,07h
  115.         DB    01h                ; overscan reg
  116.  
  117. _DATA        ENDS
  118.  
  119.         END
  120.