• Domingo 27 de Septiembre de 2020, 18:32

Autor Tema:  Como Bootear Una Maquina  (Leído 21884 veces)

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Como Bootear Una Maquina
« Respuesta #25 en: Miércoles 24 de Agosto de 2005, 09:08 »
0
Cita de: "IceCube"
He leido sus post, y se escucha muy interesante lo del SO, me gustaria participar pero realmente soy nuevo en esto de ensamblador, ahora trato de hacer un SO para un trabajo de la universidad, pero debido a sus comentarios he quedado con una duda ¿que diferencia hay entre TASM, NASM y FASM?, cual es mejor, cual debo usar?.
TASM olvidalo, es el pasado.

FASM:

http://flatassembler.net
http://flatassembler.net/docs.php?article=design

Segun su autor esta orientado a Sistemas Operativos, MenuetOS sin ir mas lejos:
http://www.menuetos.org/

NASM:

http://nasm.sourceforge.net

diOS esta hecho en NASM asi que supongo que Bob podra comentar ampliamente sobre este ensamblador. Yo use siempre MASM, incluso para el ejemplo que puse pero creo recordar que en algun momento de la historia lei algo relacionado con la imposibilidad (legal) de hacer un Sistemas Operativo con este ensamblador de Microsoft ...

Resumiendo todavia no estoy decidido como dije anteriormente:

Cita de: "Eternal Idol"
si llegamos a empezar el proyecto la eleccion yo la haria entre NASM y FASM por cierto.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Re: Como Bootear Una Maquina
« Respuesta #26 en: Miércoles 24 de Agosto de 2005, 10:12 »
0
Hola

Parece interesante el proyecto que recien estan empezando en esta discusion, ya me gustaria poder ayudar de alguna manera, pero mis conocimientos de ensamblador se limitan al micro Motorola 68000, y mas bien a un entorno industrial.Quizas les pueda ayudar como testeador,probador de lo que vayan haciendo, ya que segun tengo entendido un trabajo asi necesita de muchas pruebas.

Espero que esta discusion no se quede mas que en el desarrollo de un SO y puedan a la vez ir, a la vez, realizando un tutorial sobre ensamblador y su aplicacion en el dessarrollo de un SO (Seria excelente para la comunidad)  :) .Podrian hablar con solocodigo y pedirle que abriera un espacio en la web u otro foro donde ir siguiendo la evolucion del proyecto (aunque parece que lleva unos cuantos dias de vacaciones   :kicking: :whistling: )

Bueno nada mas que me enrollo,suerte con el proyecto y cuenten conmigo para lo que necesiten  :comp:

salu2  :hola:

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Como Bootear Una Maquina
« Respuesta #27 en: Miércoles 24 de Agosto de 2005, 15:14 »
0
Retomando lo de  menuet OS..
creo que seria un mal horizonte para el proyecto, ya que menuet puede tener muchas cosas buenas a nivel de programacion y que seguro merecen un reconocimiento pero en mi opinion no tiene nada de sistema operativo aunque cuente con cosas que lo hagan ver asi.

Menuet en efecto fue desarrollado totalmente en asm, lo cual aunque parezca heroico es una trampa mortal para el desarrollo progresivo de un sistema operativo ya que cualquier mejora que se haga en codigo incluso para hacerlo portable de una maquina a otra o para modificarlo y hacerlo compatible con nuevas funcionalidades de los procesadores... termina siendo una tarea bastante dispendiosa y costosa.

Solo deberia ser desarrollado en ensamblador una parte muy pequeña del nucleo que seria la que implementaria una especie de RTL y otras funcionalidades básicas y la cual podriamos llamar una HLA.

Una alternativa para no desarrollar un sistema en ensamblador es lógicamente desarrollarlo en algún lenguaje de programacin de más alto nivel... seguramente lenguaje C y despues C++, pero esto implica tener un compilador lo cual facilita mucho el asunto ya que si se  necesita generar un ensamblado con caracteristicas diferentes o que genere código de maquina de una manera diferente pues simplemente se cambian los parametros del compilador , se recompila y ya.

Alli surge otro problema y es que solo hay dos opciones:

