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

  1.  
  2. ;************************************************************************
  3. ; Set current cursor position by changing CRTC registers        *
  4. ; Entry:    Row        - Desired row number            *
  5. ;        Column        - Desired column numer            *
  6. ;************************************************************************
  7.  
  8. Row    EQU    [BP+8]
  9. Column    EQU    [BP+6]
  10.  
  11.     PUBLIC    Set_Cursor_Position
  12.  
  13. Set_Cursor_Position PROC FAR
  14.     PUSH    BP
  15.     MOV    BP,SP
  16.     PUSH    ES
  17.     XOR    AX,AX            ;Point ES to segment 0
  18.     MOV    ES,AX
  19.  
  20.     ;--- Convert (row,column) to absolute address in display buffer
  21.  
  22.     MOV    AX,Row            ;Convert row,column to
  23.     MOV    DX,ES:[BIOS_Columns]    ;absolute address
  24.     MUL    DX
  25.     ADD    AX,Column
  26.     MOV    BX,AX            ;Save absolute address in BX
  27.  
  28.     ;--- Write absolute address to CRT CURSOR ADDRESS registers (E & F)
  29.  
  30.     MOV    DX,ES:[BIOS_CRT_Addr]    ;Load CRTC address
  31.     MOV    AL,0EH            ;Fetch index of cursor high
  32.     OUT    DX,AL            ;Select index
  33.     INC    DX            ;Load CRTC address
  34.     MOV    AL,BH            ;Fetch data value
  35.     OUT    DX,AL            ;Write data
  36.  
  37.     DEC    DX            ;Load CRTC address
  38.     MOV    AL,0FH            ;Fetch index of cursor low
  39.     OUT    DX,AL            ;Select index
  40.     INC    DX            ;Load CRTC address
  41.     MOV    AL,BH            ;Fetch data value
  42.     OUT    DX,AL            ;Write data
  43.  
  44.     ;--- Update BIOS data area so that BIOS knows about new position
  45.  
  46.     MOV    AL,Column        ;Update BIOS data area
  47.     MOV    AH,Row
  48.     MOV    ES:[BIOS_Curs_Pos],AX
  49.  
  50.     POP    ES
  51.     MOV    SP,BP
  52.     POP    BP
  53.     RET    4
  54. Set_Cursor_Position ENDP
  55.