Textausgabe
-
Also ich verzweifle grad an der Textausgabe.
Im Protected Mode (mit C) schaffe ich es nicht die 2. Zeile in die 1. Zeile usw. zu schreiben.
Kann mir jemand helfen?
-
Wie versuchst Du es denn?
-
Eigentlich wollte ich es mit einem Array machen. Das ging aber nicht. Dann stelle ich die Frage anders: Wie mache ich das überhaupt?
-
nldbhcd schrieb:
Eigentlich wollte ich es mit einem Array machen. Das ging aber nicht. Dann stelle ich die Frage anders: Wie mache ich das überhaupt?
Du musst an den Speicher der Stelle 0xB8000 schreiben. Nähere Infos: http://www.lowlevel.eu/wiki/Textausgabe#Protected_Mode
-
Und wie mache ich das in C?
-
((uint16_t*)0xB8000)[position] = zeichen | (attribut<<8);
Du castest die Adresse in einen Pointer, und schreibst dann in sie wie in ein Array.
-
Sorry, dass ich dich jetzt belästige, aber kannst du es besser erklären, ich versteh das noch nicht. Ich bin halt noch kein C-Ass.
-
C nicht richtig können und eine Kernel schreiben wollen
Naja, ich erklärs dir trotzdem mal.
((uint16_t*)0xB8000) [position] = zeichen | (attribute<<8); //Caste die Adresse 0xB8000 zu | greife auf 0xB8000 + posi- | weiße dieser Stelle | und in den höheren 8 bit //einem Zeiger auf einen 16 bit | tion * 2 (16 bit = 2 Byte) | das Zeichen in den | das Attribut zu //breiten unsigned Integer | zu (Pos = y * 80 + x) | unteren 8 bit... |
Das
zeichen | (attribute<<8)
beudeutet im Prinzip- Schiebe das Attribut-Byte (bsp. 0x0F) um 8 bits nach links (0x0F00)
- Mache eine Oder-Verknüpfung vom Zeichen (bsp. 0x20) und geshiftetem Attribut(0x0F00) 0x0F20
- Weise VidMem[pos] diesen Wert zu
-
Du kannst Dir meine Tutorials anschauen oder auch direkt in den aktuellen PrettyOS Code.
http://henkessoft.de/OS_Dev/OS_Dev1.htm (Tutorial)
http://www.c-plusplus.net/forum/252232 (PrettyOS)
-
Kannst du mir dann sagen, wo genau das steht, ich blicke nicht durch.
-
Ja, könnte ich, aber so geht das einfach nicht.
-
-
Suche nach printf(...). Es gibt im Kernel für den Anfang auch eine primitivere Version.