1- Crear un compilador nativo para el sistema operativo
2- Usar un compilador que ya este hecho en otra plataforma y
    adecuar el sistema para interpretar ese ejecutable

La primera es la opcion más optima creo yo o al menos seria la que mas me gustaria, pero demanda muchisimo más tiempo ya que la sola creacion de un MUY BUEN compilador podria tomar años, la segunda es más rápida  pero implica desarrollar de acuerdo a un estandart ya establecido, es decir si se decide usar el GCC habria que ir pensando en desarrollar el conjunto de llamdas del estandart POSIX.

Asi que como ven Menuet no llegara muy lejos porque no esta hecho para ser un sistema operativo de verdad, sino que es un programa que cabe en un diskete, que arranca la máquina, que tiene unos gráficos bonitos y que da la impresión de actuar como un sistema operativo... pero que realmente no lo es; Si se quiere hacer un sistema de verdad hay que ir pensando en la escalabidad, portabilidad y flexibilidad del mismo desde el comienzo.

Bueno esa es mi propuesta, que opinan?
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Como Bootear Una Maquina
« Respuesta #28 en: Miércoles 24 de Agosto de 2005, 16:15 »
0
Cita de: "JuanK"
Retomando lo de  menuet OS..
creo que seria un mal horizonte para el proyecto, ya que menuet puede tener muchas cosas buenas a nivel de programacion y que seguro merecen un reconocimiento pero en mi opinion no tiene nada de sistema operativo aunque cuente con cosas que lo hagan ver asi.

Menuet en efecto fue desarrollado totalmente en asm, lo cual aunque parezca heroico es una trampa mortal para el desarrollo progresivo de un sistema operativo ya que cualquier mejora que se haga en codigo incluso para hacerlo portable de una maquina a otra o para modificarlo y hacerlo compatible con nuevas funcionalidades de los procesadores... termina siendo una tarea bastante dispendiosa y costosa.

Solo deberia ser desarrollado en ensamblador una parte muy pequeña del nucleo que seria la que implementaria una especie de RTL y otras funcionalidades básicas y la cual podriamos llamar una HLA.

Una alternativa para no desarrollar un sistema en ensamblador es lógicamente desarrollarlo en algún lenguaje de programacin de más alto nivel... seguramente lenguaje C y despues C++, pero esto implica tener un compilador lo cual facilita mucho el asunto ya que si se  necesita generar un ensamblado con caracteristicas diferentes o que genere código de maquina de una manera diferente pues simplemente se cambian los parametros del compilador , se recompila y ya.

Alli surge otro problema y es que solo hay dos opciones:

1- Crear un compilador nativo para el sistema operativo
2- Usar un compilador que ya este hecho en otra plataforma y
    adecuar el sistema para interpretar ese ejecutable

La primera es la opcion más optima creo yo o al menos seria la que mas me gustaria, pero demanda muchisimo más tiempo ya que la sola creacion de un MUY BUEN compilador podria tomar años, la segunda es más rápida  pero implica desarrollar de acuerdo a un estandart ya establecido, es decir si se decide usar el GCC habria que ir pensando en desarrollar el conjunto de llamdas del estandart POSIX.
MenuetOS es un Sistema Operativo sin lugar a la menor duda:

Features
- Pre-emptive multitasking, multithreading, ring-3 protection
- Responsive GUI with resolutions up to 1280x1024, 16 million colours
- IDE: Editor/Macro Assembler for building kernel and applications
- TCP/IP stack with Loopback, PPP & Ethernet drivers
- Network applications include ftp/http/mp3/smtp servers,
- irc, http, nntp and tftp clients
- Free-form, skinnable application windows
- Hard real-time data fetch
- Fits uncompressed on a single floppy  

Tene en cuenta especialmente lo que esta en negrita. ¿QNX tampoco es un Sistema Operativo entonces?

Obviamente eso no quita que hacerlo totalmente en assembly es mucho mas complicado y disminuye muchisimo la cantidad de personas que pueden colaborar, aunque claro que este es el foro de ASM y no de C/C++.

