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

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