SoloCodigo

Programación General => ASM (Ensamblador) => Mensaje iniciado por: IceCube en Viernes 19 de Agosto de 2005, 05:03

Título: Como Bootear Una Maquina
Publicado por: IceCube en Viernes 19 de Agosto de 2005, 05:03
Hola a todos los miembros del foro, soy novato en foros y discuciones en internet por esa razon les pido disculpas de antemano si alguno resulta afectado por lo que escribo.

les agradeceria si alguien tuviera la amabilidad de ayudarme a bootear la maquina desde un disquete, ¿como creo el codigo fuente para que la maquina arranque con mi propio shell? les agradezco de antemano la ayuda.
Título: Re: Como Bootear Una Maquina
Publicado por: Eternal Idol en Viernes 19 de Agosto de 2005, 07:36
Asumo que te referis a una PC:

Bueno, primero y principal tenes que saber que quien te cargue en memoria y te llame a tu funcion principal sera la BIOS. Esto lo hara en la direccion 0000:7C00.

La BIOS buscara el codigo de arranque en el primer sector de tu diskette, tenes que escribirlo ahi (cada sector tiene 512 bytes).

El codigo debe ser de 16 bits (en cualquier x86/x64), despues podes entrar en modo protegido pero es otra historia. Solo tenes disponibles los servicios de la BIOS.


Cualquier problema no dudes en preguntar, hace muy poco estuve haciendo uno para jugar un poquito (solo arrancaba mostraba un mensaje, esperaba una tecla y reiniciaba la maquina).

 :smartass:
Título: Re: Como Bootear Una Maquina
Publicado por: RadicalEd en Viernes 19 de Agosto de 2005, 17:34
Cita de: "Eternal Idol"
Cualquier problema no dudes en preguntar, hace muy poco estuve haciendo uno para jugar un poquito (solo arrancaba mostraba un mensaje, esperaba una tecla y reiniciaba la maquina).

 :smartass:
Si si si yo me acuerdo, yo me acuerdo incluso lo tengo guardadito jejeje y esta super!!!!
Título: Re: Como Bootear Una Maquina
Publicado por: IceCube en Domingo 21 de Agosto de 2005, 00:56
Te agradezco bastante la atención brindada eternal idol creo que por el momento investigare un poquito mas para empezar a programar
Título: Re: Como Bootear Una Maquina
Publicado por: Eternal Idol en Domingo 21 de Agosto de 2005, 10:40
Cita de: "IceCube"
Te agradezco bastante la atención brindada eternal idol creo que por el momento investigare un poquito mas para empezar a programar
De nadas y me parece muy bien que sigas investigando, cualquier problema estaremos aca para ayudar siempre que podamos  :devil:
Título: Re: Como Bootear Una Maquina
Publicado por: © Jonathan © en Martes 23 de Agosto de 2005, 01:05
Eternal, me parecio interesante el comentario que has hecho, te enojas si te pido el codigo para verlo?... solo es una consulta :) .. estoy buscando info al respecto para ver si logro hacer algo similar. Saludos y Gracias de antemano :)
Título: Re: Como Bootear Una Maquina
Publicado por: bob esponja en Martes 23 de Agosto de 2005, 09:49
aca hay algo que hice hace un tiempo como una broma con un amigo.

habiamos teniado la idea de un sistema operativo llamado diOS y quedo todo en la ruina, les paso el codigo fuente con unos bat que creo que lo construyen y lo copian a un disquete, despues de eso reinicien con el disquete puesto y veran algo simple pero que ayuda un poco.

espero comentarios

si no funciona o falta algo avisen
Título: Re: Como Bootear Una Maquina
Publicado por: Eternal Idol en Martes 23 de Agosto de 2005, 10:08
Cita de: "© Jonathan ©"
Eternal, me parecio interesante el comentario que has hecho, te enojas si te pido el codigo para verlo?... solo es una consulta :) .. estoy buscando info al respecto para ver si logro hacer algo similar. Saludos y Gracias de antemano :)
¿Como me va a molestar? Para nada, solo me jode un poco que me digas "has hecho" en vez de hiciste  :D

Estoy pensando en hacer un mini tutorial al respecto ya que veo a bastantes personas interesadas en este tema. Se podria poner un poco de teoria, desarrollar el loader y explicar como lograr probarlo.  :devil:

Aclaro que no soy un experto ni mucho menos en la materia, ni siquiera me gusta programar en 16 bits  :whistling:

De cualquier manera aca tenes el codigo, NO REVISADO NI COMENTADO:

