static void vgatext_get_cursor(struct vgatext_softc *softc, screen_pos_t *row, screen_pos_t *col) { short addr; addr = (vga_get_crtc(&softc->regs, VGA_CRTC_CLAH) << 8) + vga_get_crtc(&softc->regs, VGA_CRTC_CLAL); vga_row = *row = addr / TEXT_COLS; vga_col = *col = addr % TEXT_COLS; }
static void vidc_text_set_cursor(screen_pos_t row, screen_pos_t col, boolean_t visible) { uint16_t addr; uint8_t msl, s, e; msl = vga_get_crtc(VGA_REG_ADDR, VGA_CRTC_MAX_S_LN) & 0x1f; s = vga_get_crtc(VGA_REG_ADDR, VGA_CRTC_CSSL) & 0xC0; e = vga_get_crtc(VGA_REG_ADDR, VGA_CRTC_CESL); if (visible == B_TRUE) { addr = row * TEXT_COLS + col; vga_set_crtc(VGA_REG_ADDR, VGA_CRTC_CLAH, addr >> 8); vga_set_crtc(VGA_REG_ADDR, VGA_CRTC_CLAL, addr & 0xff); e = msl; } else {
/* * This code is experimental. It's only enabled if console is * set to graphics, a preliminary implementation of happyface boot. */ static void vgatext_set_text(struct vgatext_softc *softc) { int i; if (happyface_boot == 0) return; /* we are in graphics mode, set to text 80X25 mode */ /* set misc registers */ vga_set_reg(&softc->regs, VGA_MISC_W, VGA_MISC_TEXT); /* set sequencer registers */ vga_set_seq(&softc->regs, VGA_SEQ_RST_SYN, (vga_get_seq(&softc->regs, VGA_SEQ_RST_SYN) & ~VGA_SEQ_RST_SYN_NO_SYNC_RESET)); for (i = 1; i < NUM_SEQ_REG; i++) { vga_set_seq(&softc->regs, i, VGA_SEQ_TEXT[i]); } vga_set_seq(&softc->regs, VGA_SEQ_RST_SYN, (vga_get_seq(&softc->regs, VGA_SEQ_RST_SYN) | VGA_SEQ_RST_SYN_NO_ASYNC_RESET | VGA_SEQ_RST_SYN_NO_SYNC_RESET)); /* set crt controller registers */ vga_set_crtc(&softc->regs, VGA_CRTC_VRE, (vga_get_crtc(&softc->regs, VGA_CRTC_VRE) & ~VGA_CRTC_VRE_LOCK)); for (i = 0; i < NUM_CRTC_REG; i++) { vga_set_crtc(&softc->regs, i, VGA_CRTC_TEXT[i]); } /* set graphics controller registers */ for (i = 0; i < NUM_GRC_REG; i++) { vga_set_grc(&softc->regs, i, VGA_GRC_TEXT[i]); } /* set attribute registers */ for (i = 0; i < NUM_ATR_REG; i++) { vga_set_atr(&softc->regs, i, VGA_ATR_TEXT[i]); } /* set palette */ for (i = 0; i < VGA_TEXT_CMAP_ENTRIES; i++) { vga_put_cmap(&softc->regs, i, VGA_TEXT_PALETTES[i][0] << 2, VGA_TEXT_PALETTES[i][1] << 2, VGA_TEXT_PALETTES[i][2] << 2); } for (i = VGA_TEXT_CMAP_ENTRIES; i < VGA8_CMAP_ENTRIES; i++) { vga_put_cmap(&softc->regs, i, 0, 0, 0); } vgatext_save_colormap(softc); }