• Jueves 26 de Mayo de 2022, 11:12

Autor Tema:  Bootear Desde Cd  (Leído 1294 veces)

krnl64

  • Miembro activo
  • **
  • Mensajes: 72
    • Ver Perfil
Bootear Desde Cd
« en: Viernes 14 de Diciembre de 2007, 13:22 »
0
Hola a todos.

Verán estoy tratando de arrancar el ordenador desde una iso.
Use el FASM para generar el bin de arranque y otro bin que seria un interprete de comandos.

Copiandolos a un floppy y a archivos IMG (para el VMWARE) funciona bien.

Pero qué puedo hacer para conseguir arrancar desde una iso ?

Probe a ponerle un autorun, pero no funciona.

Gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Bootear Desde Cd
« Respuesta #1 en: Viernes 14 de Diciembre de 2007, 13:51 »
0
El autorun es un archivo de Windows. Me parece que necesitas El Torito.

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.

krnl64

  • Miembro activo
  • **
  • Mensajes: 72
    • Ver Perfil
Re: Bootear Desde Cd
« Respuesta #2 en: Sábado 15 de Diciembre de 2007, 18:04 »
0
Gracias por la info. Ya consegui hacerlo. Aunque tengo otro problema xDD

Me arranca pero no interpreta los comandos.

Pueden decirme que es lo que hay mal ? porque he revisado el codigo (que no es mio) y no veo nada extraño.

Se me olvidaba, es Fasm.

Gracias

Código del Kernel

