sábado, 10 de diciembre de 2011

Sistema Operativo pt.1: Bootloader simple

Comenzaré el desarrollo de este blog, explicando que no soy ningún experto en programación, sólo soy un aficionado al cual le interesa poder algún día programar por completo un sistema operativo. La verdad, es que voy aprendiendo a programar mientras desarrollo este SO, al cual he llamado simplemente NuOS.
Ahora vamos a lo que nos reúne, el Bootloader. Como muchos ya me han dicho, puede ser más fácil utilizar GRUB, pero la verdad yo almenos no entiendo como m***** hacerlo funcionar -.-
Por esto que decidí hacer uno propio que simplemente muestre un mensaje. Por ahora eso puede ser suficiente.
Estoy buscando información sobre como leer el segundo sector del floppy y así ejecutar un kernel que hasta ahora estaría programado en C, por favor si alguien tenga esa información puede comentar aquí o enviarlo a mi correo feelipee.024@hotmail.com.
Acá va el código:

;NuOS Kernel.
;Copyright (C) 2011  Felipe Cabrera

;This program is free software: you can redistribute it and/or modify
;it under the terms of the GNU General Public License as published by
;the Free Software Foundation, either version 3 of the License, or
;(at your option) any later version.

;This program is distributed in the hope that it will be useful,
;but WITHOUT ANY WARRANTY; without even the implied warranty of
;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;GNU General Public License for more details.

;You should have received a copy of the GNU General Public License
;along with this program.  If not, see <http://www.gnu.org/licenses/>.
;------------------------------boot.asm----------------------------------;
[BITS 16]                            ;Indica al compilador NASM (el que yo
                                     ;utilizo) que el Bootloader se ejecuta
                                     ;en Modo Real (16 Bits)
[ORG 0x7c00]                         ;No tengo ni p*** idea de que es esto
 
   xor ax, ax                        ;declaraciones,
   mov ds, ax                        ;declaraciones
   mov ecx, 0xFF                     ;y mas declaraciones...

   cli                               ;Desactiva las interrupciones
   sti                               ;Inicializa las interrupciones
 
   mov si, msg                       ;Mueve el contenido de 'msg' a 'si'

ch_loop:lodsb                       
;Creo que me faltaba algo...
   or al, al                         ;...mas declaraciones -.-
   jz hang                           ;
   mov ah, 0x0E                      ;Mueve 0x0E a 'ah'
   int 0x10                          ;llama a la interrupción 0x10

                                     ;(Imprimir en pantalla)
   jmp ch_loop

hang:
   jmp hang

msg   db 'Inicializado', 13, 10, 0   ;'msg' es el texto a escribir

                                     ;ahora indicamos que el texto sera
                                     ;'Inicializado'

   times 510-($-$$) db 0             ;Indica que todo lo anterior usa 510 bits
   db 0x55                           ;Declaración: el bit 511 corresponde a 0x55
   db 0xAA                           ;Declaración(sabías que odio las

                                     ;declaraciones?): el bit 512 es 0xAA
;Así es como se completan los 512 bits del primer sector del floppy (MBR)
;Recuerda que para compilar debes escribir en la terminal:
;          ~$ nasm boot.asm -o boot.bin
;y para guardarlo en una imagen de floppy
;          ~$ dd if=boot.asm of=floppy
;Recuerda ademas que si no tienes instalado NASM
;          ~$ sudo aptitude install nasm

Cualquier cosa nueva que añada será escrita en este blog, el cuál seguirá mi travesía dentro del mundo de la programación de Sistemas Operativos -.-

1 comentario:

  1. Hola que tal, espero y aun sigas escribiendo el SO, tu info es muy buena, yo tambien soy aficionado bueno y estudiante, pero una cosa:

    Como guardas esta informacion en el disco duro? digo windows lo utilizaria como un usb como lo compilas o lo guardas en una memoria para el arranque de una maquina?

    ResponderBorrar