Mini Sistema Operativo!!!

Iniciado por prometheus48, 10 Diciembre 2011, 11:38 AM

0 Miembros y 4 Visitantes están viendo este tema.

prometheus48

Hola.

Estaba haciendo un sistema operativo desde cero, primero en ensamblador.
El boot lo voy a hacer con grub o lilo aunque eso es lo de menos, bueno mi pregunta es esta:
BITS 16

start:
mov ax, 07C0h
add ax, 288
mov ss, ax
mov sp, 4096

mov ax, 07C0h
mov ds, ax


mov si, text_string
call print_string

jmp $


text_string db 'Hola Amigos de el hacker.net!', 0


print_string:
mov ah, 0Eh

.repeat:
lodsb
cmp al, 0
je .done
int 10h
jmp .repeat

.done:
ret


times 510-($-$$) db 0
dw 0xAA55

En donde dice:
text_string db 'Hola Amigos de el hacker.net!', 0
¿Podría cargar un archivo hecho en C++, por ejemplo llamado main.cpp, que seria el sistema operativo?
En realidad no se si funcionaria porque como va a interpretar el ordenador el código en C++ si no tiene compilador o interpretador?
Osea:
¿Cómo hago para que en donde dice text_string db 'Hola Amigos de el hacker.net!', 0 se cargue un archivo de C++, que va a ser la línea de comandos (hecha por mí),?
Tengo que añadir algo al código?
¿O debería hacer un kernel?

Gracias chicos.
Salu2!
"Si tú tienes una manzana, y yo otra, y las intercambiamos, tu sigues teniendo una manzana, y yo sigo teniendo una manzana.
Pero, si tu tienes una idea, y yo otra, y nos las intercambiamos, tu tienes dos ideas, y yo tengo dos ideas"
The knowledge is free

armizh

#1
Cita de: prometheus48 en 10 Diciembre 2011, 11:38 AM
¿Podría cargar un archivo hecho en C++, por ejemplo llamado main.cpp, que seria el sistema operativo?
En realidad no se si funcionaria porque como va a interpretar el ordenador el código en C++ si no tiene compilador o interpretador?
Osea:
¿Cómo hago para que en donde dice text_string db 'Hola Amigos de el hacker.net!', 0 se cargue un archivo de C++, que va a ser la línea de comandos (hecha por mí),?
Tengo que añadir algo al código?
¿O debería hacer un kernel?

Gracias chicos.
Salu2!
Por supuesto que si se puede, de hecho yo estoy en lo mismo pero ya no me interesa abrir un archivo cpp o c. Pero creo que tienes una idea equivocada sobre eso, porque tienes que compilar ambos programas, el bootloader y el kernel por separado, el bootloader deberia tener alguna función para cargar sectores la cual llamaras desde el main de tu bootloader, luego grabas el boot en un floppy (en el MBR) y el kernel lo grabas en el segundo sector del floppy.
Aca hay una excelente página que te muestra las interrupciones y sus usos, y hay una, la Int 13h que es para manejar el floppy y los discos duros.
http://www.ctyme.com/intr/rb-0607.htm
Yo tambien estoy en lo de crear un SO, y estoy desarrollando un blog en el que muestro mis avances, si te interesa vemos como te mando el link, ya que no quiero meterme en lios con el moderador -.-
Ahhh y se me olvidaba, la wikipedia tambien nos da información sobre como usar las interrupciones.
http://es.wikipedia.org/wiki/Llamadas_de_interrupci%C3%B3n_del_BIOS#Tabla_de_interrupciones
Somos pocos los que quedamos con ganas de crear nuestro propio sistema operativo :D
Visita mi blog:
http://armizh.10h.us/
Fnx, fork de FreeNOS:
Código (sh) [Seleccionar]
git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código (sh) [Seleccionar]
git clone https://github.com/armizh/Hamster

Stoya

Un SO sin kernel sería una idea muy novedosa  :rolleyes:

Khronos14

Cita de: Stoya en 16 Diciembre 2011, 23:10 PM
Un SO sin kernel sería una idea muy novedosa  :rolleyes:

Al mismo tiempo que una idea estúpida...

armizh

Cita de: Khronos14 en 17 Diciembre 2011, 01:55 AM
Al mismo tiempo que una idea estúpida...
Sin embargo, en este tema nadie ha dicho algo de hacer un SO sin kernel. Quien comenzo el tema dijo que si debia hacer un kernel, ya que lo que el esta haciendo es un bootloader. Aun que si se le puede cuestionar el hecho de haber nombrado a LILO y GRUB, porque no los necesita, ¿no esta haciendo un boot?
Aunque no es tan estupido ni alocado hacer un SO sin kernel, ya que se puede hacer un interprete de comandos lo suficientemente pequeño como para que se encuentre junto al boot dentro de 512 bytes, pero el que lo haga sera un maestro. ;D
Visita mi blog:
http://armizh.10h.us/
Fnx, fork de FreeNOS:
Código (sh) [Seleccionar]
git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código (sh) [Seleccionar]
git clone https://github.com/armizh/Hamster

farresito

