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

  1.  
  2. ;************************************************************************
  3. ; Get current cursor position by reading CRTC registers         *
  4. ; Entry: Row   - Pointer to where to save current cursor row        *
  5. ;     Column- Pointer to where to save current cursor column     *
  6. ; Exit:  Values at the pointers are set to proper values        *
  7. ;************************************************************************
  8.  
  9. row_seg        EQU    [BP+12]
  10. row_offset    EQU    [BP+10]
  11. column_seg    EQU    [BP+8]
  12. column_offset    EQU    [BP+6]
  13.  
  14.     PUBLIC    Get_Cursor_Position
  15.  
  16. Get_Cursor_Position PROC FAR
  17.     PUSH    BP
  18.     MOV    BP,SP
  19.     PUSH    DS
  20.     PUSH    ES
  21.     XOR    AX,AX            ;Point ES to segment 0
  22.     MOV    ES,AX
  23.     MOV    DX,ES:[BIOS_CRT_Addr]    ;Load CRTC address
  24.     MOV    AL,0EH            ;Fetch index of cursor high
  25.     OUT    DX,AL            ;Select index
  26.     INC    DX            ;Load CRTC address
  27.     IN    AL,DX            ;Read the high address
  28.     JMP    $+2
  29.     MOV    BH,AL            ;Save value in BH
  30.  
  31.     DEC    DX            ;Load CRTC address
  32.     MOV    AL,0FH            ;Fetch index of cursor low
  33.     OUT    DX,AL            ;Select index
  34.     INC    DX            ;Load CRTC address
  35.     IN    AL,DX            ;Read the low part of address
  36.     JMP    $+2
  37.  
  38.     MOV    AH,BH            ;Fetch the high byte from earlier
  39.     XOR    DX,DX            ;convert to row and column
  40.     MOV    BX,ES:[BIOS_Columns]    ;by dividing absolute address
  41.     DIV    BX            ;with columns
  42.     MOV    DS,row_seg
  43.     MOV    BX,row_offset        ;Fetch pointer where to save row
  44.     MOV    [BX],AX         ;Save row number
  45.     MOV    DS,column_seg
  46.     MOV    BX,column_offset    ;Fetch pointer where to save column
  47.     MOV    [BX],DX         ;Save column number
  48.     POP    DS
  49.     POP    ES
  50.     POP    BP
  51.     RET    8
  52. Get_Cursor_Position ENDP
  53.