Neste tutorial irei utilizar algumas coisas deste tutorial:
http://www.fergonez.net/files/tut_sistoper.pdf
Irei apenas ajudá-los um pouco mais....
Obs.: Este tutorial não visa ensinar o Basico-do-Basico do Assembly... É uma coisa um pouco avançada, para algo mais básico o tutorial acima é bem indicado....
Bem vamos lá:
Para começarmos baixamos o Emu8086(uma espécie de IDE para Assembly e Assembler tabém :D)
http://www.emu8086.com/
O Fergo RawImage Maker(Usado para Gravar um arquivo .img com o nosso SO)
http://www.fergonez.net/download.php?file=frim.zip
O Ken Kato´s Virtual Floppy Drive(Para Emular um disquete)
http://sourceforge.net/projects/vfd/files/2.1%20%28February%2006%2C%202008%29/vfd21-080206.zip/download (Tutorial sobre ele: http://jefferson-ryan.blogspot.com/2007/10/drive-de-disquete-virtual.html)
E por fim o RawWrite(Usado para gravar o arquivo .img no disquete emulado pelo VFD)
http://www.chrysocome.net/rawwrite
Após ter instalado os programas acima em um diretório esocolhido por você vamos ao que interessa...
Abra o Emu8086 e clique em new como a imagem abaixo:
Agora clique em "empty workspace" como na imagem abaixo:
Agora cole o Codigo abaixo:
org 7C00h ;organiza o offset
;inicialização da pilha
mov ax, 07C0h
mov ss, ax ;seta o SS para 07C0h
mov sp, 03FEh ;aponta para o topo da pilha
;seta segmento de dados
xor ax, ax ;zera AX
mov ds, ax ;seta o segmento de dados par 0000h
;altera o modo de vídeo
mov ah, 00h ;subfucao para setar modo de vídeo
mov al, 03h ;03h = 80x25, 16 cores
int 10h ;interrupt de vídeo
;le dados do disquete
mov ah, 02h ;subfunção de leitura
mov al, 1 ;numero de setores para ler
mov ch, 0 ;trilha ( cylinder )
mov cl, 2 ;setor
mov dh, 0 ;cabeça
mov dl, 0 ;drive ( 00h = A: )
mov bx, 0800h ;ES:BX aponta para o local da memória_
mov es, bx ;onde vai ser escrito os dados_
mov bx, 0 ;0800:0000h ( ES = 0800h, BX = 0000h )
int 13h ;interrupt de disquete
jmp 0800h:0000h ;pula para o local onde está o kernel
;e passa a execução para ele
Este código será responsável por dar o Boot e Abrir o kernel(arquivo que terá uma mensagem básica);;inicialização da pilha
mov ax, 07C0h
mov ss, ax ;seta o SS para 07C0h
mov sp, 03FEh ;aponta para o topo da pilha
;seta segmento de dados
xor ax, ax ;zera AX
mov ds, ax ;seta o segmento de dados par 0000h
;altera o modo de vídeo
mov ah, 00h ;subfucao para setar modo de vídeo
mov al, 03h ;03h = 80x25, 16 cores
int 10h ;interrupt de vídeo
;le dados do disquete
mov ah, 02h ;subfunção de leitura
mov al, 1 ;numero de setores para ler
mov ch, 0 ;trilha ( cylinder )
mov cl, 2 ;setor
mov dh, 0 ;cabeça
mov dl, 0 ;drive ( 00h = A: )
mov bx, 0800h ;ES:BX aponta para o local da memória_
mov es, bx ;onde vai ser escrito os dados_
mov bx, 0 ;0800:0000h ( ES = 0800h, BX = 0000h )
int 13h ;interrupt de disquete
jmp 0800h:0000h ;pula para o local onde está o kernel
;e passa a execução para ele
Ok, agora salve este arquivo com um nome qualquer(de preferencia bootloader) e compile-o como arquivo ".bin";
Agora Crie um novo arquivo e cole este codigo:
org 0000h ;organiza o offset
push cs ;CS = endereço do programa atual
pop ds ;DS = CS
call clearscreen ;chama procedure de limpar a tela
lea si, Mensagem ;SI = endereço da mensagem
mov ah, 0Eh ;subfuncao para imprimir caractere
repeticao:
mov al, [si] ;move para AL o caractere em SI
cmp al, 0h ;compara com 0 ( fim da string )
jz terminou ;caso terminou, pule para ‘terminou’
int 10h ;interrupção de video
inc si ;próximo caractere
jmp repeticao ;repete o processo ate achar o 0
terminou:
mov ah, 0h ;subfuncao de aguardar tecla
int 16h ;interrupção de teclado
mov ax, 0040h ;método de reboot consiste em setar_
mov ds, ax ;o valor do endereço 0040:0072h_
mov w.[0072h], 1234h ;para 1234h e pular para o endereço_
jmp 0FFFFh:0000h ;FFFF:0000h
clearscreen proc ;procedure de limpar a tela
pusha ;coloca todos os reg na pilha
mov ah, 06h ;subfuncao de rolar a tela pra cima
mov al, 0 ;limpa a tela
mov bh, 0000_1111b ;seta as cores ( fundo_texto )
mov ch, 0 ;linha do canto sup. esq.
mov cl, 0 ;coluna do canto sup. esq.
mov dh, 19h ;linha do canto inf. dir. ( 25 )
mov dl, 50h ;coluna do canto inf. dir. ( 80 )
int 10h ;interrupção de vídeo
popa ;repõe os valores dos registradores
ret ;retorna para o código
clearscreen endp
Mensagem db ‘Asembly Brasil SO :D’,0 ;nossa string que vai ser exibida
Agora salve-o e compile-o da mesma forma que fizemos como bootloader(porém salve-o com outro nome de preferencia kernel).
Ok após os dois arquivos acima compilados vamos lá:
Abra o Fergo Raw
Execute o programa. A interface é bem simples e intuitiva. Siga estes passos para criar a imagem ( os números em parênteses fazem relação com a imagem ).
• Escolha o arquivo de destino ( 1 )
• Selecione o loader.bin na segunda caixa de texto ( 2 )
• Marque Head = 0, Cylinder = 0 e Sector = 1 ( 3 )
• Clique em Add ( 4 )
• Selecione o kernel.bin na segunda caixa de texto ( 2 )
• Marque Head = 0, Cylinder = 0 e Sector = 2 ( 3 )
• Clique em Add ( 4 )
• E em seguida clique em ‘Create File!’ ( 5 )
Preste bastante atenção nos setores que você for gravar. Verifique se o resultado final ficou semelhante ao da lista na imagem.
Ok... Agora vamos emular o disquete com o VFD, Abra o arquivo vfdwin.exe como administrador(caso contrário não conseguirá montar o driver virtual)...
Selecione um arquivo para ser o driver virtual(o VFD já tem um arquivo pronto) (1)
Selecione Manual (para ter controle em quando iniciar em quando parar o driver) (2)
Clique em Install (para instalar o VFD) (3)
Clique em Start (para iniciar o VFD) (4)
Abra a aba Drive0 (5)
Clique em Open/Create (1)
Selecione um arquivo (podes colocar um arquivo que ainda não exite mas com extensão ".img") (1)
Clique em File (2)
Clique em Create (para criar o Driver Virtual) e deixe o VFD aberto... (3)
Agora vamos gravar o SO no "disquete"...
Abra o arquivo RawWrite com o arquivo "rawwritewin.exe".
Em Floppy drive deixe o que está "\\\A:" (1)
Em Image file Selecione o arquivo que foi criado com FergoRaw (2)
Clique em Write (para que seja gravado no disquete virtual) (3)
Ok, agora pode fechar o RawWrite novamente...
Na tela do VDF:
Clique em Save... se abrirá uma nova janela:
Selecione um arquivo já existente(ou coloque o nome de um arquivo que ainda não existe com extensão ".img") (1)
Clique em Save (2)
Voltando a tela principal do VFD:
Clique em Close para desmontar o driver virtual...
Pronto!
Seu SO está salvo em Arquivo .img.
Caso tenha um emulador de máquina virtual que reconheça este tipo de arquivo é só usá-lo que já estará funcionando...
Caso não tenha o emulador...
Não se preocupe que no proximo tuto eu ensinarei como emular este SO no Virtual Box...
Comentem Por favor pois é o meu primeiro tuto :D...
Até lá...
Fiquem com DEUS!!
Galera!!!
ResponderExcluirQuando copiar os codigos Altere as 'aspas' pois se deixar do geito que é copiado do site vai dar erro!!
Desde já Grato!! ;)
Fiquem com DEUS!!