Hacer un sistema operativo no es novedoso; es estúpido. De hecho, los primeros sistemas operativos no tenian kernel. Pero entonces es una *****. No tienes gestión de RAM, ni de privilegios, ni procesos...

armizh

Cita de: farresito en 17 Diciembre 2011, 03:29 AM
Hacer un sistema operativo no es novedoso; es estúpido. De hecho, los primeros sistemas operativos no tenian kernel. Pero entonces es una *****. No tienes gestión de RAM, ni de privilegios, ni procesos...
No necesariamente, si observas Mac OSX es un SO novedoso, pero si miras Windows claramente no lo es. Para explicarlo mejor te doy el siguiente ejemplo, cuando Linus Torvalds escribió Linux lo que hizo no fue para nada novedoso, de hecho fue criticado por lo poco novedoso que fue, el escribió un núcleo monolítico que era considerado obsoleto, sin embargo todos conocemos el resto de la historia, y nos dimos cuenta que no fue estúpido, sino que todo lo contrario. Y es que siempre ha habido poca gente dispuesta a hacer un sistema operativo. Hay tres tipos de personas en ese sentido: 1) La que sabe hacer y lo hace 2) La que no sabe pero aprende haciendo 3) La que tiene solo las ganas. Las personas que no le interesa el tema no debería desanimar a los que les interesa, sea cual sea su tipo.
Visita mi blog:
http://armizh.10h.us/
Fnx, fork de FreeNOS:
Código (sh) [Seleccionar]
git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código (sh) [Seleccionar]
git clone https://github.com/armizh/Hamster

Khronos14

armizh y prometheus48 también, miraos la definición de Sistema Operativo anda.

Un Sistema Operativo permite la ejecución de programas, para llegar a este punto necesitas un sistema de gestión de memoria, un scheduler, GDT, IDT, LDT, etc.. El sistema operativo puede ser monotarea (como las primeras versiones de iOS) o multitarea...

Si llegas a este punto tu solo ya eres un dios, luego te queda la tarea de crear un sistema de drivers, con todas las implicaciones que ello conlleva como los anillos de privilegio y la seguridad... Un Sistema Operativo se tiene que enterar de absolutamente todo lo que sucede en tu ordenador...

http://wiki.osdev.org/Main_Page

Lo que prometheus48 hace en su código es ejecutar un programa de 16 bits, que se ejecuta sin un Sistema Operativo...

Saludos.

armizh

Cita de: Khronos14 en 17 Diciembre 2011, 12:21 PM
armizh y prometheus48 también, miraos la definición de Sistema Operativo anda.

Un Sistema Operativo permite la ejecución de programas, para llegar a este punto necesitas un sistema de gestión de memoria, un scheduler, GDT, IDT, LDT, etc.. El sistema operativo puede ser monotarea (como las primeras versiones de iOS) o multitarea...

Si llegas a este punto tu solo ya eres un dios, luego te queda la tarea de crear un sistema de drivers, con todas las implicaciones que ello conlleva como los anillos de privilegio y la seguridad... Un Sistema Operativo se tiene que enterar de absolutamente todo lo que sucede en tu ordenador...

http://wiki.osdev.org/Main_Page

Lo que prometheus48 hace en su código es ejecutar un programa de 16 bits, que se ejecuta sin un Sistema Operativo...

Saludos.

Estoy de acuerdo contigo, y lo que hace prometheus48 solo es un programa que inicia el sistema, pero esa es la primerisima parte para crear un mini sistema operativo, ya le falta pasar al modo de 32 bits, controlar el texto en pantalla, el teclado, el audio, gestionar la memoria, etc. o simplemente crear un SO a 16 bits con las debilidades estructurales que esto implica, pero no es necesario ser un Dios para hacer todo eso solo... al menos no creo que Linus Torvalds y Andrew Tanenbaum lo sean, aunque claramente nosotros estamos a años luz de ellos, pero a lo que quiero llegar es a que no es imposible lo de crear un SO basico.
Visita mi blog:
http://armizh.10h.us/
Fnx, fork de FreeNOS:
Código (sh) [Seleccionar]
git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código (sh) [Seleccionar]
git clone https://github.com/armizh/Hamster

prometheus48

Hola.
Gracias por los comentarios.
1.-Mencione lo del lilo y el grub porque no voy a utilizar mi bootloader. Lo hize lo más
fácil posible para que me dijeran si yo podría cargar el archivo .cpp.
2.-Lo del kernel lo dije porque no pensaba que la shell ocupara mas de 512 bytes,
ya lo se,¿Cómo va a caber una shell en 512 bytes?. Cuando me puse a hacer el bootloader no me di cuanta, seguramente pense en MiB.
El comentario de khronos14 me a puesto  :-(  El foro es para compartir y aprender.!
Salu2!
"Si tú tienes una manzana, y yo otra, y las intercambiamos, tu sigues teniendo una manzana, y yo sigo teniendo una manzana.
Pero, si tu tienes una idea, y yo otra, y nos las intercambiamos, tu tienes dos ideas, y yo tengo dos ideas"
The knowledge is free