Código: Text
  1.  
  2. .186
  3. .model tiny
  4.  
  5. Codigo segment 'code'
  6.  
  7. reset equ DB 0EAh, 0h, 0h, 0FFh, 0FFh
  8.  
  9. IFDEF LOADER
  10.   org 07C00h
  11. ELSEIFNDEF
  12.   org 0100h
  13. ENDIF
  14.  
  15. main:
  16.   IFDEF LOADER
  17.     mov ax, 0FFFFh
  18.     mov ds, ax
  19.   ENDIF
  20.  
  21.   mov ax, cs
  22.   mov ds, ax
  23.    
  24.   mov si, offset msg
  25.   call prints
  26.   call getchar
  27.  
  28.   IFDEF LOADER
  29.     reset
  30.   ELSEIFNDEF
  31.     call exit
  32.   ENDIF
  33.  
  34. exit :
  35.   mov ah, 4Ch
  36.   int 21h
  37.  
  38. putchar:
  39.   pusha
  40.     mov ah, 0Eh
  41.     xor bh, bh
  42.     int 10h
  43.   popa
  44. ret
  45.  
  46. prints:
  47.   prints_bucle:
  48.   lodsb
  49.   cmp al, 0
  50.   jz prints_fin
  51.   call putchar
  52.   jmp prints_bucle
  53.   prints_fin:
  54. ret
  55.  
  56. getchar:
  57.   xor ah, ah
  58.   int 16h
  59. ret
  60.        
  61. msg db "Presione una tecla para continuar", 0
  62.  
  63. Codigo ends
  64.  
  65. End Main
  66.  
  67.  
Título: Re: Como Bootear Una Maquina
Publicado por: Eternal Idol en Martes 23 de Agosto de 2005, 10:50
Cita de: "bob esponja"
aca hay algo que hice hace un tiempo como una broma con un amigo.

habiamos teniado la idea de un sistema operativo llamado diOS y quedo todo en la ruina, les paso el codigo fuente con unos bat que creo que lo construyen y lo copian a un disquete, despues de eso reinicien con el disquete puesto y veran algo simple pero que ayuda un poco.

espero comentarios

si no funciona o falta algo avisen
Muy interesante realmente, mi PC no tiene diskettera pero para algo esta Virtual PC (o VMWARE en su defecto).

Logre probarlo creando un disco virtual, esta muy bien, carga en memoria cuatro sectores apartir del segundo y salta ahi (en este caso es el kernel).

Eso si, no me apaga la maquina virtual, queda bloqueada. El reset funciona tal como en mi 'nano loader', saltando a la direccion de comienzo de la BIOS.

Las funciones para sacar por pantalla son muy parecidas a las que hice, me alegro  :smartass:

En resumen, muy bueno, lastima que no lo hayan seguido.
Título: Re: Como Bootear Una Maquina
Publicado por: Eternal Idol en Martes 23 de Agosto de 2005, 10:56
Recapitulando, parece que hay bastante interes por este tema en Argentina, no solo ustedes dos sino tambien Enko que fue el culpable de que haya hecho este 'nano loader', no se burlen demasiado que solo perdi una tarde en el  :ph34r:

Si les interesa podriamos hacer un tutorial, esto va dirigido tanto a los que quieren aprender a hacerlo como a bob esponja que evidentemente podria ayudar muchisimo a su elaboracion.

PD. bob, si lo queres seguir ... no me molestaria en colaborar. Ademas me parecio muy gracioso! :smartass:
Título: Re: Como Bootear Una Maquina
Publicado por: JuanK en Martes 23 de Agosto de 2005, 15:48
Hola bobn, esta muy bueno tu programa, muy gracioso  ;)

Eternal o el que sepa... tengo una duda, me podrian decir por fa que hace esto:
Código: Text
  1.  
  2. reset equ DB 0EAh, 0h, 0h, 0FFh, 0FFh
  3.  
Título: Re: Como Bootear Una Maquina
Publicado por: Eternal Idol en Martes 23 de Agosto de 2005, 16:06
Cita de: "JuanK"
Eternal o el que sepa... tengo una duda, me podrian decir por fa que hace esto:
Código: Text
  1.  
  2. reset equ DB 0EAh, 0h, 0h, 0FFh, 0FFh
  3.  
En sintesis eso resetea la PC.
Título: Re: Como Bootear Una Maquina
Publicado por: JuanK en Martes 23 de Agosto de 2005, 16:20
Cita de: "Eternal Idol"
Cita de: "JuanK"
Eternal o el que sepa... tengo una duda, me podrian decir por fa que hace esto:
Código: Text
  1.  
  2. reset equ DB 0EAh, 0h, 0h, 0FFh, 0FFh
  3.  
