<kstdio.h>
Originalmente, en la etapa de diseño de Sierra Kernel se había decidido que mucha parte del código de kernel se iba a mantener en una librería de C separada a la que solo pudiera tener acceso el kernel y no se pudiera usar en el espacio de usuario. Esto se había decidido para reducir la cantidad de código ejecutándose en el espacio de kernel al mínimo para así erradicar errores o bugs. Este fue el modelo que seguí cuando empecé a trabajar en el kernel, pero más tarde me di cuenta de que por razones técnicas y de tiempo, iba a tener que suspender ese diseño y migrar lo que llevaba de la librería a código dentro del kernel, pero igual este código mantiene la estructura de librería y más tarde se va a implementar este modelo de diseño. <kstdio.h> era un header de la librería que mencione previamente (y fue migrado a código del kernel). Este header incluye todas las funciones de i/o (entrada y salida) del kernel, y debe de ser incluído cada vez que estas son utilizadas. Además también incluye los tipos de datos estándar del kernel (ej. u32int) y debe de ser incluído en el código cada vez que estos sean utilizados.
Las funciones que se incluyen en este header son las siguientes:
- outb: Manda un byte al puerto especificado. Funciona a través de la función de lenguaje ensamblador 'outb':
asm volatile ("outb %1, %0" : : "dN" (port), "a" (value));
- inb: Recibe un byte de tipo u8int del puerto especificado, funciona de la misma forma que outb:
asm volatile("inb %1, %0" : "=a" (ret) : "dN" (port));
- inw: Recibe un byte de tipo u16int del puerto especificado, funciona de forma casi identica a inb:
asm volatile ("inw %1, %0" : "=a" (ret) : "dN" (port));
Estas 3 funciones son definidas en el archivo 'io.c'.
- kputc(char c): Escribe un carácter a la pantalla.
- kprintf(char *c): Escribe un string ASCII a la pantalla.
- decprint(u32int n): Escribe un valor decimal a la pantalla.
- hexprint(u32int n): Escribe un valor hexadecimal a la pantalla.
- move_cursor(): Posiciona el cursor en la pantalla.
- scroll(): Desliza la pantalla una línea cuando esta se llena.
Veremos el funcionamiento de estas funciones más adelante. En este archivo también son definidos los strings que representan cada color de VGA.