Autor Thema: Probleme mit dem VGA textmodus  (Gelesen 4502 mal)

__OS_coder

  • Beiträge: 69
    • Profil anzeigen
Gespeichert
« am: 27. July 2005, 15:26 »
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);


}

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 28. July 2005, 16:14 »
Du solltest eventuell mal den Grafikspeicher leeren, also alle Bytes auf 0 setzen, bevor du in den Textmodus schaltest.

Allerdings kenne ich mich mit den VGA Registern usw. nicht aus, das ist also nur eine Vermutung.

xormore

  • Beiträge: 25
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 31. July 2005, 18:45 »
ich vermute das liegt daran, dass der font beschädigt ist oder irgendwie falsch geladen.

dieser code (vga.c, Zeile 489) hier, lädt z.b. die font-table wieder neu..

__OS_coder

  • Beiträge: 69
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 13. August 2005, 18:47 »
yo, natürlich...
ich glaub es liegt wirklich an den fonts...
Die hab ich ja nich neu geladen...

Allerdings habe ich gehört die Fonts werden
nur von BIOS interrupts benutzt, oder?!?!

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 13. August 2005, 22:57 »
in den grafikmodi ja. da wird ja bei der ausgabe von zeichen jeder pixel des buchstabens einzeln gesetzt. im textmodus würd ich nein sagen, denn z.b. im protected mode spielt das bios ja nicht mehr mit. anscheinend liest die grafikkarte da automatisch die zeichen z.b. aus dem bereich 0xB8000 aus, sucht den entsprechenden eintrag in seiner eigenen font-table (die ja auch irgendwo in den ram eingeblendet sein kann) und arbeitet damit weiter. aber ich kann hier nur spektulieren.
Dieser Text wird unter jedem Beitrag angezeigt.

__OS_coder

  • Beiträge: 69
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 22. August 2005, 20:27 »
Ich weiß, des kommt jetzt 'n bissl spät abba
Wie lade ich die font-tables neu??
Und an welche addy gehören die??

__OS_coder

  • Beiträge: 69
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 25. August 2005, 20:33 »
ooopps, hat sich erledigt...
Da oben war ja der code *g* old confused

__OS_coder

  • Beiträge: 69
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 25. August 2005, 20:41 »
yo es lag an den font-tables!
Ex funktioniert juhuu  :shock:
thx to all!

 

Einloggen