OS Dev na prática para x86 – 2. Boot

Domingo, 29 Abril, 2007 por Vovô

Ou “O que acontece depois que eu aperto o botão pra ligar o PC” x]

Bom, na verdade,a maior parte não interessa mesmo, você quase não vai depender de nada do que acontecer aqui, e quando for, eu vou recordar, mas sempre tem gente querendo saber demais então vou explicar.

Em primeiro lugar, durante o boot, o mundo é de 16 bits. O processador está operando em 16 bits, a BIOS está em 16 bits e você também estará no começo do seu OS. Se você não sabe o que isso significa, vá ler um tutorial de assembly, mas pra ter uma idéia, em modo de 16 bits, você acessa por padrão apenas os 16 primeiros bits dos registradores, podendo armazenar até 65536 valores. Isso se refere às instruções também e ao acesso de memória. Felizmente você terá acesso à até aproximadamente 1MB de memória, mas isso fica para o próximo post.

O processador, através de uma avançada técnica insere no registrador IP o endereço 0xFFF0 e em CS o segmento 0xF000 (veremos segmentos no próximo post). Isso te joga no endereço 0xFFFF0 (os macacos-velhos notarão que isso é 1048560, ou seja, o processador executará a instrução no endereço 16 bytes abaixo de 1 MB) e o que tem lá??? Uma instrução jmp x]
O jmp vai mandar o fluxo de execução do processador direto para o BIOS. O BIOS geralmente é mapeado no segmento 0xF000 (não me pergunte como). O BIOS fará sua mágica (que não nos interessa como, por enquanto) e depois irá verificar se o disco de boot existe, e se é bootável mesmo. Se for, o BIOS lerá alguns bytes do disco e mandará esses dados para a memória. Por um acaso, o que existe nesses bytes, num HD, é a MBR.
Para entendermos o que é a MBR, antes temos de conhecer a memória quando o processador está em modo de 16 bits e um pouco de geometria de disco. Os próximos posts abordarão, respectivamente, estes dois assuntos e teremos um post sobre utilização do BIOS antes de entrarmos em detalhes sobre o que a MBR tem de fazer.

OS Dev na prática para x86 – 1. Introdução

Sexta-Feira, 27 Abril, 2007 por Vovô

Bom, todo mundo sabe que os melhores materiais pra programação mediana e avançada na web estão em inglês, e infelizmente nem todo mundo sabe inglês e, no caso, material de os dev tbm é bastante massante, porque você tem que pesquisar muuuuuuuuuito pra fazer uma coisinha de nada, então nesse conjunto de posts vou tentar explicar o que interessa de verdade.
Pra usar esses posts, você precisará de:

Conhecimento em assembly
Conhecimento mediano sobre partições, BIOS
Um compilador (recomendo nasm)
Um emulador de x86 (recomendo bochs ou qemu)
Paciência

Nota: Se você ainda não sabe o que é x86, então seu computador é um x86.