Bueno, hace unos años empecé a interesarme por la informática y me documenté, así que los conceptos generales los tengo bastante aprendidos. Más tarde, empecé a programar en C. Pero un día me planteé la posibilidad de crear un OS muy simple. Sé que es muy difícil y complicado y más para un novato como yo, así que no crea que lo consiga. Lo quiero intentar básicamente para aprender.
Según vi, tendría que programarlo en assembler y en C. He buscado información, estoy leyendo algunos libros (por ejemplo, estoy empezando Sistemas Operativos de Tanenbaum) y tutoriales, pero tengo las siguientes dudas:
-Si assembler es diferente para cada arquitectura de procesador, ¿significa que si hiciera un OS tendría que hacer una versión diferente para cada una? ¿No hay un assembler válido para todos los procesadores y ordenador? Si no es así, ¿podría programar el OS muy poquito en assembler y hacerlo casi todo en C para sólo tenga que modificar la pequeña parte del assembler porque C es portable? Es que, por ejemplo, cuando yo me descargo Ubuntu, sólo me pide si el procesador 32 bits o de 64, nada más. Si hiciera un OS de 32 bits, ¿sólo tendría una versión?
-¿Es recomendable la arquitectura ewa?
-Para programar en C, ¿cómo tendría que hacerlo? Porque si hago el OS de cero, no tengo ni compilador ni librerías de nada. ¿Tendría que hacer todo esto de nuevo? ¿Las librerías se programan en assembler?
-¿En qué formato debe estar el "arrancable" de un OS (es decir, lo que pones en un CD de arranque)? Porque en Ubuntu he hecho lo siguiente: he copiado un pequeño código de Hello World en assembler, lo he guardado .asm, con nasm lo he ensamblado y ahora es un archivo .o. ¿Es suficiente así para que arranque? ¿O de .o lo tengo que transformar a .iso o .img? Si es así, ¿cómo lo hago?
-Cuando programo un programa para ponerlo "de arranque", de modo que se muestre sin haber entrado en ningún OS, ¿qué tengo que hacer, un sólo programa que contenga ASM y C o un programa en ASM que llame a otro en C?
-¿Cómo se hace para incluir C en un código ASM? ¿Las librerías, dónde debo ponerlas? ¿Al principio del programa? Porque un printf no puedo hacerlo.
Sé que tengo demasiadas dudas, y seguramente la mayor parte de ellas estúpidas porque me debo estar haciendo un cacao tremendo con toda la información que estoy mirando. Pero seguro que por aquí hay alguien capaz de ayudarme .