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.