Exemple #1
0
static int test_vbe(int x, int y, vbe_video_mode* mode)
{
	char buffer[256];
	struct vga_info info;
	struct vga_regs regs;
	adv_crtc crtc;

	draw_test_default();

	snprintf(buffer, sizeof(buffer), "vbe %s 0x%x %dx%dx%d [%dx%d]", index_name(video_index()), mode->mode, video_size_x(), video_size_y(), video_bits_per_pixel(), video_virtual_x(), video_virtual_y());
	draw_string(x, y, buffer, DRAW_COLOR_WHITE);
	++y;

	++y;

	vga_mode_get(&regs);
	vga_regs_info_get(&regs, &info);
	if (crtc_import(&crtc, &info, video_size_x(), video_size_y(), video_measured_vclock())==0) {
		++y;
		y = test_crtc(x, y, &crtc, 0, 1, 0);
	}

	++y;
	y = test_default_command(x, y);

	return y;
}
Exemple #2
0
void vga_mode_set(const struct vga_regs* regs)
{
	unsigned i;

	vga_state.regs = *regs;

	vga_regs_info_get(&vga_state.regs, &vga_state.info);

	/* misc */
	outportb(VGAREG_MISC_WRITE_DATA, regs->misc);

	/* pel */
	outportb(VGAREG_PEL_MASK, 0xFF);

	/* sequencer reset on */
	vga_outb(VGAREG_SEQ_ADDR, 0, 0x01);

	/* sequencer */
	for (i = 1; i < VGAREG_SEQ_MAX; ++i)
		vga_outb(VGAREG_SEQ_ADDR, i, regs->seq[i]);

	/* sequencer reset off */
	vga_outb(VGAREG_SEQ_ADDR, 0, 0x03);

	/* enable crtc */
	vga_outb(VGAREG_CRTC_ADDR, 0x11, vga_inb(VGAREG_CRTC_ADDR, 0x11) & 0x7F);

	/* crtc */
	for (i = 0; i < VGAREG_CRTC_MAX; ++i)
		vga_outb(VGAREG_CRTC_ADDR, i, regs->crtc[i]);

	/* graphics controller */
	for (i = 0; i < VGAREG_GRACON_MAX; ++i)
		vga_outb(VGAREG_GRACON_ADDR, i, regs->gracon[i]);

	/* attribute controller */
	for (i = 0; i < VGAREG_ATTRCON_MAX; ++i)
		vga_outb(VGAREG_ATTRCON_ADDR, i, regs->attrcon[i]);
}
adv_error vgaline_mode_grab(vgaline_video_mode* mode)
{
	struct vga_regs regs;
	struct vga_info info;

	assert(vgaline_is_active());

	/* get the video mode */
	vga_mode_get(&regs);

	/* import information */
	vga_regs_info_get(&regs, &info);

	/* generate crtc values */
	if (crtc_import(&mode->crtc, &info, info.size_x, info.size_y, info.vert_clock)!=0)
		return -1;

	mode->font_x = info.char_size_x;
	mode->font_y = info.char_size_y;

	crtc_name_set(&mode->crtc, "grabbed");

	return 0;
}