Código: Text
  1.  
  2.  
  3. ;--------------------------
  4. ; INICIO
  5. ;--------------------------
  6.  
  7.   cli        &#59; Desactivamos interruptores
  8.   mov    ax,0x1000  &#59; AX = 0x1000 donde es cargado el kernel
  9.   mov    ds,ax  &#59; DS = 0x1000
  10.   mov    es,ax  &#59; ES = 0x1000
  11.   mov    ss,ax  &#59; SS = 0x1000
  12.   mov    sp,0xFFFF  &#59; SP = 0xFFFF final de la memoria
  13.   sti        &#59; Reactivamos los interruptores
  14.  
  15.   call    clear  &#59; Borramos la pantalla
  16.   call    cursor  &#59; Ponemos el cursor
  17.   mov    si,NoDOS  &#59; Apuntamos SI a la cadena
  18.   call    puts    &#59; Ponemos el prompt
  19.   mov    si,elprompt&#59; Apuntamos SI a la cadena
  20.   call    puts    &#59; Ponemos el prompt
  21.  
  22. ;-------------------------------------------------------------------------------
  23.  
  24. ;--------------------------
  25. ; MAIN (CLI)
  26. ;--------------------------
  27.  
  28. main:
  29.  
  30.   hlt        &#59; Evitamos que el CPU se caliente (halt)
  31.   mov    cx,64  &#59; Limitamos las cadenas a 60 caracteres
  32.   mov    di,comando&#59; Apuntamos a la cadena del comando
  33.   call    gets    &#59; Obtenemos el comando del teclado
  34.  
  35. procesar:
  36.  
  37.   pusha      &#59; Guardamos todos los registros en la pila
  38.   push    es    &#59; Guardamos ES en la pila
  39.  
  40. ;---------
  41. ; cHOLA
  42. ;---------
  43.  
  44.   mov    si,comando&#59; Ponemos la direccion de "comando" en SI
  45.   mov    cx,5    &#59; Numero de letras del comando (incluye el 0)
  46.   mov    di,cHOLA  &#59; Apuntamos DI a la cadena del comando
  47.   repe    cmpsb  &#59; REPE = Repetir mientras sea igual y
  48.           &#59; disminuir CX
  49.           &#59; CMPSB = Comparar SI con DI
  50.           &#59; SI+1 y DI+1
  51.   jne    no_cHOLA  &#59; Si no es igual seguimos
  52.   call    saludar  &#59; Llamamos a la funcion saludar
  53.   jmp    fin_procesar&#59; Terminamos con este comando
  54.  
  55. no_cHOLA:
  56.  
  57. ;--------------------------
  58. ; PONER COMANDOS AQUI!!
  59. ;--------------------------
  60.  
  61. fin_procesar:
  62.  
  63.   call    prompt  &#59; Ponemos el prompt
  64.   pop    es    &#59; Recuperamos ES
  65.   popa        &#59; Recuperamos los registros generales
  66.   jmp    main    &#59; Repetimos
  67.  
  68. ;-------------------------------------------------------------------------------
  69.  
  70. ;--------------------------
  71. ; FUNCIONES
  72. ;--------------------------
  73.  
  74. clear:        &#59; CLEAR @@@@
  75.  
  76.   mov    ah,0x06  &#59; AH = 0x06 BIOS Scroll
  77.   mov    al,0x00  &#59; AL = 0x00 (lineas) 0 = Pantalla completa
  78.   mov    bh,0x07  &#59; BL = 0x07 0 = Fondo Negro, 7 = Texto Blanco
  79.   mov    ch,0x00  &#59; CH = 0x00 Linea superior (y = 0)
  80.   mov    cl,0x00  &#59; CL = 0x00 Columna Izquierda (x = 0)
  81.   mov    dh,0x18  &#59; DH = 0x18 Linea Inferior (y = 24)
  82.   mov    dl,0x4F  &#59; DL = 0x4F Columna Derecha (x = 79)
  83.   int    0x10    &#59; BIOS VIDEO
  84.   ret
  85.  
  86. ;-------------------------------------------------------------------------------
  87.  
  88. prompt:        &#59; PROMPT @@@@
  89.  
  90.   mov    si,elprompt&#59; SI apunta a la cadena
  91.   call    puts    &#59; Llamamos al procedimiento puts
  92.   ret        &#59; Regresamos
  93.  
  94. ;-------------------------------------------------------------------------------
  95.  
  96. cursor:        &#59; CURSOR @@@@
  97.  
  98.   mov    ah,0x02  &#59; BIOS posicion del cursor
  99.   mov    bh,0x00  &#59; Pagina de memoria
  100.   mov    dh,0x00  &#59; Fila, posicion en Y
  101.   mov    dl,0x00  &#59; Columna, posicion en x
  102.   int    0x10    &#59; BIOS VIDEO
  103.   ret        &#59; Regresamos
  104.  
  105. ;-------------------------------------------------------------------------------
  106.  
  107. saludar:        &#59; SALUDAR @@@@
  108.  
  109.   mov    si,hola  &#59; SI apunta a la cadena
  110.   call    puts    &#59; Llamamos al procedimiento print
  111.   ret        &#59; Regresamos
  112.  
  113. ;-------------------------------------------------------------------------------
  114.  
  115. putc:        &#59; PUTC @@@@
  116.  
  117.   push    ax    &#59; Guardamos AX en la pila
  118.   cmp    al,0x09  &#59; Comparamos Al para ver si es TAB (0x09)
  119.   je    .esTAB  &#59; Si es TAB saltamos
  120.   mov    ah,0x0E  &#59; BIOS poner caracter
  121.   mov    bh,0x00  &#59; Pagina 0
  122.   mov    bl,0x07  &#59; Blanco sobre Negro
  123.   int    0x10    &#59; BIOS VIDEO
  124.   jmp    .fin    &#59; Terminamos
  125.  
  126. .esTAB:
  127.  
  128.   mov    al,0x20  &#59; Ponemos en AL el caracter de espacio
  129.   call    putc    &#59; Llamamos a esta misma funcion 5 veces
  130.   call    putc    &#59; para poner en pantalla un TAB
  131.   call    putc    &#59; de 5 espacios
  132.   call    putc    &#59; ...
  133.   call    putc    &#59; ...
  134.  
  135. .fin:
  136.  
  137.   pop    ax    &#59; Recuperamos AX de la pila
  138.   ret        &#59; Regresamos
  139.  
  140. ;-------------------------------------------------------------------------------
  141.  
  142. gets:        &#59; GETS @@@@
  143.  
  144.   push    cx    &#59; Guardamos CX en la pila
  145.   push    ax    &#59; Guardamos AX en la pila
  146.   push    dx    &#59; Guardamos DX en la pila
  147.   push    di    &#59; Guardamos DI en la pila
  148.   mov    dx,di  &#59; Guardamos el inicio de la cadena en SI
  149.  
  150. .tecla:
  151.  
  152.   cmp    cx,0    &#59; Terminamos?
  153.   je    .fin    &#59; Si CX es 0 terminamos
  154.   xor    ax,ax  &#59; AH = 0 - BIOS obtener tecla
  155.   int    0x16    &#59; BIOS Servicios de Teclado
  156.   dec    cx    &#59; CX = CX-1
  157.   cmp    al,0x0D  &#59; Es ENTER? (ascii decimal 13)
  158.   je    .enter  &#59; Si es igual terminamos
  159.   cmp    al,0x08  &#59; Es Backspace (ascii decimal 8)
  160.   je    .backspace&#59; Si es igual saltamos a backspace
  161.   call    putc    &#59; Si no ponemos el caracter
  162.   mov    [di],al  &#59; Copiamos AL (caracter) en la cadena [DI]
  163.   inc    di    &#59; DI = DI+1
  164.   jmp    .tecla  &#59; Repetimos con la siguiente tecla
  165.  
  166. .backspace:
  167.  
  168.   cmp    dx,di  &#59; Comparamos con el principio de la cadena  
  169.   je    .tecla  &#59; Si son iguales pedimos otra tecla
  170.   dec    di    &#59; DI = DI-1
  171.  
  172.   mov    ah,0Eh  &#59; BIOS Poner caracter
  173.   mov    al,0x08  &#59; Movemos el cursor hacia atras (backspace)
  174.   mov    bh,0x00  &#59; Pagina 0
  175.   mov     bl,0x01  &#59; Borramos
  176.   int    0x10    &#59; BIOS VIDEO
  177.  
  178.   mov    ah,0Eh  &#59; BIOS Poner caracter
  179.   mov    al,0x20  &#59; Ponemos espacio
  180.   mov    bh,0x00  &#59; Pagina 0
  181.   mov     bl,0x01  &#59; Borramos
  182.   int    0x10    &#59; BIOS VIDEO
  183.  
  184.   mov    ah,0Eh  &#59; BIOS Poner caracter
  185.   mov    al,0x08  &#59; Movemos el cursor hacia atras (backspace)
  186.   mov    bh,0x00  &#59; Pagina 0
  187.   mov     bl,0x01  &#59; Borramos
  188.   int    0x10    &#59; BIOS VIDEO
  189.  
  190.   jmp    .tecla  &#59; Pedimos otra tecla
  191.  
  192. .enter:
  193.  
  194.   mov    al,0x0D  &#59; Retorno de Linea (13)
  195.   call    putc    &#59; Ponemos en pantalla
  196.   mov    al,0x0A  &#59; Nueva Linea (10)
  197.   call    putc    &#59; Ponemos en pantalla
  198.  
  199. .fin:
  200.  
  201.   mov    byte  [di],0&#59; Terminamos la cadena con cero
  202.   pop    di    &#59; Recuperamos los registros
  203.   pop    dx    &#59; ...
  204.   pop    ax    &#59; ...
  205.   pop    cx    &#59; ...
  206.   ret        &#59; Regresamos
  207.  
  208. ;-------------------------------------------------------------------------------
  209.  
  210. puts:
  211.  
  212.   lodsb      &#59; Cargamos el caracter de DS:SI en AL
  213.   or    al,al  &#59; Hacemos un OR al registro AL
  214.   jz     .fin_puts  &#59; Terminamos si es cero
  215.   mov    ah,0x0E  &#59; Poner caracter (parametro int 0x10)
  216.   int    0x10    &#59; BIOS VIDEO
  217.   jmp    puts    &#59; Siguiente caracter
  218.  
  219. .fin_puts:
  220.  
  221.   ret        &#59; termina el procedimiento y regresamos
  222.  
  223. ;-------------------------------------------------------------------------------
  224.  
  225. ;--------------------------
  226. ; VARIABLES
  227. ;--------------------------
  228.  
  229.   comando:  times  128  db 0&#59; Espacio para almacenar el comando
  230.   elprompt  db '@:',0    &#59; El prompt "@:"
  231.   cHOLA  db "hola",0  &#59; Comando "hola"
  232.   hola    db "Hola CLI!!",13,10,0; Texto del comando "hola"
  233.  
  234.   NoDOS  db "NoDOS 0.1",13,10,0; Cadena de Bienvenida!
  235.  
  236.  
  237.