home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / C-ASM_VI.ARJ / PROGASM.ZIP / PROG041.ASM < prev    next >
Assembly Source File  |  1988-04-10  |  2KB  |  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+4]
  9. Column  EQU     [BP+6]
  10.  
  11.         PUBLIC  _Set_Cursor_Position
  12.  
  13. _Set_Cursor_Position PROC NEAR
  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
  54. _Set_Cursor_Position ENDP
  55.