static void vga_get_cursor(unsigned int *x, unsigned int *y, unsigned int *en) { unsigned int addr; addr = ((unsigned int) crtc_read(0x0E)) << 8; addr += crtc_read(0x0F); *x = addr % vga_video_console.columns; *y = addr / vga_video_console.columns; *en = !(crtc_read(0x0A) & (1 << 5)); }
uint8_t read_vga_register(register_set_t target, uint8_t index) { switch(target) { case GRAPHIC_CTRL: return gctrl_read(index); break; case SEQUENCER: return seq_read(index); break; case ATTRIBUTE_CTRL: return attr_read(index); break; case CRT_CTRL: return crtc_read(index); break; case EXTERNAL_REGISTERS: switch(index) { case MISC_OUTPUT_REGISTER: return misc_output_read(); break; case FEATURE_CONTROL_REGISTER: return feature_control_read(); break; } break; default: break; } return 0; }
static void vga_enable_cursor(int state) { unsigned char tmp = crtc_read(0x0a); if (state == 0) tmp |= (1 << 5); else tmp &= ~(1 << 5); crtc_write(tmp, 0x0a); }
static void vga_init_cursor(void) { u8 val; #define CURSOR_MSL 0x09 /* cursor maximum scan line */ #define CURSOR_START 0x0A /* cursor start */ #define CURSOR_END 0x0B /* cursor end */ val = crtc_read(CURSOR_MSL) & 0x1f; crtc_write(0, CURSOR_START); crtc_write(val - 2, CURSOR_END); }
void init_tty32() { curpos32 = (((uint16_t) crtc_read(CRTC_CURPOS_HI)) << 8) | ((uint16_t) crtc_read(CRTC_CURPOS_LO)); __asm__("1: incl %%edi; stosb; loop 1b" : : "a" (VGA_ATTRIBUTE), "c" (80 * VGA_LINES), "D" (video32)); put_status(""); }