En sintesis eso resetea la PC.
 :lol: en sintesis eso lo se
lo que quiero saber es que hace puntualmente.


Para bob: esa utilidad COPYBOOT como funciona?
es decir el segundo parametro es el numero de sector supongo???
 
me explicas porfa.
Título: Re: Como Bootear Una Maquina
Publicado por: Eternal Idol en Martes 23 de Agosto de 2005, 16:33
Cita de: "JuanK"
:lol: en sintesis eso lo se
lo que quiero saber es que hace puntualmente.

 
Son bytes que representan un jmp FFFF:0000, la direccion de memoria donde la CPU carga la BIOS. Al hacer un salto ahi es como si la PC volviera a arrancar.
Título: Re: Como Bootear Una Maquina
Publicado por: JuanK en Martes 23 de Agosto de 2005, 17:01
Citar
reset equ DB 0EAh, 0h, 0h, 0FFh, 0FFh

ya veo equ asigna el opcode del jmp y los 'parametros' a reset
es como un define en C verdad?
Título: Re: Como Bootear Una Maquina
Publicado por: Eternal Idol en Martes 23 de Agosto de 2005, 17:04
Cita de: "JuanK"
Citar
reset equ DB 0EAh, 0h, 0h, 0FFh, 0FFh

ya veo equ asigna el opcode del jmp y los 'parametros' a reset
es como un define en C verdad?
Si, le asigna un valor a un identificador que despues reemplazara el preprocesador.
Título: Re: Como Bootear Una Maquina
Publicado por: JuanK en Martes 23 de Agosto de 2005, 17:07
pero es dependiente del ensamblador que se usa o todos los ensambladores soportan esa 'directiva', es decir lo puedio usar en nasm , tasm? o en todos ?
Título: Re: Como Bootear Una Maquina
Publicado por: Eternal Idol en Martes 23 de Agosto de 2005, 17:12
Cita de: "JuanK"
pero es dependiente del ensamblador que se usa o todos los ensambladores soportan esa 'directiva', es decir lo puedio usar en nasm , tasm? o en todos ?
La respuesta a esta pregunta esta implicita en mi anterior mensaje, el que hace el reemplazo es el preprocesador. Por lo tanto la sintaxis es de MASM, creo que TASM la soporta pero no es algo de assembly.
Título: Re: Como Bootear Una Maquina
Publicado por: bob esponja en Martes 23 de Agosto de 2005, 19:07
eternal de hecho el halt lo unico que hace es bloquear el micro no apagar la pc, lo que se apaga es el micro, faltaria un "ahora puede apagar el pc", a diOS lo deje de programar porque cuando estraba escribiendo el manejador de la disquetera habia una cosa que no funcionaba por eso pare, pero no es dificil de retomar.

por lo del tutorial con mucho gusto si de algo sirve mi aporte..

sobre la instruccion de reseteo es una intruccion que soporta cualquier assembler creo que en nasm la instruccion esa es la misma, es una constante lo que se asigna.
es lo mismo hacer

reset:
        jmp ffff:0000
        ; no hace falta ret porque no vueleve nunca
y despues
call reset


por un solocodigOS jajaj
Título: Re: Como Bootear Una Maquina
Publicado por: Eternal Idol en Martes 23 de Agosto de 2005, 19:23
Cita de: "bob esponja"
eternal de hecho el halt lo unico que hace es bloquear el micro no apagar la pc, lo que se apaga es el micro, faltaria un "ahora puede apagar el pc", a diOS lo deje de programar porque cuando estraba escribiendo el manejador de la disquetera habia una cosa que no funcionaba por eso pare, pero no es dificil de retomar.

por lo del tutorial con mucho gusto si de algo sirve mi aporte..

sobre la instruccion de reseteo es una intruccion que soporta cualquier assembler creo que en nasm la instruccion esa es la misma, es una constante lo que se asigna.
es lo mismo hacer

reset:
        jmp ffff:0000
        ; no hace falta ret porque no vueleve nunca
y despues
call reset


por un solocodigOS jajaj
Efectivamente, despues vi el codigo  :comp:

El salto en si, funciona con cualquier BIOS de PC logicamente pero la forma de escribirla no funciona asi en NASM y el salto no te lo deja poner en MASM. Son diferentes sintaxis simplemente  

En NASM en vez de usar equ se usa %define:

%define reset DB 0EAh, 0h, 0h, 0FFh, 0FFh

