home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / C-ASM_VI.ARJ / PROGASM.ZIP / PROG070.ASM < prev    next >
Assembly Source File  |  1988-05-25  |  2KB  |  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       Backgrouond and foreground colors packed into a byte  *
  7. ;************************************************************************
  8.  
  9. Row     EQU     [BP+4]
  10. Column  EQU     [BP+6]
  11.  
  12.         PUBLIC _Read_Attribute
  13.  
  14. _Read_Attribute PROC NEAR
  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 return it
  42.  
  43.         MOV     AL,ES:[DI]              ;Fetch the attribyte
  44.         XOR     AH,AH                   ;Clear upper byte of return value
  45.  
  46.         POP     ES                      ;Restore registers
  47.         POP     DI
  48.         MOV     SP,BP
  49.         POP     BP
  50.         RET
  51. _Read_Attribute ENDP
  52.