• Domingo 22 de Diciembre de 2024, 12:39

Autor Tema:  Booting  (Leído 2139 veces)

micropais

  • Miembro activo
  • **
  • Mensajes: 93
    • Ver Perfil
Booting
« en: Jueves 19 de Enero de 2006, 18:31 »
0
Para el proyecto disco de autoarranque en pascal.

Debido a las prisas y al dolor de cabeza producido al usar assembler
Masm y sus diferencias con el NaSM aqui os mando un fichero comprimido
con todo lo que hay hasta el momento. os parecerá poco pero es lo que hay.

 <_<  He consegido crear un sector de arranque con informacion BPB , pero no sin problemas , ver el archivo de texto proyecto.txt donde explico como crearlo
y algunas cosillas mas.

 :ph34r: al final carga pero... a que precio. :ph34r:

Chavalotes si queremos avanzar dependemos de bob. o tener más informacion
al respecto de que registros no debemos tocar durante el arranque. :)


 :blink: yo me voy a descansar unos dias.  :whistling:  :whistling:  :whistling:

 :ph34r:SALU2 :ph34r:
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

micropais

  • Miembro activo
  • **
  • Mensajes: 93
    • Ver Perfil
Re: Booting
« Respuesta #1 en: Jueves 26 de Enero de 2006, 15:15 »
0
Explicacion del Proceso de Arranque
_____________________________

Si habeis descargado el RAR y habeis leido el fichero de texto explicativo , os habreis dado cuenta de que el
proceso de carga esta dividido en dos bloques Bien diferenciados el BOOT o cargador y el KERNEL o programa que que será ejecutado por el cargador.

- Si habeis seguido leyendo, el boot ya está hecho , se prodria mejorar pero funciona.
 
- El kernel se podria cargar uno tipo EXE y NO necesariamente escrito en ensamblador , de  momento se ha usado el de BOB esponja por motivos de facilidad pero aquí ya podriamos usar un kernel echo en PASCAL trocearlo en sectores y probarlo.

El problema , al parecer es que hay que usar una cabecera , de carga de registros iniciales , que todavia no tengo muy claro. Estoy en ello y espero que algien lo vaya  haciendo paralelamente por si yo no lo consigo.

- Con el kernel de BOB veremos que no es necesario reiniciar la máquina cada vez que hagamos una prueba , tan solo ejecutamos nuestro ejecutable BOOT y veremos el proceso de carga.
Esto facilita cualquier cambio en el Boot , lastima habermne dado cuaenta solo al final.

__________________

Explicacion del BOOT
__________________

El BIOS está preparado para cargar un sector de arranque de casi cualquier dispositivo , el mas simple es
del de disco flexible , en el disco duro el proceso se complica un poco por el echo de tener particiones.

Si en nuestro BIOS tenemos activada  la opcion de arranque en disquete , el programa interno del bios
lee del disco el primer sector fisico (512 bytes) y lo carga siempre en una zona de memora especifica FFFF:7C00 ó y 0000:7C00 y todavia no le cede el control , el bios comprueba que los dos últimos bytes de estos 512 bytes
que ha leido de un disquete coinciden con la firma 55,AA en haxadecimal ,si es correcto le cede el control al primer byte  o instruccion de nuetro sector cargado en la memoria.

Nuestra mision es colocar el inicio de nuetro programa en esa posicion 7C00 , esto se hace con la clausula en
ensamblador ORG,
- ORG 100h para un programa .com
- ORG 0h para un programa .SYS o uno EXE
- ORG 7C00h para nuestro programa

Sin esta clausula nuestro programa cargador no se ejecutaria , se ejecutaria lo que hubiere en esa posicion de memoria , lo mas normal es que no haya nada y entonces se bloquee la maquina.

Nuestro programa no dispone de todos los  512 bytes del sector ya que se suelen reservar 30 bytes para una tabla de datos que describe el soporte fisico del disco y los dos ultimos bytes que deben terminar con la firma 55AA. lo que nos queda son unos cuantos bytes y lo normal no es hacer aqui un programa completo
si no iniciar la carga de un programa que esté situado en disquete.

En este proceso de carga no podemos usar el sistema tradicional de ficheros DOS int 25h y 26h ya que los servicios tipo DOS no existen , tan solo disponemos de los servicios BIOS que se encuentran en todos los ordenadores . A este nivel BIOS , usaremos la interrupcion INT 13H para cargar sectores especificos
del disco, normalmente sectores consecutivos, en los cuales deberá estar nuestro programa , no necesariamente escrito en ensamblador, el BIOS puede cargar de una sola pasada ,el maximo de sectores que soporta la unidad por pista , en unidad de 3,5 pulgadas alta densidad 18 sectores por 512 bytes
(tamaño sector sector) =9216 bytes o aproximadamente 9k , 9k para nuestro programa , pero podemos cargar mas sectores en otra llamada al BIOS incrementando el tamaño de nuestro programa hasta un maximo de la capacidad de nuestro disco o incluso más introduciendo mas discos.