despues pones simplemente reset, entonces te reemplaza el macro, no hace falta hacer una llamada ni un salto.

:devil:

Podriamos hacer un proyecto interesante, habria que ver quien tiene ganas de participar.
Título: Re: Como Bootear Una Maquina
Publicado por: JuanK en Martes 23 de Agosto de 2005, 21:42
Me aprece una buena idea podrian hacer algo interesante,
actualmente me encuentro en un proyecto por parte de la universidad, lo tuve que suspender porque tenia que cumplir con lo de mi trabajo de grado y en octubre lo retomare, la parte que yo estaba haciendo era la correspondiente al manejador de procesos aunque inicialmente no cubre multithreading pero si cubre multitasking... la idea que estaba diseñando era que fuera sencillo pero no inutil... ya que en su primera fase quedo funcionando monoproceso; veremos como me va con eso me gustaria pertenecer al grupo pero pues creo que no seria buena idea o que más bien no seria muy bienvenido :(

De todas maneras seria muy bueno que lo hicieran ya que es un ejercicio que permite aprender muchisimo animo y mis mejores deseos para que logren armar algo bien productivo para ustedes y para la comunidad.
Título: Re: Como Bootear Una Maquina
Publicado por: Eternal Idol en Martes 23 de Agosto de 2005, 22:08
Cualquiera que quiera aportar sera bienvenido por mi parte. De desarrollarse realmente un Sistema Operativo habra muchas tareas por hacer, desde el analisis pasando por el diseño y no terminando en la implementacion que tambien hay que probar todo  :devil:

Por mas infimo que fuera, demandaria muchisimas horas hacer algo realmente funcional, si existen suficientes usuarios dispuestos a internarlo mucho mejor.

PD. Saquen sus copias de Sistemas Operativos: Diseño e implementacion  :smartass:
Título: Re: Como Bootear Una Maquina
Publicado por: © Jonathan © en Miércoles 24 de Agosto de 2005, 04:03
Cita de: "Eternal Idol"
Cita de: "© Jonathan ©"
Eternal, me parecio interesante el comentario que has hecho, te enojas si te pido el codigo para verlo?... solo es una consulta :) .. estoy buscando info al respecto para ver si logro hacer algo similar. Saludos y Gracias de antemano :)
¿Como me va a molestar? Para nada, solo me jode un poco que me digas "has hecho" en vez de hiciste  :D

Estoy pensando en hacer un mini tutorial al respecto ya que veo a bastantes personas interesadas en este tema. Se podria poner un poco de teoria, desarrollar el loader y explicar como lograr probarlo.  :devil:

Aclaro que no soy un experto ni mucho menos en la materia, ni siquiera me gusta programar en 16 bits  :whistling:

De cualquier manera aca tenes el codigo, NO REVISADO NI COMENTADO:

Código: Text
  1.  
  2. .186
  3. .model tiny
  4.  
  5. Codigo segment 'code'
  6.  
  7. reset equ DB 0EAh, 0h, 0h, 0FFh, 0FFh
  8.  
  9. IFDEF LOADER
  10.   org 07C00h
  11. ELSEIFNDEF
  12.   org 0100h
  13. ENDIF
  14.  
  15. main:
  16.   IFDEF LOADER
  17.     mov ax, 0FFFFh
  18.     mov ds, ax
  19.   ENDIF
  20.  
  21.   mov ax, cs
  22.   mov ds, ax
  23.     
  24.   mov si, offset msg
  25.   call prints
  26.   call getchar
  27.   
  28.   IFDEF LOADER
  29.     reset
  30.   ELSEIFNDEF
  31.     call exit
  32.   ENDIF
  33.  
  34. exit :
  35.   mov ah, 4Ch
  36.   int 21h
  37.  
  38. putchar:
  39.   pusha
  40.     mov ah, 0Eh
  41.     xor bh, bh
  42.     int 10h
  43.   popa
  44. ret
  45.  
  46. prints:
  47.   prints_bucle:
  48.   lodsb
  49.   cmp al, 0
  50.   jz prints_fin
  51.   call putchar
  52.   jmp prints_bucle
  53.   prints_fin:
  54. ret
  55.  
  56. getchar:
  57.   xor ah, ah
  58.   int 16h
  59. ret
  60.       
  61. msg db "Presione una tecla para continuar", 0
  62.  
  63. Codigo ends
  64.  
  65. End Main
  66.  
  67.  
