Categorias
Como fazer o seu próprio sistema operacional
Este tutorial cobre todo o processo de criar o seu próprio pequeno sistema operacional. Ele inclui o módulo de inicio e o do núcleo.
Fazendo o seu próprio Sistema Operacional
Utilitários necessários:
Normalmente, quando o computador inicia, ele tentará carregar 512 bytes
do setor 1 head 0, cilindro 0 de uma unidade de disquetes A até
0000H: 7C00h e atribuir-lhe o controle.
Se isto falhar, uma unidade de disco rígido é utilizada.
Este tutorial cobre a inicialização através de disquetes, o mesmo princípio é
utilizado para iniciar a partir do disco rígido. Usar o dispositivo de disquetes tem várias vantagens:
- Você pode manter o seu sistema operacional atual (Windows, DOS ...).
- É fácil modificar o registro de incialização de uma unidade de disquetes.
Exemplo de um programa de inicialização simples:
; directive to create BOOT file:
#MAKE_BOOT#
; Boot record is loaded at 0000:7C00,
; so inform compiler to make required
; corrections:
ORG 7C00h
; load message address into SI register:
LEA SI, msg
; teletype function id:
MOV AH, 0Eh
print: MOV AL, [SI]
CMP AL, 0
JZ done
INT 10h ; print using teletype.
INC SI
JMP print
; wait for 'any key':
done: MOV AH, 0
INT 16h
; store magic value at 0040h:0072h:
; 0000h - cold boot.
; 1234h - warm boot.
MOV AX, 0040h
MOV DS, AX
MOV w.[0072h], 0000h ; cold boot.
JMP 0FFFFh:0000h ; reboot!
new_line EQU 13, 10
msg DB 'Hello This is My First Boot Program!'
DB new_line, 'Press any key to reboot', 0
Copie o exemplo acima para o editor fonte emu8086 e
pressione o botão [Compile and Emulate].
O emulador carrega automaticamente o arquivo “.boot" para 0000H: 7C00h.
Você pode executá-lo apenas como um programa regular, ou pode usar o menu
Virtual Drive para Write 512 bytes at 7C00h to Boot Sector
do drive de disquete virtual (arquivo FLOPPY_0 na pasta do emulador).
Depois de escrever o seu programa na unidade de disquetes virtual, você pode selecionar
Boot from Floppy do menu Virtual Drive.
Se você estiver curioso, você pode escrever
o disquete virtual (FLOPPY_0) ou arquivo ".boot" para um disquete real e
inicializar o computador a partir dele, eu recomendo
utilizar "RawWrite para Windows" de:
http://uranus.it.swin.edu.au/ ~ jn / linux
(note que este não é compatível com o setor de inicialização MS-DOS
por isso é melhor usar e esvaziar o disquete, embora ele deva ser formatado pela
IBM (MS-DOS)).
Arquivos ".Boot" estão limitados a 512 bytes (tamanho do setor) e, portanto, se o seu
Sistema Operacional vai crescer acima desse tamanho, você deve usar o programa de iniciar
para carregar dados de outros setores. Um bom exemplo de sistema operacional pequeno pode
ser baixado aqui:
micro-os_loader.asm
micro-os_kernel.asm
emu8086.inc
Para criar extensões para o seu Sistema Operacional (mais de 512 bytes), você pode usar
arquivos ".Bin" (selecione "BIN Template" no menu "File" -> "New").
Para escrever um arquivo ".Bin" para o disquete virtual selecione "Write .Bin file to floppy..."
no menu "Virtual Drive" do emulador:
Write_bin.gif
Você também pode usar isto para escrever arquivos ".boot"
Setor em:
cylinder: 0
sector: 1
head: 0
É um setor de incialização!
Uma estrutura típica de drive de disquete:
Floppy.gif
- O disquete tem 2 lados, e há 2 cabeças para cada lado (0 .. 1), estas cabeças estão se movendo acima do disco.
- Cada lado tem 80 cilindros (0 .. 79).
- Cada cilindro tem 18 setores (1 .. 18).
- Cada setor tem 512 bytes.
- Tamanho total do disco flexível é: 2 x 80 x 18 x 512 = 1474560 bytes.