home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / C-ASM_VI.ARJ / PROGASM.ZIP / PROG070P.ASM < prev    next >
Assembly Source File  |  1988-05-25  |  1KB  |  52 lines

  1.  
  2. ;************************************************************************
  3. ; Read attributes of character at Row, Column and return it in AX    *
  4. ; Entry: The follwing parameters are passed on the stack as words    *
  5. ;     Row, Col                            *
  6. ; Exit:  AX    - Attribute                        *
  7. ;************************************************************************
  8.  
  9. Row    EQU    [BP+8]
  10. Column    EQU    [BP+6]
  11.  
  12.     PUBLIC Read_Attribute
  13.  
  14. Read_Attribute PROC FAR
  15.     PUSH    BP
  16.     MOV    BP,SP
  17.     PUSH    DI            ;Preserve registers
  18.     PUSH    ES
  19.  
  20.     ;--- Convert row and column to absolute offset within display buffer
  21.  
  22.     XOR    AX,AX            ;Point ES to segment zero
  23.     MOV    ES,AX
  24.     MOV    AX,Row            ;Fetch row number
  25.     MOV    BX,ES:[BIOS_Columns]    ;Fetch columns per screen
  26.     MUL    BX            ;Compute absolute address as
  27.     ADD    AX,Column        ; Column + Row * Columns)
  28.     SHL    AX,1            ; Account for attributes
  29.     MOV    DI,AX            ;Move address into register DI
  30.     INC    DI            ;Skip character code byte
  31.  
  32.     ;--- Determine and load segement of the display buffer
  33.  
  34.     MOV    AX,0B000H        ;Assume monochrome buffer address
  35.     TEST    BYTE PTR ES:[BIOS_Equipment],2     ;Is mono attached?
  36.     JNZ    Attr_Read_Ok        ;...Yes, go load segment
  37.     MOV    AX,0B800H        ;...No, change address to color
  38. Attr_Read_Ok:
  39.     MOV    ES,AX            ;Set segment of display buffer
  40.  
  41.     ;--- Fetch the attribute and split it into back and fore
  42.  
  43.     MOV    AL,ES:[DI]        ;Fetch the attribyte
  44.     XOR    AH,AH
  45.  
  46.     POP    ES            ;Restore registers
  47.     POP    DI
  48.     MOV    SP,BP
  49.     POP    BP
  50.     RET    4
  51. Read_Attribute ENDP
  52.