Mil GRacias Eternal Idol, jeje :lol: .. algo reformado mi Argentino pero igual se entiende che ;) :D ..
Me quiero anotar para lo que tienen pensado hacer, quisiera participar y mas que nada aprender el ASM.. no se si han visto el OS Menuet, elaborado en ASM 32bits si no me equivoco  :ph34r: ... lo probe y esta muy bueno, podriamos lograr algo como eso?.. he visto que no hay proyectos emprendidos por personas de habla hispana en toda internet, culpa de eso todos los documentos de sistemas operativos estan en ingles :( .. aver si se anotan mas usuarios y comenzamos con algo simple como para ver que sale.

Bob, probe tu codigo y me hizo llorar de risa, esta muy bueno, con que compilador trabajas?.. me interesaria aprender al maximo todo esto!.. Un Abrazo para todos y comiencen algo que se ta poniendo buenisimo! jeje  :comp:  :devil:  :D
Título: Re: Como Bootear Una Maquina
Publicado por: Eternal Idol en Miércoles 24 de Agosto de 2005, 07:42
Cita de: "© Jonathan ©"
Mil GRacias Eternal Idol, jeje :lol: .. algo reformado mi Argentino pero igual se entiende che ;) :D ..
Me quiero anotar para lo que tienen pensado hacer, quisiera participar y mas que nada aprender el ASM.. no se si han visto el OS Menuet, elaborado en ASM 32bits si no me equivoco  :ph34r: ... lo probe y esta muy bueno, podriamos lograr algo como eso?.. he visto que no hay proyectos emprendidos por personas de habla hispana en toda internet, culpa de eso todos los documentos de sistemas operativos estan en ingles :( .. aver si se anotan mas usuarios y comenzamos con algo simple como para ver que sale.

Bob, probe tu codigo y me hizo llorar de risa, esta muy bueno, con que compilador trabajas?.. me interesaria aprender al maximo todo esto!.. Un Abrazo para todos y comiencen algo que se ta poniendo buenisimo! jeje  :comp:  :devil:  :D
MenuetOS, un clasico, en un misero diskette tiene hasta GUI! Creo que estaba hecho con FASM. Lograr un MenuetOS es bastante complejo, se necesita tiempo y dedicacion pero si somos suficientes y con ganas se puede.

Bob trabaja con un ensamblador llamado NASM que es multiplaforma y Open Source, si llegamos a empezar el proyecto la eleccion yo la haria entre NASM y FASM por cierto.
Título: Re: Como Bootear Una Maquina
Publicado por: IceCube en Miércoles 24 de Agosto de 2005, 07:54
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?.
Título: Re: Como Bootear Una Maquina
Publicado por: Eternal Idol en Miércoles 24 de Agosto de 2005, 09:08
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)
http://flatassembler.net/docs.php?article=design (http://flatassembler.net/docs.php?article=design)

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

NASM:

http://nasm.sourceforge.net (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.
Título: Re: Como Bootear Una Maquina
Publicado por: Diodo en Miércoles 24 de Agosto de 2005, 10:12
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:
Título: Re: Como Bootear Una Maquina
Publicado por: JuanK en Miércoles 24 de Agosto de 2005, 15:14
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?
Título: Re: Como Bootear Una Maquina
Publicado por: Eternal Idol en Miércoles 24 de Agosto de 2005, 16:15
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).
Título: Re: Como Bootear Una Maquina
Publicado por: JuanK en Miércoles 24 de Agosto de 2005, 16:37
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?
Título: Re: Como Bootear Una Maquina
Publicado por: Eternal Idol en Miércoles 24 de Agosto de 2005, 16:55
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:
Título: Re: Como Bootear Una Maquina
Publicado por: JuanK en Miércoles 24 de Agosto de 2005, 17:05
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..
Título: Re: Como Bootear Una Maquina
Publicado por: Eternal Idol en Miércoles 24 de Agosto de 2005, 17:11
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 (http://foros.solocodigo.com/index.php?showtopic=16853)

 :devil:
Título: Re: Como Bootear Una Maquina
Publicado por: su - en Miércoles 24 de Agosto de 2005, 23:33
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.  
Título: Re: Como Bootear Una Maquina
Publicado por: juanito20 en Domingo 28 de Agosto de 2005, 19:52
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!
Título: Re: Como Bootear Una Maquina
Publicado por: Eternal Idol en Domingo 28 de Agosto de 2005, 20:49
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 (http://www.ctyme.com/rbrown.htm)

 :smartass:  :devil:  :ph34r:
Título: Re: Como Bootear Una Maquina
Publicado por: IceCube en Martes 30 de Agosto de 2005, 16:48
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.