Pues eso, esa es mi duda como lo dice el titulo. En VirtualBox logre arrancar con un "bootloader" que programe en assembler, seguiendo una guia que encontre en internet.
El problema es que viendo la guia entera, terminas con mas de 3000 lineas de codigo programadas en assembler, solo para recibir comandos y leer el teclado, algo que en cualquier lenguaje como C puedes hacerlo con algo de 200 lineas o menos.
Asi que la duda seria como compilar un programa en C a un .iso. Nota, el "bootloader" programado en assembler que bootea la maquina debe estar si o si en el mismo .iso o no arranca la maquina. Asi que en teoria, el "bootloader" debe tener una forma de llamar a ese codigo programado en C que leeria y recibiria comandos.
Aca les dejo el codigo del "bootloader" que hice:
Código
EBIOSVIDEOINT equ 16 ;Servicio de video de la BIOS EBIOSTTYOUTPUTFN equ 14 ;Funcion de video TTY (teletipo) de salida de la BIOS cpu 8086 ;La CPU minima donde puede funcionar este codigo Start: mov ax,cs ;carga el segmento de codigo mov ds,ax ;carga el segmento de info. call .10 db 'Hola mundo! ',13,10,0 ;String que se imprimira .10 pop si call PutString ;Llamado a la funcion PutString .20 hlt jmp .20 PutString: mov ah,EBIOSTTYOUTPUTFN ;Funcion de teletipo de la BIOS .10 lodsb or al,al jz .20 int EBIOSVIDEOINT ;llama a la interrupcion de video de la BIOS jmp .10 ;repite hasta que termina ret ;Retorna a el llamado call PutString .20
Como ven, muestra en pantalla la cadena "Hola mundo!" y arranca la pc, y lo mejor, se ejecuta directamente en el procesador y la BIOS
La funcion de leer el teclado y recibir comandos, seria hacerlo en C, si lo hacemos en assembler... ya saben.
Si no me entienden mandemen un PM (mensaje privado)
Saludos
PD: Estoy en Linux Mint, nasm como ensamblador de asm.
ah, y los comandos para convertir el codigo en un archivo .img:
Código:
nasm bootloader.asm -o bootloader.bin
Código:
dd if=/dev/zero of=floppy.img bs=1024 count=1440
dd if=bootloader.bin of=floppy.img seek=0 count=1 conv=notrunc
Solo funciona para Linux, en Windows, no tengo idea como se haria
PD2: Lei por ahi en una pagina de StackOverflow que alguien dijo que "tecnicamente cualquier programa que se ejecute sin SO es un SO".
El texto original estaba en ingles