>>217
>voy a ver si puedo dividir esto en tareas simples
Luego de consultar un par de artículos (los cuales dejare mas abajo
para su deleite), lo que se necesita para tener un sistema operativo mínimamente funcional son dos cosas:
1. Un loader que entre al modo protegido y luego llame a una función.
2. La función en cuestión.
Para lo primero solo encontré código en Assembler y debido a que Copilot no lo reconoce, entonces no pude generar uno de estos (si alguien sabe como hacerlo en C o C++ avise).
La función principal no fue tan difícil (aunque no estuvo libre de desafíos). Como de costumbre les dejo el código:
#include <types.h>
void *video = (void *)0xB8000;
void kekmain()
{
*(char *)video = 'B';
*(char *)(video + 1) = 'i';
*(char *)(video + 2) = 'e';
*(char *)(video + 3) = 'n';
*(char *)(video + 4) = 'v';
*(char *)(video + 5) = 'e';
*(char *)(video + 6) = 'n';
*(char *)(video + 7) = 'd';
*(char *)(video + 8) = 'o';
*(char *)(video + 9) = ' ';
*(char *)(video + 10) = 'a';
*(char *)(video + 11) = ' ';
*(char *)(video + 12) = 'k';
*(char *)(video + 13) = 'e';
*(char *)(video + 14) = 'k';
*(char *)(video + 15) = 'O';
*(char *)(video + 16) = 'S';
*(char *)(video + 17) = ',';
*(char *)(video + 18) = ' ';
*(char *)(video + 19) = 'e';
*(char *)(video + 20) = 'l';
*(char *)(video + 21) = ' ';
*(char *)(video + 22) = 'm';
*(char *)(video + 23) = 'e';
*(char *)(video + 24) = 'j';
*(char *)(video + 25) = 'o';
*(char *)(video + 26) = 'r';
*(char *)(video + 27) = ' ';
*(char *)(video + 28) = 'O';
*(char *)(video + 29) = 'S';
*(char *)(video + 30) = ' ';
*(char *)(video + 31) = 'd';[Expand Post]
*(char *)(video + 32) = 'e';
*(char *)(video + 33) = ' ';
*(char *)(video + 34) = 'l';
*(char *)(video + 35) = 'a';
*(char *)(video + 36) = ' ';
*(char *)(video + 37) = 'h';
*(char *)(video + 38) = 'i';
*(char *)(video + 39) = 's';
*(char *)(video + 40) = 't';
*(char *)(video + 41) = 'o';
*(char *)(video + 42) = 'r';
*(char *)(video + 43) = 'i';
*(char *)(video + 44) = 'a';
*(char *)(video + 45) = ' ';
*(char *)(video + 46) = 'e';
*(char *)(video + 47) = 's';
*(char *)(video + 48) = 'c';
*(char *)(video + 49) = 'r';
*(char *)(video + 50) = 'i';
*(char *)(video + 51) = 't';
*(char *)(video + 52) = 'o';
*(char *)(video + 53) = ' ';
*(char *)(video + 54) = 'p';
*(char *)(video + 55) = 'o';
*(char *)(video + 56) = 'r';
*(char *)(video + 57) = ' ';
*(char *)(video + 58) = 'u';
*(char *)(video + 59) = 'n';
*(char *)(video + 60) = ' ';
*(char *)(video + 61) = 'c';
*(char *)(video + 62) = 'h';
*(char *)(video + 63) = 'a';
*(char *)(video + 64) = 'n';
*(char *)(video + 65) = 'e';
*(char *)(video + 66) = 'r';
*(char *)(video + 67) = 'o';
*(char *)(video + 68) = ' ';
*(char *)(video + 69) = 'y';
*(char *)(video + 70) = ' ';
*(char *)(video + 71) = 's';
*(char *)(video + 72) = 'u';
*(char *)(video + 73) = ' ';
*(char *)(video + 74) = 'i';
*(char *)(video + 75) = 'n';
*(char *)(video + 76) = 't';
*(char *)(video + 77) = 'e';
*(char *)(video + 78) = 'l';
*(char *)(video + 79) = 'i';
*(char *)(video + 80) = 'g';
*(char *)(video + 81) = 'e';
*(char *)(video + 82) = 'n';
*(char *)(video + 83) = 'c';
*(char *)(video + 84) = 'i';
*(char *)(video + 85) = 'a';
*(char *)(video + 86) = ' ';
*(char *)(video + 87) = 'a';
*(char *)(video + 88) = 'r';
*(char *)(video + 89) = 't';
*(char *)(video + 90) = 'i';
*(char *)(video + 91) = 'f';
*(char *)(video + 92) = 'i';
*(char *)(video + 93) = 'c';
*(char *)(video + 94) = 'i';
*(char *)(video + 95) = 'a';
*(char *)(video + 96) = 'l';
*(char *)(video + 97) = '.';
*(char *)(video + 98) = '\n';
*(char *)(video + 99) = '¿';
*(char *)(video + 100) = 'Y';
*(char *)(video + 101) = ' ';
*(char *)(video + 102) = 'a';
*(char *)(video + 103) = 'h';
*(char *)(video + 104) = 'o';
*(char *)(video + 105) = 'r';
*(char *)(video + 106) = 'a';
*(char *)(video + 107) = ' ';
*(char *)(video + 108) = 'q';
*(char *)(video + 109) = 'u';
*(char *)(video + 110) = 'e';
*(char *)(video + 111) = '?';
*(char *)(video + 112) = '\n';
}
>inb4 ¿Que es esta mierda?
Un sistema operativo super básico que hace lo siguiente:
* Acceder a la memoria de vídeo (aunque me llevo un rato hasta lograr que Copilot creara el puntero en cuestión).
* Define la función kekmain().
* Escribe una pendejada en la pantalla accediendo a la memoria de vídeo directamente.
Por cierto, lo de "el mejor OS de la historia" me lo sugirió Copilot, pero lo deje por que me pareció bonito.
>inb4 muh ¿Y por que no usaste printf o similar?
Por que según leí esas son cosas que dependen del sistema operativo, pero al estar haciendo uno desde cero entonces te toca a ti definir esas funciones.
>inb4 ¿No habría sido mas fácil hacer un bucle sobre un puntero char en lugar de meter los caracteres uno por uno?
Si, pero a Copilot le dio retraso y lo hizo así, aunque supongo que primero podría haber definido un puntero con la frase yo mismo y luego decirle que itere sobre el mismo para crear el bucle. Solo para aclarar, no me genero toda la frase de una, sino que cada 4 o 5 lineas metía cualquier letra y lo tenia que ir corrigiendo.
>inb4 ¿Funciona?
Ni puta idea, pero lo mas probable es que no. Si quieren pueden intentar compilarlo con lo que se explica en alguno de estos artículos:
https://blog.desdelinux.net/emulando-a-linus-torvalds-crea-tu-propio-sistema-operativo-desde-0-i/
https://www.elladodelmal.com/2013/09/prescinde-de-tu-sistema-operativo-si.html
>>219
Mas tarde lo pruebo, aunque se me hace que solo va a generar el código para dibujar el gráfico con alguna librería random.