home *** CD-ROM | disk | FTP | other *** search
/ gondwana.ecr.mu.oz.au/pub/ / Graphics.tar / Graphics / VOGLE.ZIP / DRIVERS / IBMPC / VEGA_BUF.ASM < prev    next >
Assembly Source File  |  2000-02-11  |  2KB  |  134 lines

  1.     TITLE    VEGABUF    - Handles VGA/EGA double buffering / page swapping
  2.     NAME    VEGABUF
  3.     PAGE    55,132
  4.  
  5.     COMMENT    $
  6.     
  7.     Caller:    Microsoft C
  8.  
  9.         vega_backbuf()    /* Displays page 1, Sets page 0 for writing */
  10.  
  11.         void
  12.         vega_frontbuf()    /* Displays page 0, Sets page 1 for writing */
  13.  
  14.         void
  15.         vega_swapbuf()    /* Swaps page 0 and page 1 on display */
  16.         
  17.     $
  18.         
  19. displayseg0        equ        0A000h
  20. displayseg1        equ        displayseg0 + 0800h
  21.  
  22. PUBLIC    _vega_backbuf, _vega_frontbuf, _vega_swapbuf
  23.  
  24.     extrn    __buffer_segment:word
  25.     extrn    __buffer_offset:word
  26.     extrn    __cur_mode:word
  27.  
  28. vega_text    segment byte public 'code'
  29.  
  30.     assume cs:vega_text
  31.  
  32.     comment    $
  33.         displays page0, sets page 1 for writing.
  34.     $
  35.  
  36. _vega_backbuf    proc    far
  37.     push        bp
  38.     mov        bp, sp
  39.  
  40.     mov        dx, 3dah    ; status reg
  41. vt1:    
  42.     in        al, dx
  43.     test        al, 8        ; test for vert retrace
  44.     jz        vt1
  45.  
  46.     mov        ax, 0500h    ; Show page 0, write to page 1
  47.         int        010h
  48.  
  49.     mov        __buffer_segment, displayseg1
  50.     cmp        __cur_mode, 18    ; Is this VGA mode?
  51.     jne        not_vga
  52.     add        __buffer_segment, 0800h
  53. not_vga:
  54.  
  55.     mov        ax, 1    ; return value
  56.     pop        bp
  57.     ret
  58. _vega_backbuf        endp    
  59.  
  60.     comment    $
  61.         displays page0, sets page 0 for writing.
  62.         Makes sure that written page is the display page.
  63.     $
  64.  
  65. _vega_frontbuf    proc    far
  66.     push        bp
  67.     mov        bp, sp
  68.  
  69.     mov        dx, 3dah    ; status reg
  70. vt2:    
  71.     in        al, dx
  72.     test        al, 8        ; test for vert retrace
  73.     jz        vt2
  74.  
  75.     mov        ax, 0500h    ; show page 0, write to page 0
  76.         int        010h
  77.  
  78.     mov        __buffer_segment, displayseg0
  79.  
  80.     pop        bp
  81.     ret
  82. _vega_frontbuf        endp    
  83.  
  84.  
  85.     comment    $
  86.         display current buffer (__buffer_segment)
  87.         set drawing in other buffer.
  88.     $
  89.  
  90. _vega_swapbuf    proc    far
  91.     push        bp
  92.     mov        bp, sp
  93.  
  94.     mov        dx, 3dah    ; status reg
  95.  
  96.     cmp        __buffer_segment, displayseg0
  97.     je        disp_page0
  98. ;  Written page is page 1, displayed page is page 0
  99. ;  so display page 1 and write to page 0.
  100.  
  101. vt3:    
  102.     in        al, dx
  103.     test        al, 8        ; test for vert retrace
  104.     jz        vt3
  105.  
  106.         mov        ax, 0501h    ; Show page 1
  107.         int        010h
  108.  
  109.     mov        __buffer_segment, displayseg0
  110.     jmp        go
  111.  
  112. disp_page0:
  113.  
  114. vt4:    
  115.     in        al, dx
  116.     test        al, 8        ; test for vert retrace
  117.     jz        vt4
  118.  
  119.     mov        ax, 0500h
  120.         int        010h
  121.  
  122.     mov        __buffer_segment, displayseg1
  123.     cmp        __cur_mode, 18
  124.     jne        go
  125.     add        __buffer_segment, 0800h
  126. go:
  127.     pop        bp
  128.     ret
  129. _vega_swapbuf        endp    
  130.  
  131. vega_text ends
  132.  
  133.     end
  134.