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

  1.  
  2. ;************************************************************************
  3. ; Display character Char at position Row, Column (using attributes    *
  4. ; already in display buffer)                        *
  5. ; Entry: The following parameters are passed on the stack as words    *
  6. ;        Char, Row, Col                        *
  7. ;************************************************************************
  8.  
  9. Char    EQU    [BP+10]
  10. Row    EQU    [BP+8]
  11. Column    EQU    [BP+6]
  12.  
  13.     PUBLIC Write_Char
  14.  
  15. Write_Char    PROC FAR
  16.     PUSH    BP
  17.     MOV    BP,SP
  18.     PUSH    DI            ;Preserve registers
  19.     PUSH    ES
  20.  
  21.     ;--- Convert row and column to absolute offset within display buffer
  22.  
  23.     XOR    AX,AX            ;Point ES to segment zero
  24.     MOV    ES,AX
  25.     MOV    AX,Row            ;Fetch row number
  26.     MOV    BX,ES:[BIOS_Columns]    ;Fetch columns per screen
  27.     MUL    BX            ;Compute absolute address as
  28.     ADD    AX,Column        ; Column + Row * Columns)
  29.     SHL    AX,1            ; Account for attributes
  30.     MOV    DI,AX            ;Move address into register DI
  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    Address_Ok        ;...Yes, go load segment
  37.     MOV    AX,0B800H        ;...No, change address to color
  38. Address_Ok:
  39.     MOV    ES,AX            ;Set segment of display buffer
  40.  
  41.     ;--- Save the character
  42.  
  43.     MOV    AL,Char         ;Get character
  44.     STOSB                ;Write it into display buffer
  45.  
  46.     POP    ES            ;Restore registers
  47.     POP    DI
  48.     MOV    SP,BP
  49.     POP    BP
  50.     RET    6
  51. Write_Char    ENDP
  52.