Dudo muchisimo de que vayamos a desarrollar un compilador, ciertamente es la mas (sic) optima pero creo que lo mas interesante seria tener ALGO funcionando y no diseñar un nuevo Linux/Windows que nunca logremos implementar. Practicamente estas hablando de lo que queria hacer CodigoDavid con las tarjetas graficas y le dijimos que no se apurara tanto, no podemos pretender diseñar un File System propio, un compilador, un kernel y demas, al final fracasariamos estrepitosamente y no lograriamos tener nada tangible.


La segunda opcion me parece razonable y FACTIBLE (cosa fundamental).

Esto marca dos caminos, uno es el que ya mencionaste con POSIX y supongo que ext y elf.

Otra alternativa que propongo es que en vez de seguir con POSIX creemos nuestra propia interfaz (tal como Windows) y ya que estamos soportemos algun File System como FAT/32 y COFF. Lo mas interesante de esto es que construyendo un enlazador ya podriamos generar un ejecutable propio apartir de codigo compilado en Windows (VC++, gcc, etc).

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Como Bootear Una Maquina
« Respuesta #29 en: Miércoles 24 de Agosto de 2005, 16:37 »
0
Citar
- Pre-emptive multitasking, multithreading, ring-3 protection
- Responsive GUI with resolutions up to 1280x1024, 16 million colours
- IDE: Editor/Macro Assembler for building kernel and applications
- TCP/IP stack with Loopback, PPP & Ethernet drivers
- Network applications include ftp/http/mp3/smtp servers,
- irc, http, nntp and tftp clients
- Free-form, skinnable application windows
- Hard real-time data fetch
- Fits uncompressed on a single floppy

Realmente no opino lo mismo, como bien lo dije tiene cosas que lo harian parecer a un sistema operativo pero realmente, ring-3 protection ya viene implementado desde el procesador y por ejemplo sistemas operativos antiguos como por ejemplo DOS no poseian multitasking, multithreading y aun asi eran sistemas operativos, más que por cuestiones de funcionalidad visibles primera vista, no lo considero un sistema operativo es por cuestiones de diseño y mas de fondo que la funcionalidad tangible del programa. Pero creo que ya dejamos ese tema ahi porque seria ubicarlo mejor en otro post.

Citar
Otra alternativa que propongo es que en vez de seguir con POSIX creemos nuestra propia interfaz (tal como Windows) y ya que estamos soportemos algun File System como FAT/32 y COFF. Lo mas interesante de esto es que construyendo un enlazador ya podriamos generar un ejecutable propio apartir de codigo compilado en Windows (VC++, gcc, etc).

Si claro, lo del gcc era solo un ejemplo porque de hecho si se quisiera hacer algo que funcionara con codigo para mac o para as400 o cosas asi pues igualmente seria viable.

Ya les dejo a ustedes como deciden hacerlo, pues logicamente las condiciones cambian si se pretende hacer un SO ASM por ser el foro de ASM, o si se quiere hacer un SO independientemente de la tematica ppal del foro.

Ahora si ponemos a volar la imaginacion ( de manera segutramente descabellada o soñadora a extremo) se podria inicialmente utilizar el formato ejecutable de otra plataforma ( linux , windows) y hacer una especie de subsystem para soportarlo, y si todo se diseña y planea de la manera adecuada se podria continuar luego que ya este funcionando, con la creacion del 'subsystem' propio del sistema e implementar los demas subsystems con llamdados al subsystem nativo.  tal como lo hace windows, eternal me corregira sino es posible de ese modo.

El sistema en el cual estoy(o estasba) participando en la U, lo habiamos comtenplado para hacer lo usando otro ejecutable y a futuro crear un formato ejecutable y un conjunto de lladmas propio tal como se los he propuesto.

Citar
Dudo muchisimo de que vayamos a desarrollar un compilador, ciertamente es la mas (sic) optima pero creo que lo mas interesante seria tener ALGO funcionando y no diseñar un nuevo Linux/Windows que nunca logremos implementar. Practicamente estas hablando de lo que queria hacer CodigoDavid con las tarjetas graficas y le dijimos que no se apurara tanto, no podemos pretender diseñar un File System propio, un compilador, un kernel y demas, al final fracasariamos estrepitosamente y no lograriamos tener nada tangible.

