Autor Thema: Mehtzeilige ausgabe eines C Kernels  (Gelesen 6791 mal)

TetraOwl

  • Beiträge: 2
    • Profil anzeigen
Gespeichert
« am: 25. May 2018, 09:02 »
Hallo,
ich hoffe ich bin hier im richtigen Unterforum.
Ich halte mich grade an diese Anleitung http://www.lowlevel.eu/wiki/Teil_4_-_Hello_World.
Allerdings verstehe ich nicht wie ich die Ausgabe mehrzeilig mache.
Viele Grüße und Danke im Vorraus
TetraOwl

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 25. May 2018, 17:10 »
Hi,

der Video-RAM im Textmodus besteht aus linear 80x25 Zeichen (jedes Zeichen belegt zwei Byte, also insgesamt 80*25*2 = 4000 Byte). Das heißt, die ersten 80 Zeichen entsprechen Zeile 0 (die erste Zeile), die zweiten 80 Zeichen entsprechen Zeile 1 (die zweite Zeile), und so weiter.

Aus den Zeichenkoordinaten (x,y) berechnest du die Zeichenadresse mit der Formel (y*80 + x).
Wenn dir nicht klar ist, wie man darauf kommt, dann male dir das mal auf (Kästchenpapier). :-)

Für das Tutorial brauchst du aber die Byteadressen. Da jedes Zeichen zwei Byte groß ist, ist die Byteadresse einfach die Zeichenadresse mal zwei. Das Attributbyte (0x07 für "Hellgrau auf Schwarz") kommt ein Byte dahinter (also Byteadresse plus eins).

In einem printf benutzt man üblicherweise das Zeichen '\n', um eine neue Zeile anzufangen. Dazu musst du natürlich erstmal wissen, wo du gerade bist - am einfachsten definierst du dir zwei Variablen cursor_x und cursor_y, die angeben, wo das nächste Zeichen auftauchen soll. Immer, wenn du ein Zeichen geschrieben hast, aktualisierst du diese Variablen. Wenn du am Bildschirmende angekommen bist, musst du scrollen. Dazu verschiebst du einfach alle Zeichen (außer der ersten Zeile) um eine Zeile nach oben und machst die letzte Zeile wieder leer (z.B. 80 Leerzeichen reinschreiben).

Hoffe, das hilft. :-)

TetraOwl

  • Beiträge: 2
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 25. May 2018, 21:22 »
Hallo,
vielen Dank für deine Antwort. Hat funktioniert und ich habe es nun verstanden.

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 26. May 2018, 15:06 »
Prima. ;-)

 

Einloggen