Duda no resuelta, y de paso idea abandonada Pero si saben como responder, aganlo igual me sirvePues 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:
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:
nasm bootloader.asm -o bootloader.bin
Eso de arriba ensambla en codigo no en un .o si no en un .bin
dd if=/dev/zero of=floppy.img bs=1024 count=1440
dd if=bootloader.bin of=floppy.img seek=0 count=1 conv=notrunc
Se crea la imagen de disquette (en este caso es el floppy.img que despues ejecutamos como dispositivo de arranque en Oracle VirtualBox.
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