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

  1.      TITLE    HGCPADDR - Return video buffer address of a pixel.
  2.     NAME    HGCPADDR
  3.     PAGE    55,132
  4.  
  5.     COMMENT    $
  6.  
  7.     Name:    HGCPADDR
  8.  
  9.     Function: Determine buffer address of pixel in 720x348 Hercules graphics
  10.  
  11.     Caller:    AX = y co-ord (0-347)
  12.         BX = x co-ord (0-719)
  13.  
  14.     Returns:
  15.         AH = bit mask
  16.         BX = byte offset in buffer
  17.         CL = number of bits to shift left
  18.         ES = video buffer segment
  19.  
  20.         $
  21.  
  22. BytesPerLine    EQU    90
  23.  
  24.         extrn    __buffer_segment:word
  25.  
  26. HERC_TEXT    SEGMENT    byte public 'CODE'
  27.         ASSUME    cs:HERC_TEXT
  28.  
  29.         PUBLIC    hgcpaddr
  30.  
  31. hgcpaddr    PROC    far
  32.  
  33.     mov    cl,bl        ; CL = low-order byte of x
  34.     shr    ax,1        ; AX = y/2
  35.     rcr    bx,1        ; BX = 8000h*(y&1) + x/2
  36.     shr    ax,1        ; AX = y/4
  37.     rcr    bx,1        ; BX = 4000h*(y&3) + x/4
  38.     shr    bx,1        ; BX = 2000h*(y&3) + x/8
  39.     mov    ah,BytesPerLine
  40.     mul    ah        ; AX = BytesPerLine*(y/4)
  41.     add    bx,ax        ; BX = 2000h*(y&3) + x/8 
  42.                 ; + BytesPerLine*(y/4)
  43.  
  44. ;    add    bx,OriginOffset    ; BX = byte offset in video buffer
  45.  
  46. ;    mov    ax,VideoBufferSeg
  47.     mov    ax,__buffer_segment
  48.     mov    es,ax        ; ES:BX = byte address of pixel
  49.  
  50.     and    cl,7        ; CL = x & 7
  51.     xor    cl,7        ; CL = number of bits to shift left
  52.     mov    ah,1        ; AH unshifted bit mask
  53.     ret
  54.  
  55. hgcpaddr    endp
  56.  
  57. HERC_TEXT    ends
  58.  
  59.     end
  60.