Este projeto implementa um bootloader simples em Assembly que carrega um kernel escrito em C. O kernel é executado em protected mode e possui as seguintes funcionalidades:
- Exibe caracteres na tela via acesso direto à memória de vídeo (
0xB8000). - Lê inputs do teclado via interrupções da CPU (funções
get_char()eget_string()). - Implementa um jogo interativo simples (uma versão do jogo "Termo") dentro do kernel, sem depender de funções da
stdliboustdioda linguagem C. - Evita o uso da biblioteca padrão (
std) para permitir execução freestanding em ambiente bare-metal.
O projeto é composto por três partes principais:
-
Bootloader (
bootloader.asm)- É responsável por inicializar o sistema, carregar o kernel na memória e entrar em protected mode.
-
Kernel Entry (
kernel_entry.asm)- Configura a GDT (Global Descriptor Table) e realiza o jump para o kernel em C.
- Implementa o stack em memória alta (
0x9FC00) e mantém o processador em loop após execução do kernel.
-
Kernel (
kernel.c)-
Contém a função
kernel_main()que inicia o jogo. -
Possui funções auxiliares para:
- Exibição de texto (
putchar,print_string,printk). - Entrada de dados (
get_char,get_string). - Comparação e manipulação de strings (
strcmp,strcpy,strlen).
- Exibição de texto (
-
Implementa a lógica do jogo "Termo", incluindo verificação de letras corretas e posicionamento.
-
/projeto
├── bootloader.asm # Código do bootloader em Assembly
├── kernel_entry.asm # Inicialização do kernel, entrada em protected mode
├── kernel.c # Kernel em C com o jogo Termo
└── README.md # Este arquivo
- Linux (Ubuntu/Debian recomendado)
- NASM (≥ 2.14)
- GCC com suporte a
-m32(gcc-multilib) - LD (linker para ELF 32-bit)
- QEMU para emulação x86
Instalação das ferramentas necessárias:
sudo apt update
sudo apt install nasm gcc-multilib qemu-system-x86nasm -f bin bootloader.asm -o bootloader.bin
nasm -f elf32 kernel_entry.asm -o kernel_entry.ogcc -m32 -ffreestanding -c kernel.c -o kernel.old -m elf_i386 -Ttext 0x10000 kernel_entry.o kernel.o -o kernel.bincat bootloader.bin kernel.bin > os-image.binqemu-system-i386 -fda os-image.bin- A tela do QEMU exibirá as mensagens do kernel e iniciará o jogo.
- Você poderá digitar as palavras diretamente no teclado do emulador.