Si nada que hacer... creo que a todos nos gustaria esa opcion, pero tambien se que todos entienden lo dificil que seria, más aun cuando es el primer intento de 'sistenma operativo' que se hace, sin embargo no puede ser tan descabellada para el futuro si todo sale bien. no?
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Como Bootear Una Maquina
« Respuesta #30 en: Miércoles 24 de Agosto de 2005, 16:55 »
0
Cita de: "JuanK"
Realmente no opino lo mismo, como bien lo dije tiene cosas que lo harian parecer a un sistema operativo pero realmente, ring-3 protection ya viene implementado desde el procesador y por ejemplo sistemas operativos antiguos como por ejemplo DOS no poseian multitasking, multithreading y aun asi eran sistemas operativos, más que por cuestiones de funcionalidad visibles primera vista, no lo considero un sistema operativo es por cuestiones de diseño y mas de fondo que la funcionalidad tangible del programa. Pero creo que ya dejamos ese tema ahi porque seria ubicarlo mejor en otro post.

Si claro, lo del gcc era solo un ejemplo porque de hecho si se quisiera hacer algo que funcionara con codigo para mac o para as400 o cosas asi pues igualmente seria viable.

Ya les dejo a ustedes como deciden hacerlo, pues logicamente las condiciones cambian si se pretende hacer un SO ASM por ser el foro de ASM, o si se quiere hacer un SO independientemente de la tematica ppal del foro.

Ahora si ponemos a volar la imaginacion ( de manera segutramente descabellada o soñadora a extremo) se podria inicialmente utilizar el formato ejecutable de otra plataforma ( linux , windows) y hacer una especie de subsystem para soportarlo, y si todo se diseña y planea de la manera adecuada se podria continuar luego que ya este funcionando, con la creacion del 'subsystem' propio del sistema e implementar los demas subsystems con llamdados al subsystem nativo.  tal como lo hace windows, eternal me corregira sino es posible de ese modo.

El sistema en el cual estoy(o estasba) participando en la U, lo habiamos comtenplado para hacer lo usando otro ejecutable y a futuro crear un formato ejecutable y un conjunto de lladmas propio tal como se los he propuesto.
Lo mismo digo, difiero totalmente, MS-DOS es apenas una capita que le deja todo el control de la PC a otros ejecutables pero bueno, lo dejamos para otro momento.


Windows trabaja con diferentes subsystems y aunque en su momento te haya parecido hilarante soporta una especificacion (chica) de POSIX.
Si, seria bastante bueno permitirnos trabajar asi, estoy totalmente de acuerdo.


Bueno, ya va siendo hora de que se anoten los que quieran participar y ya despues veremos la arquitectura  :smartass:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Como Bootear Una Maquina
« Respuesta #31 en: Miércoles 24 de Agosto de 2005, 17:05 »
0
Bueno me estoy como animando a participar , pero lo seguire haciando ocacionalmente con algún aporte, debido a que logicamente  es inevitable traerme muchas ideas y cosas que ya se hicieron en el otro grupo así sea solo a nivel de conceptos y pues le quitaria algo la gracia no?

Bueno en fin debo analizarlo bien para no perjudicar a ninguna de las partes ( no se si a mi director de proyecto le gustaria saber de eso... mas cuando el participa aca en el foro) pero me parece genial que se haya dado esta iniciativa aca en el foro..
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Como Bootear Una Maquina
« Respuesta #32 en: Miércoles 24 de Agosto de 2005, 17:11 »
0
Como dije anteriormente, cualquier colaboracion sera bien recibida.

Al que le interese que se pase por aca:

http://foros.solocodigo.com/index.php?showtopic=16853

 :devil:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Como Bootear Una Maquina
« Respuesta #33 en: Miércoles 24 de Agosto de 2005, 23:33 »
0
Solocodiger@s  :hola:

No se nada de ASM pero tengo este bootscript de fiasco poara ia32

