Textausgabe — Änderungen 7015 → 7358

Zeile 48: Zeile 48:
  
 
<c>
 
<c>
−
void printchar(u8 chr,u8 color,u8 x,u8 y) {
+
void printchar(uint8_t chr, uint8_t color, uint8_t x, uint8_t y)
−
  u16 *off = (u16*)0xB8000;
+
{
−
  // berechnen der Adresse
+
  uint16_t* off = (uint16_t*)0xB8000;
−
  off += y*80+x;  // eine Multiplikation mit 2 darf hier nicht erfolgen, da off vom type u16 ist
+
  // berechnen der Adresse
−
  // setzen des zeichens + attributebyte
+
  off += y * 80 + x;  // eine Multiplikation mit 2 darf hier nicht erfolgen, da off vom type uint16_t ist
−
  *off = (((u16)color)<<8)|chr;
+
  // setzen des zeichens + attributebyte
−
}
+
  *off = (((uint16_t)color) << 8) | chr;
 +
}
 
</c>
 
</c>
  
 
Nun folgt die Erklärung:
 
Nun folgt die Erklärung:
−
Mit der 1. Zeile wird ein Pointer auf den Textspeicher erzeugt. Der Dateityp ist u16, also 2byte, damit wir das Zeichen und das Attributebyte gleichzeitig schreiben können (geht einfach schneller). Nun wird die Adresse ausgerechnet, mit der oben genannten Formel. Hätten wird vorhin u8 benutzt müssten wir jetzt noch mit 2 multiplizieren, da ja jedes Zeichen 2 Byte benutzt. Das Setzen des Zeichens machen wir, indem wir einfach das Attribute auf 16 Bit erweitern, dann eine Linksverschiebung von 8 Bit vornehmen und per logischen Oder mit dem Zeichenbyte verknüpfen.
+
Mit der 1. Zeile wird ein Pointer auf den Textspeicher erzeugt. Der Dateityp ist uint16_t, also 2byte, damit wir das Zeichen und das Attributebyte gleichzeitig schreiben können (geht einfach schneller). Nun wird die Adresse ausgerechnet, mit der oben genannten Formel. Hätten wird vorhin uint8_t benutzt müssten wir jetzt noch mit 2 multiplizieren, da ja jedes Zeichen 2 Byte benutzt. Das Setzen des Zeichens machen wir, indem wir einfach das Attribute auf 16 Bit erweitern, dann eine Linksverschiebung von 8 Bit vornehmen und per logischen Oder mit dem Zeichenbyte verknüpfen.
  
 
Achtung: Das Attributebyte kommt zwar immer nach dem Zeichenbyte, aber wir benutzen hier ein Word und arbeiten ja auf einem [http://de.wikipedia.org/wiki/Byte-Reihenfolge Little-Endian]-System.
 
Achtung: Das Attributebyte kommt zwar immer nach dem Zeichenbyte, aber wir benutzen hier ein Word und arbeiten ja auf einem [http://de.wikipedia.org/wiki/Byte-Reihenfolge Little-Endian]-System.
Zeile 78: Zeile 79:
  
 
<c>
 
<c>
−
void displaycursor(u8 col,u8 row) {
+
void displaycursor(uint8_t col, uint8_t row)
−
  u16 tmp;
+
{
−
  tmp = row*VIDEOTEXT_WIDTH+col;
+
  uint16_t tmp;
−
  outb(0x3D4,14);
+
  tmp = row * VIDEOTEXT_WIDTH + col;
−
  outb(0x3D5,tmp>>8);
+
  outb(0x3D4,14);
−
  outb(0x3D4,15);
+
  outb(0x3D5,tmp >> 8);
−
  outb(0x3D5,tmp);
+
  outb(0x3D4,15);
−
}
+
  outb(0x3D5,tmp);
 +
}
 
</c>
 
</c>
  
Zeile 91: Zeile 93:
  
 
<c>
 
<c>
−
void removecursor() {
+
void removecursor()
−
  outb(0x3D4,14);
+
{
−
  outb(0x3D5,0x07);
+
  outb(0x3D4,14);
−
  outb(0x3D4,15);
+
  outb(0x3D5,0x07);
−
  outb(0x3D5,0xD0);
+
  outb(0x3D4,15);
−
}
+
  outb(0x3D5,0xD0);
 +
}
 
</c>
 
</c>