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.

Como se puede ver en la imagen es lo que pasa
.
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.
![]()
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

Y ahora si, si imprimio lo que tenia que imprimir

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.
