Mi primera «BIOS» o algo así

Despues de una 1 hora y media de intentar crear mi “bios” lo logre fue complejo, si, y eso que me ayude de este video, me costo asi que vamos a pasar a la explicación:

Mini Teoria

Aver lo que vamos a usar para imprimir cosas en pantalla es un puerto que usa QEMU que es el “0xe9”, es un puerto exclusivo de QEMU para la entrada y salida de datos para Depurar y el que voy a usar principalmente para escribir los bytes

Practica

Ahora vamos a pasar a lo bueno, gracias al video que previamente mencione se algunas cosas, el comando “hlt” que es para terminar el programa que lo usare dentro de poco. Y el programa rizin que es un editor hex y desamblador, y ps es lo que utilizare para escribir la bios.

Para empezar jugue un poco con el “isa-debugcon” que es el argumento que le dice a QEMU que se esta depurando.

qemu-system-x86_64 -device isa-debugcon,chardev=mimami -chardev stdio,id=mimami

Con este comando hace que se ejecute QEMU en modo depuracion, con Ctrl+Alt+2 se pasa al monitor de depuracion que se puede inyectar directamente codigo ahi, con el comando:

o/x 0xe9 0x48

con la letra “x” decimos que lo que viene es en formato hexadecimal, con el “0xe9” como explique anteriormente es para que el siguiente bytes que vamos a colocar salga por ese puerto, y por ultimo “0x48” que es basicamente “H” en ascii.

Screenshot_2025-10-14_23-28-1760498909

Como se puede ver en la imagen es lo que pasa :face_exhaling:.

Ahora iniciado en Rizin, ejecute el comando “o+” que para crear/abrir un archivo, en mi caso cree el “bios.img” con un espacio de 4M (4 Megasbytes) asignados con el comando “r 4M”. Ahora con el comando V abro de manera visual el archivo “bios.img” como un editor hexadecimal cualquiera, con la tecla G mayuscula me desplazo a la ultima dirección del archivo. que es el “0x003ffff0”.

Como el video se desplaza a esa direccion yo tambien me desplaze, pero como mi meta era escribir “hola” debes de “hi” decidi irme un direccion mas arriba “0x003fffe0” ahi procedi con el comando “wa” a escribir dicha palabra.

wa "mov al, 0x48" "out 0xe9, al" "mov al, 0x6F" "out 0xe9, al" "mov al, 0x6C" "out 0xe9, al" "mov al, 0x61" "out 0xe9, al" "hlt"

Por encima, lo que hace es escribir cada caracter en el registro “al” y ahi pasar ese mismo registro por el puerto “0xe9” y ya a lo ultimo el comando “hlt” que es para terminar el programa.

Screenshot_2025-10-14_23-49-1760500160

Asi se veia, iba todo perfecto, para ejecutar mi bios debes de usar el comando anterior busque en internet y es mas facil con este

qemu-system-x86_64 -bios ./bios.img -debugcon stdio -serial none

Que es basicamente el comando anterior pero mas simplificado.

Problema

Para lo mas experimentado creo que ya viero el problema de todo, deje muy poco espacio al final de la bios, asi que hacia que se desbordara a ejecutar la bios y no mostraba nada. Tuve un buen rato buscando en internet hasta que me rendi y decidi preguntarle a Chatgpt que fue el que me dio la solucion a mi novatada.

Cree un segunda bios

Screenshot_2025-10-14_23-54-1760500483

Y ahora si, si imprimio lo que tenia que imprimir

Screenshot_2025-10-14_23-56-1760500586

Fue un gran suspiro ver que todo estaba funcionando.

Metas

Ya que tengo una base de donde investigar y ademas experimentar tengo una meta. Lo proximo que voy a decir es completamente enserio


Quiero que se renderice esta imagen en pantalla. Leyendo en foros puedo usar VGA para mi cometido asi que pronto estare actualizando esta publicación para informales de mi novatas y pendejadas que vaya haciendo.

Disculpen por las multiples fallas ortograficas que muy probablemente haya en este post, pido perdon de ante mano y cualquier cosa que me haya equivocado o entendido mal quedaria encantado de que me corrigieran. Gracias por leer.

4 Me gusta

Bueno, antes que nada el BIOS es un programa de arraque, hacer uno no se llama hacer una BIOS, se llama programa de arranque y para que lo sea, debe cumplir esa función y tu programa no parece que realice ninguna función, parece más una clase de «hola mundo» con un editor hexadecimal en un fichero de 4M en el formato .img.

Te invito a estudiar cómo funcionan los programas de arranque reales, para que sepas qué es lo básico que necesitan tener y no solo algo que parece solo imprimir un «hola».

Así que a continuación te comparto un perfecto ejemplo:

5 Me gusta

Aunque también está la opción de crear una terminal desde la bios. Sin necesidad de iniciar un sistema. Incluye correr videojuegos sin sistema operativo…

Lo de la terminal sin sistema es el comienzo de Linux (antes de juntarse con gnu).

3 Me gusta