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

  1.  
  2.     TITLE    CGAPADDR - Return video buffer address of a pixel.
  3.     NAME    CGAPADDR
  4.     PAGE    55,132
  5.  
  6.  
  7.     COMMENT    $
  8.  
  9.     Name:        CGAPADDR
  10.  
  11.     Function:    Determine buffer address of pixel in 640x200 2 color mode
  12.  
  13.     Caller:            AX = y co-ord (0-199)
  14.                 BX = x co-ord (0-639)
  15.  
  16.     Returns:
  17.                 AH = bit mask
  18.                 BX = byte offset in buffer
  19.                 CL = number of bits to shift left
  20.                 ES = video buffer segment
  21.  
  22.         $
  23.  
  24.         extrn    __buffer_segment:word
  25.         extrn    __buffer_offset:word
  26.  
  27.         public    __cga_set_buffer
  28.         public    cgapaddr
  29.  
  30. CGAA_TEXT    SEGMENT    byte public 'CODE'
  31.         ASSUME  CS: CGAA_TEXT
  32.  
  33. __cga_set_buffer    proc    far
  34.  
  35.     push    bp
  36.     mov    bp, sp
  37.  
  38.     les    di, [bp + 6]
  39.     mov    __buffer_segment, es
  40.     mov    __buffer_offset, di
  41.  
  42.     mov    sp, bp
  43.     pop    bp
  44.     ret
  45. __cga_set_buffer    endp
  46.  
  47. cgapaddr    PROC    far
  48.  
  49.     mov        cl,bl        ; CL = low-order byte of x
  50.     xchg        ah,al        ; AX = 100h * y
  51.     shr        bx,1        ; BX = x/2
  52.     shr        ax,1        ; AL = 80h*(y&1)
  53.     add        bh,al        ; BX = x/2 + 8000h*(y&1)
  54.     xor        al,al        ; AX = 100h*(y/2)
  55.     add        bx,ax        ; BX = x/2 + 8000h*(y&1) + 100h*(y/2)
  56.     shr        ax,1
  57.     shr        ax,1        ; AX = 40h*(y/2)
  58.     add        bx,ax        ; BX = x/2 + 8000h*(y&1) + 140h*(y/2)
  59.     shr        bx,1
  60.     shr        bx,1        ; BX = x/8 + 2000h*(y&1) + 50h*(y/2)
  61.  
  62.     add        bx, __buffer_offset
  63.  
  64.     mov        ax, __buffer_segment
  65.     mov        es,ax        ; ES:BX = byte address of pixel
  66.  
  67.     and        cl,7        ; CL = x &  
  68.     xor        cl,7        ; CL = number of bits to shift left
  69.     mov        ah,1        ; AH unshifted bit mask
  70.     ret
  71.  
  72. cgapaddr    endp
  73.  
  74. CGAA_TEXT    ends
  75.  
  76.         end
  77.