El único problema estriba que al no disponer de un sistema de manejo de ficheros , el tema se complica ya que el código siempre deberia ocupar unos sectores fijos e inamovibles para poder cargar el código.

La posicion de carga del KERNEL está establecida en la INT 13h por el registro ES:BX y no necesariamente en la posicion 1000:0000  podria ser otra cualquiera 10000:00100  Tipo .com por ejemplo u otra cualquera
2000:00000 ó
FABA:DA hex  ;)

Como veremos mas adelante podemos cargar un executable Programa.EXE que esté troceado en estos sectores , en un principio no deberia haber problemas si el EXE está escrito en ensamblador o en otro lenguaje.

Pero parece ser que el ejecutable debe usar unos registros especiales y un sistema de pila propio, dicho de otra manera los segmentos deben apuntar a
unos valores preestablecidos y esto dificulta el proceso de creacion de ficheros estandar en los que los segmentos apuntan a nuetro programa.

Esto último debe explicarlo mejor BOB esponja.- y me corrija - :hola:


__ NOTA PERSONAL _____________________________________________

Creo que podremos cargar cualquier EXE creado en cualquier lenguaje
siempre y cuando pongamos una cabecera en ensablador a nuestro programa.
y prescindamos de algunos servicios tipo DOS que aún no estan disponibles ya que este no está cargado. habrá que emularlos o reinventarlos o crear un
sistema propio tanto basico a base de sectores o mas complicado. quien sabe.

Respecto al cargador de sectores en disco he usado DEBUG , pero se prodria hacer uno escrito en Pascal para cargar cualquer fichero ejecutable a unos sectores en concreto del disco.

La verdad trabajar bajo ensamblador aveces desmoraliza un poco .La mayoria
de las veces por falta de conocimientos. - casi todas las veces -.

sigo en el proyecto
ya sabeis en Teoria se puede cargar cualquier EXE (Pascal C etc..) para el kernel


_________________________________________________________________

 :ph34r: Saludos. :ph34r:

Solman

  • Miembro MUY activo
  • ***
  • Mensajes: 151
    • Ver Perfil
Re: Booting
« Respuesta #2 en: Lunes 30 de Enero de 2006, 01:36 »
0
muy bien micropais hasta ahora esta todo claro
yo si no puedo ayudarte mucho porq no tengo mucho time,. y deberia investigar mas. Pero si te doy animos jajajaja
vamos q si se puede al parecer solo falta poco o casi nada pa q levantes el kernel ha.

micropais

  • Miembro activo
  • **
  • Mensajes: 93
    • Ver Perfil
Re: Booting
« Respuesta #3 en: Lunes 30 de Enero de 2006, 09:03 »
0
Cita de: "Solman"
muy bien micropais hasta ahora esta todo claro
yo si no puedo ayudarte mucho porq no tengo mucho time,. y deberia investigar mas. Pero si te doy animos jajajaja
vamos q si se puede al parecer solo falta poco o casi nada pa q levantes el kernel ha.
Gracias Solman , la verdad es que he estado un poco vago esta semana.

El assembler te puede hacer perder la paciencia por un simple registro de segmento que no apunta donde debiere , luego hay cosas que un assembler
hace directamente y otro no, el caso es que hay que documentarse , en el
propio foro del ASSEMBLER no tienen respuestas a mis preguntas , vamos
que es mas facil cambiar de ensamblador , pero es como si supieses Pascal
y tubieras que cambiar a C por un par de cosillas de ná que necesitas para
seguir adelante de echo el salto que pido ya esta superado con DEBUG pero
creo que no es la forma correcta de hacer las cosas . Estoy intentando informarme en internet pero veo que han cambiado mucho los compiladores
ASM y hay tantas cosas nuevas que me desvio del tema.

Mi fuerte es el Pascal no el asm , aún así creo que estamos cerca ,muy cerca
de seguro que cambian las tornas cuando podamos cargar un EXE creado en cualquier lenguaje. Así no seré yo solo el que habra el camino, si no todos los
Pascaleros, esa es mi intención , hablar de tu a tu en Pascal.

Si quisiera que toda la programacion estuviera hecha en ASM  el proyecto
estaria en el foro de ASM.

Solo pido un poco de paciencia , animos, y el que pueda que lo intente , que estamos a tan solo un paso , aunque luego aparezcan mas problemas
de seguro que esto será así .


 :ph34r: SALUDOS  :ph34r: