Text Mode Cursor

From OSDev.wiki
Revision as of 03:10, 6 April 2007 by osdev>Alboin (Fixed Catagory Tag.)
Jump to navigation Jump to search

Template:Convert

Without access to BIOS calls and functions, moving the cursor requires using video hardware control. Lucky it is a simple procedure.

Note, this quick example ASSUMES 80x25 screen mode.

/* void update_cursor(int row, int col)
 * by Dark Fiber
 */
void update_cursor(int row, int col)
{
   unsigned short position=(row*80) + col;

   // cursor LOW port to vga INDEX register
   outb(0x3D4, 0x0F);
   outb(0x3D5, (unsigned char)(position&0xFF));
   // cursor HIGH port to vga INDEX register
   outb(0x3D4, 0x0E);
   outb(0x3D5, (unsigned char )((position>>8)&0xFF));
}

Keep in mind that in/out to VGA Hardware is a slow operation. So using the hardware registers to remember of the current character location (row, col) is bad practice -- and updating position after each displayed character is poor practice (updating it only when a line/string is complete is wiser and hiding it until a user prompt is required is wisest)