Code: Select all
boutb( int n, int iport, int dport, char *v ) {
int i;
if (iport == (dport-1)) {
for ( i = 0 ; i<n; i++) {
outw( iport, i | ((*v++)<<8) );
}
} else {
for ( i = 0 ; i<n; i++) {
outb( iport, i );
outb( dport, *v++ );
}
}
}
char VGA12Gen[] = { 0xE3, 0x04 };
char VGA12Seq[] = { 0x1, 0x1, 0xf, 0x00, 0x06 }; // 5
char VGA12Crtc[] = { 0x5F, 0x4F, 0x50, 0x82, 0x54, 0x80, 0x0B, 0x3E,
0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59,
0xEA, 0x8C, 0xDF, 0x28, 0x00, 0xE7, 0x04, 0xE3, 0xFF }; // 25
char VGA12GC[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0F, 0xFF }; // 9
char VGA12Attr[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
0x01, 0x00, 0x0F, 0x00, 0x00 }; // 21
int main() {
int q;
q = inb( 0x3da );
q = q; // force compiler to perform the inb
outb(0x3C0, 0); // disable palette
outb(0x3C2, VGA12Gen[0]);
outb(0x3D4, 0x11); outb(0x3D5, 0); // unprotect crtc regs 0-7
// Reset and set sequencer regs
boutb(5, 0x3C4, 0x3C5, VGA12Seq );
// set misc out reg
outb(0x3C2, VGA12Gen[0]);
outb( 0x3c4, 0 );
outb( 0x3c5, 3 ); // seq enable
// set all crtc regs
boutb(25, 0x3D4, 0x3D5, VGA12Crtc);
// set all graphics controller regs
outb( 0x3CC, 0); outb( 0x3CA, 1);
boutb(9, 0x3CE, 0x3CF, VGA12GC);
// set all attribute regs
q = inb(0x3DA);
q = q; // reset flip/flop
boutb( 21, 0x3C0, 0x3C0, VGA12Attr);
outb( 0x3C0, 0x20 ); // enable palette
return 0;
}