Comunidade OSDevBrasil.net
Maio 20, 2012, 04:14:20 *
Bem-vindo, Visitante. Por favor faça o Login ou Registro.

Login com nome de usuário, senha e duração da sessão
Notícias: Anuncie a nossa comunidade a amigos, fóruns...
 
   Home   Ajuda Pesquisa Login Registrar  
Páginas: [1]
  Imprimir  
Autor Tópico: Criando imagem do Bootloader  (Lida 765 vezes)
CronosTs
OS Newbie
*

Karma: 0
Mensagens: 2


Ver Perfil Email
« : Abril 01, 2009, 03:58:55 »

Galera não ato conseguindo criar a imagem do kernel feito em assembly, quer dizer, consigo criar fica em torno de 1kb (é que é uma coisa bem genérica de um tuto), mas não da o boot, quando testo no Bochs aparece a seguinte mensagem  "no bootable device". Já tentei vários programas, o dd do linux, o rawrite, até o do fergonez e nada. Testei outras imagens baixadas da net e funfou, mas a minha não. Alguem tem alguma dica Hein???

saca o código do kernel (bem simples por sinal)...

Código:
; exer02.asm
; Exibe "Hello Cyberspace!" na tela

; Informa o compilador que este é o Offset 0.
; Este não é o Offset 0, mas será depois do salto.
[ORG 0]
jmp 07C0h:start ; Vai para o segmento 07C0

; Declara a mensagem que será exibida
msg db 'Hello Cyberspace!'

start:
; Atualiza os registros de segmento
mov ax, cs
mov ds, ax
mov es, ax

mov si, msg
exibe:
lodsb

cmp al, 0 ; Se AL = 0 vai para loop
je loop

mov ah, 0Eh
mov bx, 7
int 10h

jmp exibe ; Exibe o próximo caractere

loop: ; Loop infinito
jmp loop

times 510-($-$$) db 1
dw 0AA55h

Nem mexi sók fiz copiar e colar, msm assim não funfou. Estou fazendo algo de errado ??
Registrado
anthony collucci
it not exist
Moderador Global
OS Full Member
*****

Karma: 3
Mensagens: 100


Ver Perfil WWW Email
« Responder #1 : Abril 06, 2009, 09:23:44 »

Como vc gravou ele no disquete?
Registrado

CronosTs
OS Newbie
*

Karma: 0
Mensagens: 2


Ver Perfil Email
« Responder #2 : Abril 07, 2009, 10:48:49 »

Cara é o seguinte, criei a IMG com o programa do Fergonez, gravei na trilha 1 no setor 0, então o programa cria uma imagem do diskete que pode ser gravado com o Rawrite ou otro programa do tipo.
Só que ao invés de eu tentar gravar (coisa que não consegui) setei a imagem diretamente no Bochs, fazendo assim ó:
Código:
floppya: 1_44=D:\Neto\IMG.img
Isso foi no arquivo de configuração da (Virtual Machine) Bochs...

Fazendo isso ao inves de ele procurar pelo drive A: ele irá carregar diretamente a Image do Diskete que está no Hard Disk, testei com o sombra-0.0.6a e funfou, mas com a imagem que eu criei não. Qual programa vcs me recomendariam para criar a Imagem e gravar em um disquete ? Tesntei usar o grub mas não consegui, alguem sabe como funfa ele Hein????
Registrado
subwaynorth
OS Newbie
*

Karma: 0
Mensagens: 33


Ver Perfil Email
« Responder #3 : Abril 18, 2009, 08:32:59 »

Collucci, esse código montado e linkado não devia ficar com exatamente 512 Bytes?
Registrado
anthony collucci
it not exist
Moderador Global
OS Full Member
*****

Karma: 3
Mensagens: 100


Ver Perfil WWW Email
« Responder #4 : Abril 22, 2009, 09:19:37 »

No Pc real sim e a linha times 510-($-$$) db 1 serve para isso, porem no emulador e possivel usar codigos maiores  ja fiz um de quase 3k e rodou blz no vmware.

att,
Registrado

Bencz
OS Full Member
***

Karma: 0
Mensagens: 112



Ver Perfil
« Responder #5 : Junho 09, 2009, 07:01:14 »

No Pc real sim e a linha times 510-($-$$) db 1 serve para isso, porem no emulador e possivel usar codigos maiores  ja fiz um de quase 3k e rodou blz no vmware.

att,

mas se eu fizer isso em um PC normal ele vai funciona tb o.O ?
Registrado



Kernex
OS Newbie
*

Karma: 0
Mensagens: 13



Ver Perfil
« Responder #6 : Junho 09, 2009, 03:27:28 »

Baixe um programa trial chamado http://www.emu8046.com e compila este código aqui:
 
Código:
name "Boot"

#make_boot#

org 7c00h

mov ax, 07c0h
mov ss, ax
mov sp, 03feh



xor ax, ax
mov ds, ax


mov ah, 00h
mov al, 03h
int 10h


lea si, msg
call print_string

;verifica se realmente existe o Kernel em 0800h:0000h
mov ah, 02h ; função de leitura.
mov al, 10 ; setores para ler (se o Kernel passar de 10 setores, será obrigatória a alteração ;deste valor para o tamanho do mesmo correspondente).
mov ch, 0 ;trilha.
mov cl, 2 ; setor.
mov dh, 0 ; cabeça.
mov bx, 0800h
mov es, bx
mov bx, 0

int 13h


cmp es:[0000],0E9h
je integrity_check_ok

lea si, err
call print_string
.
mov ah, 0
int 16h

mov ax, 0040h
mov ds, ax
mov w.[0072h], 0000h



integrity_check_ok:
jmp 0800h:0000h ;Carrega o Kernel




print_string proc near
push ax
push si
next_char:
mov al, [si]
cmp al, 0
jz printed
inc si
mov ah, 0eh
int 10h
jmp next_char
printed:
pop si
pop ax
ret
print_string endp

msg db "Iniciando o Sistema...",0Dh,0Ah, 0
;se não existir:
err db "Boot Falhado", 0Dh,0Ah, 0
Caso queira criar um kernel com prompt de comando para ele, leia este simples:Tutorial. Aqui no osdebrasil você também acha tutorias em C.
« Última modificação: Junho 09, 2009, 03:33:21 por Kernex » Registrado
Páginas: [1]
  Imprimir  
 
Ir para:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2006-2009, Simple Machines XHTML 1.0 Válido! CSS Válido!