Código: Text
  1.  
  2. /* -*- c -*- */
  3.  
  4. #define __ASSEMBLY__
  5.  
  6. #define ENTRY(name) \
  7.   .globl name; \
  8.   .align 16,0x90; \
  9.   name:
  10.  
  11.  
  12. ENTRY(__crt_dummy__)
  13. ENTRY(_start)
  14. ENTRY(start)
  15.   leal  _stack,%esp
  16.   pushl  %eax
  17.   pushl  %ebx
  18.   pushl  $0    /* no return address */
  19.   jmp  bootstrap
  20.  
  21.         /* MultiBoot header - see multiboot.h.  */
  22. #ifdef __ELF__
  23.         .align  4
  24. #else /* ! __ELF__, that mean a.out assembler */
  25.         .align  2
  26. #endif
  27.  
  28.   .p2align(2), 0x90
  29.   .long   0x1BADB002              /* magic */
  30.   .long   0x00000000              /* feature flags */
  31.   .long   0 - 0x1BADB002
  32.  
  33.   .bss
  34.   .space  1024
  35. ENTRY(_stack)
  36.  
  37.  
  38.  
  39.  
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

juanito20

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Como Bootear Una Maquina
« Respuesta #34 en: Domingo 28 de Agosto de 2005, 19:52 »
0
Hola, es mi primer post y soy algo novato en asm, estoy trabajando en este proyecto y lo que no logro comprender bien es como escribir en el diskette, entiendo lo del sector 0, y cargar en memoria 7C00, pero me he encontrado con que aparentemente hay que escribir ceros y unos, o un .bin, en realidad no comprendo como, vi el ejemplo aki mostrado (el de BOB) pero lo que necesito saber es como funciona el COPYBOOT.EXE, y tengo la misma duda de otro colega que preguntaba por los parametros, gracias a quien lea esto!

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Como Bootear Una Maquina
« Respuesta #35 en: Domingo 28 de Agosto de 2005, 20:49 »
0
Cita de: "juanito20"
Hola, es mi primer post y soy algo novato en asm, estoy trabajando en este proyecto y lo que no logro comprender bien es como escribir en el diskette, entiendo lo del sector 0, y cargar en memoria 7C00, pero me he encontrado con que aparentemente hay que escribir ceros y unos, o un .bin, en realidad no comprendo como, vi el ejemplo aki mostrado (el de BOB) pero lo que necesito saber es como funciona el COPYBOOT.EXE, y tengo la misma duda de otro colega que preguntaba por los parametros, gracias a quien lea esto!
La cuestion es escribir en el primer sector porque la BIOS carga ese sector en la direccion 7C00:000 y le transfiere el control mediante un jmp, entonces ahi tiene que estar el codigo inicial.

Sino me equivoco El COPYBOOT.EXE tiene un parametro para especificar el sector de comienzo de escritura, para escribir el loader usa el 0 (por lo explicado anteriormente) y para escribir el Kernel usa el 1, sector que es cargado en memoria mediante el loader.

No se como hace exactamente el COPYBOOT.exe y la verdad estoy bastante cansado como para mirarlo (podes usar el debug.com para verlo por ej.) pero podes usar la BIOS, mas concretamente la interrupcion 13h provee varios servicios, entre otros el 02h para leer y el 03h para escribir.

Tambien MS-DOS provee servicios para leer y escribir en las interrupciones 25h y 26h respectivamente.

Aca podes encontrar informacion sobre las interrupciones mencionadas anteriormente:
http://www.ctyme.com/rbrown.htm

 :smartass:  :devil:  :ph34r:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

IceCube

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Como Bootear Una Maquina
« Respuesta #36 en: Martes 30 de Agosto de 2005, 16:48 »
0
juanito20 si logras consegir el emu8086 encontraras ejemplos de como lograr escribir en el sector 0 de todas formas la interrupcion 13h funciona de la siguiente manera

ah=servicio(03)    al=numero de sectores a escribir(1)     ch=numero de cilindro(0)
dh=numero de sector(1)     dl=unidad(disquette=0)  es:bx=el puntero al buffer

lo que podrias hacer es hacer tu codigo (no puede ser mayor a 512 bytes) y generar un .bin para luego en un programa aparte leerlo meterlo en un buffer (buffer db 512 dup (?)) y escribirlo en el sector 0.

PD: espero que te ayude de algo ya que no soy muy bueno para explicar.