Este sistema operacional tem como objetivo executar em computadores antigos, focado preferencialmente no recorte entre o 386 SX até o Pentium 133, inicialmente suportando maquinas com até 16 MiB de RAM.
Tenho como inspiração alguns projetos modernos de sistema operacional para equipamentos antigos ou mesmo inspirados em sistemas legados como o SymbOS, UZIX, HellenOS, SerenityOS, Haiku.
Para compilar o projeto se deve primeiro seguir os requisítos abaixo, e após instala-los, executar os comandos abaixo:
chmod +x configure
./configure
make clean
make run
- Sempre que compilar em um computador novo, mesmo que copiando a pasta, execute antes o
./configure
pois ele gera apontamentos que funcionam apenas na maquina local
Para depurar basta executar o comando:
-
No macOS:
make debug_macos
-
No Linux:
make debug_linux
Recomendo a utilização do Bochs, porém não recomendo a utilização da versão enviada via HomeBrew por suas limitações, neste caso baixe o código fonte diretamente do site e compile com o comando:
Copie o arquivo configure_bochs_macosx
do diretorio Extra, para o diretorio do código do Bochs
chmod +x configure_bochs_macosx
./configure_bochs_macosx --with-sdl2 --enable-debugger --enable-plugins --enable-cdrom --enable-pci --enable-show-ips --enable-x86-64 --enable-fpu --enable-all-optimizations --enable-sb16 --disable-gameport --with-wx
make
sudo make install
Ira gerar uma versão com o suporte mínimo de emulação e depuração com suporte as interface SDL2, porém sem suporte a Rede.
-
Núcleo e Módulos Controladores com código 16/32bits misto: Sempre observar os BUGS presentes nos processadores, principalmente os que afetam o 386 e 486, pois são difíceis de contornar, um exemplo é no estágio 2 da inicialização, existem varios comandos
a32 nop
usados para contornar erros das versões iniciais do 386 que crashavam ao mudar repentinamente de 32 bits para 16 bits. -
Para evitar distorções, a paleta de cores em 8bits, será RGB de 6 Bits e o restante do espaço uma paleta monocromatica, limita um pouco o RGB porém as cores ficam mais fieis ao original RGB ao diminuir a escala.
- Unix-like: macOS, Linux, FreeBSD ou WSL
- NASM
- SmallerC
- MinixFS Tool
- DOSBox (No macOS usar a versão do Homebrew)
- Bochs
- Qemu
- Bochs com Depuração
- mtools (Suporte a FAT)
- 86box
- Visual Code
- Distro: Imagens geradas durante a compilação
- Incluir: Pasta global de Include da linguagem C
- Nucleo: Núcleo do Sistema e seus Módulos
- Inicial: Sistema de Inicialização, contendo todos as variações do Estágio 1 e o Estágio 2
- Programas: Programas do BRASIS
-
Ao iniciar é carregado pela BIOS o estágio 1 do sistema de inicialização, que é responsável por carregar do disco o estágio 2 na posição 0x6000 da memória RAM e executá-lo.
-
Executando o estágio 2, este é responsável por abrir o arquivo de configuração na raiz do disco, e carregar o núcleo e uma imagem de disco contendo os módulos para a memória, posteriormente executando o núcleo.
-
O Núcleo é responsável por inicializar os Módulos conforme sua ordem de relevancia.
- Ser Open Source (De verdade, usando apenas licenças BSD ou Dominio Publico, jamais GPL)
- Código Fonte em Português, afinal o mundo da tecnologia já em em inglês, e muita coisa da retrocomputação está ou em espanhol ou em japonês, e falta código fonte facilmente legível por lusófonos.
- Ser leve o suficiente para executar em um 386.
- Ter uma interface gráfica inspirada na no inicio dos anos 90, principalmente no Windows 3.11 e OS/2 3.0, porém com um menu "Iniciar", usar como inspiração no BeOS/Haiku, CDE
- Ter o próprimo ambiente de desenvolvimento mínimo baseado no SmallerC, (Testar a portabilidade do YASM, NASM ou em último caso do FASM)
- Ser totalmente independente de softwares modernos e pesados, reescrevendo sempre que possível os programas com enfase em gerar o código mais enxuto possível e com menor consumo de memória.
- Usar padrões e tecnologias modernas sempre que possível, por exemplo, usar Markdown como linguagem de documentação, YAML ou JSON como formato de dados, UTF-8 para armazenar texto.
- Implementar aos poucos suporte para Hardwares antigos, usar 86box como inspiração e consulta do comportamento dos equipamentos.
Componente | Requisitos Mínimos | Recomendado |
---|---|---|
Processador | 386 SX 16 Mhz | 386 SX 25 Mhz |
RAM | 3 MiB | 8 MiB |
Disquete | 3 1/2 - 1.44 MiB | 3 1/2 - 1.44 MiB |
Extensão | Descrição |
---|---|
.Prog | Programa / Aplicativo |
.Modulo | Módulo do Núcleo |
.Nucleo | Núcleo do sistema |
.Inicial | Sistema Inicial |
.Imagem | Imagem de Disco |
.bin | Binario 16 bits |
.cfg | Arquivo de configuração |
.tga | Imagem Targa |
.md | Documento de Texto MarkDown |
- Suporte a Tradução
- Leitura de Parâmetros do Gerenciador de Inicialização
- Gerenciador de Memória
- Status: Inicializa estruturas, calcula memória livre, e aloca memória em endereçamento fisico
- Interface de Depuração
- Status: Emissor de mensagens de inicialização em video texto
- Multitarefa
- Gerenciador de Processos
- Disquete
- Status: Apenas na Inicialização, faltando Modulo do Núcleo
- Video EGA/VGA 16 cores
- Video SVGA Clássico (640x480, 800x600, 1024x768) a 16 bits
- Video VBE 2.0 (Modos diversos)
- Disco IDE
- Disco SATA
- PCI
- PCMCIA / PCCard
- Rede NE2000
- Rede Orinoco Silver/Gold
- Sistema de Arquivos UNIX Archive (AR) (Usado na inicialização)
- Sistemas de Arquivos MinixFS (Versões 1 e 2)
- Status: Implementado suporte a Versão 1 com 30 caracteres de nome
- Sistemas de Arquivos FAT (Versões 12, 16 e 32)
- Status: Apenas Primeiro estágio da inicialização em FAT12
- Gerenciador de Video
- Biblioteca Gráfica
- Gerenciador de Programas (Interface principal com o usuário)