Exemplo n.º 1
0
/* mode 13h functions */
static void m13h_setmode( void )
{
	int i;
	uint8_t regs[] =
	{
		/* MISC */
		0x63,
		/* SEQ */
		0x03, 0x01, 0x0F, 0x00, 0x0E,
		/* CRTC */
		0x5F, 0x4F, 0x50, 0x82, 0x54, 0x80, 0xBF, 0x1F,
		0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
		0x9C, 0x0E, 0x8F, 0x28, 0x40, 0x96, 0xB9, 0xA3,
		0xFF,
		/* GC */
		0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
		0xFF,
		/* AC */
		0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
		0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
		0x41, 0x00, 0x0F, 0x00, 0x00,
	};
	int rg = 0;
	uint8_t reg;
	/* MISC */
	outport_b(VGA_MSCOUTW,regs[rg]);
	rg++;
	/* SEQ */
	for ( i=0; i<5; i++ )
		setvgareg(VGA_SEQ,i,regs[rg++]);
	/* need to unlock CRTC here */
	reg = getvgareg(VGA_CRTC,VGA_CRTC_EHBLNK);
	reg |= 0x80;
	setvgareg(VGA_CRTC,VGA_CRTC_EHBLNK,reg);
	reg = getvgareg(VGA_CRTC,VGA_CRTC_VTRTEN);
	reg &= ~0x80;
	setvgareg(VGA_CRTC,VGA_CRTC_VTRTEN,reg);
	/* keep 'em unlocked */
	regs[rg+VGA_CRTC_EHBLNK] |= 0x80;
	regs[rg+VGA_CRTC_VTRTEN] &= ~0x80;
	/* CRTC */
	for ( i=0; i<25; i++ )
		setvgareg(VGA_CRTC,i,regs[rg++]);
	/* GC */
	for ( i=0; i<9; i++ )
		setvgareg(VGA_GC,i,regs[rg++]);
	/* AC */
	for ( i=0; i<9; i++ )
	{
		inport_b(VGA_INSTAT1);
		outport_b(VGA_AC_I,i);
		outport_b(VGA_AC_W,regs[rg++]);
	}
	/* unblank display and lock palette */
	inport_b(VGA_INSTAT1);
	outport_b(VGA_AC_I,0x20);
	/* clear video memory */
	memset(m13h_mem,0x00,64000);
}
Exemplo n.º 2
0
/* get the value of a VGA register */
uint8_t getvgareg( uint16_t port, uint8_t index )
{
	uint8_t save = inport_b(port);
	outport_b(port,index);
	uint8_t data = inport_b(port+1);
	outport_b(port,save);
	return data;
}
Exemplo n.º 3
0
static void m13h_setpal( uint8_t* pal )
{
	int i;
	for ( i=0; i<256; i++ )
	{
		outport_b(VGA_DAC_ADWM,i);
		outport_b(VGA_DAC_DATA,(*pal++));
		outport_b(VGA_DAC_DATA,(*pal++));
		outport_b(VGA_DAC_DATA,(*pal++));
	}
}
Exemplo n.º 4
0
static void m13h_getpal( uint8_t* pal )
{
	int i;
	for ( i=0; i<256; i++ )
	{
		outport_b(VGA_DAC_ADRM,i);
		*(pal++) = inport_b(VGA_DAC_DATA);
		*(pal++) = inport_b(VGA_DAC_DATA);
		*(pal++) = inport_b(VGA_DAC_DATA);
	}
}
Exemplo n.º 5
0
static INLINE
GrColor readpixel(GrFrame *c,int x,int y)
{
    char *ptr;
    unsigned mask, pixval;
    GRX_ENTER();
    ptr = &SCRN->gc_baseaddr[0][FOFS(x,y,SCRN->gc_lineoffset)];
    mask= 0x80U >> (x &= 7);
    setup_far_selector(SCRN->gc_selector);
    outport_w(VGA_GR_CTRL_PORT,((3 << 8) | VGA_RD_PLANE_SEL_REG));
    pixval = (peek_b_f(ptr) & mask);
    outport_b(VGA_GR_CTRL_DATA,2);
    pixval = (peek_b_f(ptr) & mask) | (pixval << 1);
    outport_b(VGA_GR_CTRL_DATA,1);
    pixval = (peek_b_f(ptr) & mask) | (pixval << 1);
    outport_b(VGA_GR_CTRL_DATA,0);
    pixval = (peek_b_f(ptr) & mask) | (pixval << 1);
    lastcolor = (-1L);
    GRX_RETURN((GrColor)(pixval >> (7 - x)));
}
Exemplo n.º 6
0
void serial_on( uint16_t dev )
{
	outport_b(dev+1,0x00);
	outport_b(dev+3,0x80);
	outport_b(dev,0x03);
	outport_b(dev+1,0x00);
	outport_b(dev+3,0x03);
	outport_b(dev+2,0xC7);
	outport_b(dev+4,0x0B);
}
Exemplo n.º 7
0
void serial_chr( uint16_t dev, char c )
{
	while ( serial_transmit_empty(dev) == 0 );
	outport_b(dev,c);
}
Exemplo n.º 8
0
/* start up IDT */
static void init_idt( void )
{
	idt_ptr.limit = sizeof(idt_entry_t)*256-1;
	idt_ptr.base = (uint32_t)&idt_ents;
	/* we have to zero everything out */
	memset(&idt_ents[0],0,sizeof(idt_entry_t)*256);
	irq_clearhandlers();
	isr_clearhandlers();
	/* remap PICs so IRQs use IDT gates 32-47 */
	/* this code will look confusing, sorry for the inconvenience */
	printk(" Remapping PIC (IRQs on IDT gates 32-47)\n");
	outport_b(0x20,0x11);
	outport_b(0xA0,0x11);
	outport_b(0x21,0x20);
	outport_b(0xA1,0x28);
	outport_b(0x21,0x04);
	outport_b(0xA1,0x02);
	outport_b(0x21,0x01);
	outport_b(0xA1,0x01);
	outport_b(0x21,0x00);
	outport_b(0xA1,0x00);
	/* setting up gates */
	/* ISRs */
	printk(" Interrupt Service Routines\n");
	idt_setgate(0,(uint32_t)isr0,0x08,0x8E);
	idt_setgate(1,(uint32_t)isr1,0x08,0x8E);
	idt_setgate(2,(uint32_t)isr2,0x08,0x8E);
	idt_setgate(3,(uint32_t)isr3,0x08,0x8E);
	idt_setgate(4,(uint32_t)isr4,0x08,0x8E);
	idt_setgate(5,(uint32_t)isr5,0x08,0x8E);
	idt_setgate(6,(uint32_t)isr6,0x08,0x8E);
	idt_setgate(7,(uint32_t)isr7,0x08,0x8E);
	idt_setgate(8,(uint32_t)isr8,0x08,0x8E);
	idt_setgate(9,(uint32_t)isr9,0x08,0x8E);
	idt_setgate(10,(uint32_t)isr10,0x08,0x8E);
	idt_setgate(11,(uint32_t)isr11,0x08,0x8E);
	idt_setgate(12,(uint32_t)isr12,0x08,0x8E);
	idt_setgate(13,(uint32_t)isr13,0x08,0x8E);
	idt_setgate(14,(uint32_t)isr14,0x08,0x8E);
	idt_setgate(15,(uint32_t)isr15,0x08,0x8E);
	idt_setgate(16,(uint32_t)isr16,0x08,0x8E);
	idt_setgate(17,(uint32_t)isr17,0x08,0x8E);
	idt_setgate(18,(uint32_t)isr18,0x08,0x8E);
	idt_setgate(19,(uint32_t)isr19,0x08,0x8E);
	idt_setgate(20,(uint32_t)isr20,0x08,0x8E);
	idt_setgate(21,(uint32_t)isr21,0x08,0x8E);
	idt_setgate(22,(uint32_t)isr22,0x08,0x8E);
	idt_setgate(23,(uint32_t)isr23,0x08,0x8E);
	idt_setgate(24,(uint32_t)isr24,0x08,0x8E);
	idt_setgate(25,(uint32_t)isr25,0x08,0x8E);
	idt_setgate(26,(uint32_t)isr26,0x08,0x8E);
	idt_setgate(27,(uint32_t)isr27,0x08,0x8E);
	idt_setgate(28,(uint32_t)isr28,0x08,0x8E);
	idt_setgate(29,(uint32_t)isr29,0x08,0x8E);
	idt_setgate(30,(uint32_t)isr30,0x08,0x8E);
	idt_setgate(31,(uint32_t)isr31,0x08,0x8E);
	/* IRQs */
	printk(" Interrupt Requests\n");
	idt_setgate(32,(uint32_t)irq0,0x08,0x8E);
	idt_setgate(33,(uint32_t)irq1,0x08,0x8E);
	idt_setgate(34,(uint32_t)irq2,0x08,0x8E);
	idt_setgate(35,(uint32_t)irq3,0x08,0x8E);
	idt_setgate(36,(uint32_t)irq4,0x08,0x8E);
	idt_setgate(37,(uint32_t)irq5,0x08,0x8E);
	idt_setgate(38,(uint32_t)irq6,0x08,0x8E);
	idt_setgate(39,(uint32_t)irq7,0x08,0x8E);
	idt_setgate(40,(uint32_t)irq8,0x08,0x8E);
	idt_setgate(41,(uint32_t)irq9,0x08,0x8E);
	idt_setgate(42,(uint32_t)irq10,0x08,0x8E);
	idt_setgate(43,(uint32_t)irq11,0x08,0x8E);
	idt_setgate(44,(uint32_t)irq12,0x08,0x8E);
	idt_setgate(45,(uint32_t)irq13,0x08,0x8E);
	idt_setgate(46,(uint32_t)irq14,0x08,0x8E);
	idt_setgate(47,(uint32_t)irq15,0x08,0x8E);
	/* Syscalls */
	printk(" Syscalls\n");
	idt_setgate(128,(uint32_t)isr128,0x08,0x8E);
	/* flush~ */
	printk(" Flushing IDT\n");
	idt_flush((uint32_t)&idt_ptr);
}