hi leutz,
hab folgendes problem:
Ich schalte in den 320x200x256 Video Mode und
wenn ich in den Textmode 80x25 zurückschalte
hab ich überall punkte. die buchstaben werden
zwar dargestellt allerdings befinden sich darüber und
daneben überall punkte.
Hier der code mit dem ich in den VGAmodus schalte und zurück:
/* == der array mit den Werten für die VGA register... =*/
unsigned char g_80x25_text[] =
{
80,25,0xb8,FALSE,
/* MISC */
0x67,
/* SEQ */
0x03, 0x00, 0x03, 0x00, 0x02,
/* CRTC */
0x5F, 0x4F, 0x50, 0x82, 0x55, 0x81, 0xBF, 0x1F,
0x00, 0x4F, 0x0D, 0x0E, 0x00, 0x00, 0x00, 0x50,
0x9C, 0x0E, 0x8F, 0x28, 0x1F, 0x96, 0xB9, 0xA3,
0xFF,
/* GC */
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0E, 0x00,
0xFF,
/* AC */
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
0x0C, 0x00, 0x0F, 0x08, 0x00
};
/* == der andere array == */
unsigned char g_320x200x256[] =
{
32,20,0xa0,TRUE,
/* 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
};
/* == die function die den modus wechselt == */
void vga_setmode( unsigned char* _mode )
{
unsigned i;
_actual_mode.screenwidth = *_mode++;
_actual_mode.screenheight = *_mode++;
_actual_mode._vga_mem = ( *_mode++ << 12 );
_actual_mode.graphics = *_mode++;
/* write MISCELLANEOUS reg */
outportb(VGA_MISC_REG_WRITE, *_mode++);
/* write SEQUENCER regs */
for(i = 0; i < VGA_NUM_SEQ_REGS; i++)
{
outportb(VGA_SEQ_REG_INDEX, i);
outportb(VGA_SEQ_REG_DATA, *_mode++);
}
/* unlock CRTC registers */
crtc_sendbyte( 0x3, inportb( VGA_CRTC_REG_DATA ) | 0x80 );
crtc_sendbyte( 0x11, inportb( VGA_CRTC_REG_DATA ) & ~0x80 );
/* make sure they remain unlocked */
_mode[0x03] |= 0x80;
_mode[0x11] &= ~0x80;
/* write CRTC regs */
for(i = 0; i < VGA_NUM_CRTC_REGS; i++)
{
crtc_sendbyte( i, *_mode++);
}
/* write GRAPHICS CONTROLLER regs */
for(i = 0; i < VGA_NUM_GC_REGS; i++)
{
grphc_sendbyte( i, *_mode++ );
}
/* write ATTRIBUTE CONTROLLER regs */
for(i = 0; i < VGA_NUM_AC_REGS; i++)
{
(void)inportb(VGA_INSTAT_READ);
attrc_sendbyte( i, *_mode++ );
}
/* lock 16-color palette and unblank display */
(void)inportb(VGA_INSTAT_READ);
outportb(VGA_AC_REG_INDEX, 0x20);
}