home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / video / a / a_1.asm next >
Encoding:
Assembly Source File  |  1988-08-11  |  1.7 KB  |  91 lines

  1.         TITLE    'Listing A-1'
  2.         NAME    EstablishPSA
  3.         PAGE    55,132
  4.  
  5. ;
  6. ; Name:        EstablishPSA
  7. ;
  8. ; Function:    Establish a Parameter Save Area for the EGA or VGA video BIOS.
  9. ;        This save area will reflect the current values of the Attribute
  10. ;        Controller's Palette and Overscan registers.
  11. ;
  12. ; Caller:    Microsoft C:
  13. ;
  14. ;            void EstablishPSA();
  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    _EstablishPSA
  25. _EstablishPSA    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. ; update SAVE POINTER table with address of Parameter Save Area
  60.  
  61.         push    es
  62.         pop    ds    ; DS -> DGROUP
  63.  
  64.         mov    word ptr SP_TABLE1[4],offset DGROUP:PSA
  65.         mov    word ptr SP_TABLE1[6],ds
  66.  
  67. ; restore registers and exit
  68.  
  69.         pop    di
  70.         pop    si
  71.         mov    sp,bp
  72.         pop    bp
  73.         ret
  74.  
  75. _EstablishPSA    ENDP
  76.  
  77. _TEXT        ENDS
  78.  
  79.  
  80. _DATA        SEGMENT    word public 'DATA'
  81.  
  82. Old_SAVE_PTR    DD    ?        ; previous value of SAVE_PTR
  83.  
  84. SP_TABLE1    DD    7 dup(?)    ; RAM copy of SAVE POINTER table
  85.  
  86. PSA        DB    256 dup(0)    ; Parameter Save Area
  87.  
  88. _DATA        ENDS
  89.  
  90.         END
  91.