O Diário do Desenvolvimento de um Sistema Operacional
Escrito por : Miraldino Paulo Dória
Olá, meu nome é Miraldino Paulo Dória, nasci aos ( 28/01/2003 ), e eu estou escrevendo esse livro aos ( 31/01/2022 ), então isso quer dizer que estou com 19 anos atualmente. Sou estudante do ensino médio e estou na 12ª Classe Cursando como Técnico Médio Informático.Estou escrevendo isso porque senti que é importante documentar pequenas coisas que sentimos que são 100% importantes p’ra nós.
E desenvolver um Sistema Operacional é algo
muito significativo p’ra mim, já já vou contar o porquê.
Eu nunca escrevi um livro, nunca editei nenhum
e nem me considero um grande escritor (hahahaha), então esse livro vai ta feio em edição, mas bonito em palavras.
Bom, como essa é a introdução desse meu
diário, eu vou contar aqui “como eu aprendi a programar e porquê que eu decidi fazer isso”.
Então, eu decidi aprender a programar depois
que vi pela primeira vez o jogo ( GTA 5 ), eu fiquei tão emocionado com a adrenalina do jogo que falei pra mim mesmo que ia fazer algo parecido (hahahah)...
Isso foi em 2017, mas eu só aprendi a
programar em 2018, e eu nem era informático na altura, eu era um Técnico Médio de Construção Civil.
E como eu vi que estava 100% na área errada,
eu mudei de curso e até o momento sinto que foi uma das melhores escolhas que eu já fiz em toda minha vida.
Minha primeira Linguagem de Programação foi
“Python”, na verdade o que me levou a estudar “Python” foi o Hacking, eu queria é começa a criar ferramentas que hackers podessem utilizar.
Com o tempo, eu fui aprendendo outras
linguagens como ( C, C#, Bash Shell Script, PHP, SQL, Perl e Ruby ), as duas últimas só aprendi a fazer uns programas bem simples que rodam no Linux.
Então, antes de tudo eu quero que você, meu
caro(a) leitor(a), saiba o significado de alguns termos que eu vou utilizar aqui, e o significado de alguns desses termos ou informações eu peguei no site da Wikipédia ( https://pt.wikipedia.org ).
Atenção : Se você já tiver conhecimentos sobre
o significado dos termos, pode pular se quiser.
S.O ( Sistema Operacional ) : Segundo a
( Wikipédia ), Um Sistema Operacional é um programa ou um conjunto de programas cuja função é gerenciar os recursos do sistema (definir qual programa recebe atenção do processador, gerenciar memória, criar um sistema de arquivos, etc.), fornecendo uma interface entre o computador e o usuário ou utilizador. Embora possa ser executado imediatamente após a máquina ser ligada, a maioria dos computadores pessoais de hoje o executa através de outro programa armazenado em uma memória não-volátil ROM chamado BIOS num processo chamado "bootstrapping", conceito em inglês usado para designar processos autossustentáveis, ou seja, capazes de prosseguirem sem ajuda externa. Após executar testes e iniciar os componentes da máquina (monitores, discos, etc), o BIOS procura pelo sistema operacional em alguma unidade de armazenamento, geralmente o Disco Rígido, e a partir daí, o sistema operacional "toma" o controle da máquina. O sistema operacional reveza sua execução com a de outros programas, como se estivesse vigiando, controlando e orquestrando todo o processo computacional.
Kernel : Segundo a ( Wikipédia ), Em
computação, o núcleo ou kernel é o componente central do sistema operativo da maioria dos computadores; ele serve de ponte entre aplicativos e o processamento real de dados feito a nível de hardware. As responsabilidades do núcleo incluem gerenciar os recursos do sistema (a comunicação entre componentes de hardware e software). Geralmente como um componente básico do sistema operativo, um núcleo pode oferecer a camada de abstração de nível mais baixo para os recursos (especialmente processadores e dispositivos de entrada/saída) que softwares aplicativos devem controlar para realizar sua função. Ele tipicamente torna estas facilidades disponíveis para os processos de aplicativos através de mecanismos de comunicação entre processos e chamadas de sistema.
Hardware : Segundo a ( Wikipédia ), O hardware
( pronúncia: 'rarduér') é um termo técnico (e anglicismo de engenharia eletrônica) que foi traduzido para a língua portuguesa como equipamento, e pode ser definido como um termo geral da língua inglesa, que se refere à parte física de computadores e outros sistemas microeletrônicos. No âmbito eletrônico, o termo "hardware" é bastante utilizado, principalmente na área de engenharia de computação, e se aplica à unidade central de processamento, à memória e aos dispositivos de Equipamentos de computadores. entrada e saída, bem como a todos os componentes físicos de computadores. O termo "hardware" é usado para fazer referência a detalhes específicos de um dado equipamento eletrônico, incluindo-se seu projeto lógico pormenorizado bem como a tecnologia de seus componentes.
BIOS : Segundo a (Wikipédia), O ou a BIOS (um
acrônimo de Basic Input/Output System, em português Sistema Básico de Entrada/Saída, e também conhecido como System BIOS, ROM BIOS ou PC BIOS) é firmware, gravado em uma memória não volátil, usado para realizar a inicialização do hardware durante o processo de inicialização (por meio do botão de inicialização da máquina) e para fornecer serviços de tempo de execução para sistemas operacionais e programas. O firmware BIOS vem pré-instalado na memória permanente da placa mãe do computador e é o primeiro software a ser executado quando se liga a máquina. O nome origina do Sistema Básico de Entrada/Saída usado no sistema operacional CP/M em 1975.
Bootloader : O Bootloader ou Inicializador é o
primeiro programa a ser carregado e executado no computador, ele possui a responsabilidade de organizar e levantar o Sistema Operacional.
Software : Software é um termo técnico (e
anglicismo de tecnologia da informação) que foi traduzido para a língua portuguesa como suporte lógico e trata-se de uma sequência de instruções a serem seguidas e/ou executadas, na manipulação, redirecionamento ou modificação de um dado (informação) ou acontecimento. "Software" também é o nome dado ao comportamento exibido por essa sequência de instruções quando OpenOffice.org writer executada em um computador ou máquina semelhante, além de um produto desenvolvido pela engenharia de software e inclui não só o programa de computador, propriamente dito, mas, também, manuais e especificações. Para fins contabilísticos e financeiros, o software é considerado um bem de capital.
Assembly : Segundo a (Wikipédia), Assembly ou
linguagem de montagem é uma notação legível por humanos para o código de máquina que uma arquitetura de computador específica usa, utilizada para programar códigos entendidos por dispositivos computacionais, como microprocessadores e microcontroladores. O código de máquina torna-se legível pela substituição dos valores em bruto por símbolos chamados mnemónicos.
Linguagem C : Segundo a (Wikipédia), C é uma
linguagem de programação compilada de propósito geral, estruturada, imperativa, procedural, padronizada pela Organização Internacional para Padronização (ISO), criada em 1972 por Dennis Ritchie na empresa AT&T Bell Labs para desenvolvimento do sistema operacional Unix (originalmente escrito em Assembly). C é uma das linguagens de programação mais populares e existem poucas arquiteturas para as quais não existem compiladores para C. C tem influenciado muitas outras linguagens de programação (por exemplo, a linguagem Java), mais notavelmente C++, que originalmente começou como uma extensão para C. Linux : Segundo a (Wikipédia), Linux é um termo popularmente empregado para se referir a sistemas operacionais que utilizam o Kernel Linux. O núcleo (ou kernel, em Inglês) foi desenvolvido pelo programador finlandês Linus Torvalds, inspirado no sistema Minix.
Windows : É uma saga de Sistemas Operacionais
criados pela Microsoft, e atualmente está na sua versão 11.
Bom, agora eu vou contar p’ra você como tudo
começou...
“Eu lembro que quando eu tinha 16 anos, eu era
desenvolvedor de Softwares de Gestão com Banco de Dados, como ‘aqueles programas que encontramos nas escolas, universidades, super-mercados, farmácias e etc‘, utilizando a Linguagem de Programação C# (C-Sharp).
Eu gostava das coisas que eu fazia na altura,
gostava tanto que certo dia eu pensei que ‘Em vez de Desenvolver Pequenos ou Simples Programas de Gestão, eu poderia desenvolver um Sistema Operacional de Gestão.’, Algo como por exemplo o Sistema Operacional Windows ou Linux mas 100% focado só no Gerenciamento de Escolas, Super- Mercados, Universidades e etc.”
E foi mais ou menos assim que surgiu o meu
desejo por criação de Sistemas Operacionais.
Eu vou ter que admitir aqui que a ideia que eu
tive na altura é meio que ousada ou ambiciosa, porque você já imaginou um garoto de 16 anos criando um Sistema Operacional completo focado só em gestão ? Se grandes Softwares de gestão são complicados de desenvolver imagina um Sistema Operacional ? Hahahaha...
Então com isso, eu falei p’ra mim mesmo na
altura que, antes dos 25 anos, eu teria um Sistema Operacional.
Isso quer dizer que não importa se vai ser um
S.O p’ra Gestão, um S.O de Servidor ou até mesmo um pequeno S.O, mas desde que seja considerado um Sistema Operacional, p’ra mim já é o suficiente (hahahaha)...
Então, “o mais importante pra mim, é cumprir
com a promessa de fazer um Sistema Operacional antes mesmo de completar 25 anos de idade”.
Então, em 2021, eu consegui um Curso de
Segurança da Informação da Desec Security, uma empresa que forma Pentesters e Presta Serviços de Invasão também. E nesse mesmo curso tinha uma parte que só falava sobre Assembly x86/x64 para Windows e para Linux, Mas infelizmente eu fiquei olhando os vídeos e da primeira vez eu disse “Não vou perder meu tempo aprendendo Assembly.”, Isso porque eu estava tão apegado a Segurança da Informação que meu foco p’ra Desenvolvimento de Sistemas Operacionais não existia mais.
Mas aconteceu que alguns meses depois, eu
fiquei procurando por livros que falavam sobre Assembly e Desenvolvimento de Sistemas Operacionais, e na sua maioria eu só encontrava livros em inglês, excepto um, mas o código era 100% escrito em Assembly, e eu não sabia nada de Assembly por negligência minha.
Então eu deixei passa, eu parei de procurar, e
voltei a me concentrar só em Segurança da Informação.
Depois de alguns meses, acontece que eu
descobri que um de meus colegas de classe tinha uma série que eu gostava muito e até hoje ainda gosto, chamada “Pessoa de Interesse.”, eu não sei se você já assistiu, mas nunca assistiu, eu aconselho muito você a assistir (hahahaha)…
A série conta que depois dos ataques de 11 de
Setembro de 2001, nos Estados Unidos da América, um programador junto de seu amigo decidiram criar uma Máquina ou um Sistema para detectar atos de terrorismos antes que eles podessem acontecer, só que essa mesma máquina conseguia ver tudo, desde atos de terrorismo até pequenos assassinatos premeditados.
Agora talvez você esteja se perguntando...
“Mas o que isso têm haver com você ?”, e minha resposta é : A Máquina.
A Máquina era um Sistema Operacional junto de
uma Inteligência Artificial, isso porque ela conseguia aprender e interpretar palavras e ações.
E isso despertou novamente o meu desejo por
criar um Sistema Operacional. E uma outra coisa me fez chegar até aqui foi o jogo ( Watch Dogs ).
O jogo conta que em 2013, a cidade de Chicago
decidiu implementar um Sistema para gerenciar a cidade, esse Sistema é conhecido como ( ctOS ). E segundo uma descrição, diz que...
“O Sistema Operacional Central abreviado como
ctOS, pois em inglês é The Central Operating System, é um software de computador que controla toda a rede de informações de uma cidade, incluindo todos os dados pessoais. O ctOS dessa cidade não apenas armazena e registra cada momento da vida digital do cidadão, e é controlado por empresas privadas que usam o software para seus próprios ganhos, e pode usar as informações obtidas contra as pessoas para vender produtos e influenciar visões de mundo. Em 2016, o ctOS 2.0 substituiu este sistema, sendo implementado primeiramente em São Francisco.”
E esse Sistema controla : “Bloqueadores e
Espinhos, Controle de Pontes, Grade Elétrica, Luzes/Controle das Luzes do Tráfego, O Trem L, Sistemas de Tubos de Vapor, Sistema de Prevenção de Crimes, Câmeras de Segurança, ATMs/Contas bancárias, TVs e alertas de vídeo, Informações privadas de cidadões, Comunicações de celulares, Serviços conectados a internet, Reconhecimento facial, Faróis, Veículos, Celulares/Telefones.”
Eu sei que nesse instante você falou que “Olha
só, você nunca vai criar esse Sistema.” (hahahaha)... Eu sei que você falou isso, porque eu já disse isso p’ra mim várias vezes também (hahaha).
Mas o foco aqui é novamente o ( Sistema ), e é
exatamente isso que me impressiona e me motiva a estudar mais sobre ( Sistemas Operacionais ) e ( Desenvolvimento de Sistemas Operacionais ). E uma outra coisa, pessoa ou personagem posso assim dizer que faz eu acordar e falar “Ta hora de Estudar Sobre S.O”, é um personagem do jogo ( Watch Dogos ) chamado, ( Raymond Kenney ) ou ( T- Bone ) , quem me conhece sabe que eu nunca ia deixar passa essa (hahahaha), e segundo o jogo, a sua história é a seguinte :
“T-Bone era um dos engenheiros de software
contratados pela Blume para construir o ctOS, já que ele possui extremo conhecimento sobre o sistema mas ele começou a achar que aquilo era errado pois isso acabaria com a privacidade das pessoas, então a Blume o demitiu. Ele foi tentando acabar com a Blume indiretamente mas ela o descobriu e foi atrás dele, atê que ele causou um apagão em 2003 que matou onze pessoas. Ele teve que sair de Chicago e deixar tudo para trás.”
E esse é o Perfil de T-Bone ou Raymond Kenney
Então foi desse jeito que meu antigo desejo por ter um “Sistema Operacional”, voltou.
E em Novembro de 2021, esse desejo ficou ainda
mais forte e isso me levou a compilar um Kernel muito simples, mas que em seguida mudou muita coisa na minha vida.
Foi no dia 16 de Novembro de 2021, eu fui até
o Google e pesquisei por ( Simple Kernel Github ), e isso fez com que os Bots do Google fossem até ao site do Github que também foi criado pelo mesmo criador do Kernel Linux, ou seja Linus Torvalds, fazer uma busca por alguns kernels bem pequenos e muito simples, e nessa mesma busca por pequenos kernels um deles chamou muito a minha atenção, é um Kernel bastente simples que tinha sido desenvolvido utilizando C e Assembly( https://github.com/debashisbarman/Simple-Kernel- in-C-and-Assembly ) e nesse mesmo dia, eu compilei o código desse Kernel, executei ele e no mesmo instante mostrou isso pra mim : Eu posso chega a afirmar que essa foi a melhor coisa que um computador já exibiu pra mim até hoje (hahahaha)… brincadeira, mas foi muito importante p’ra mim, posso dizer que foi como para os Americanos o homem ter dado o primeiro passo na Lua.
E no mesmo mês de Novembro, mas agora no dia
19, eu escrevi o mesmo código desse Kernel simples, executei ele e funcionou do mesmo jeito. Eu fiz isso porque nos dias 17 e 18, eu fiquei estudando sua estrutura e tentando entender como aquilo funcionava, e pra falar verdade eu não tinha entendido a 100% na altura, mas já era alguma coisa (hahahaha)...
E um dia depois, ou seja no dia 20 de
Novembro, eu consegui escrever meu primeiro Bootloader usando a Linguagem de Programação Assembly, e ele era tão simples que mostrava apenas uma mensagem dizendo “Hello World”, isso porque eu estava fazendo um Curso de Desenvolvimento de S.O com ( Wender Francis ) usando Assembly.
E depois disso eu continue estudando,
estudando e estudando sem parar...
E agora no dia 04 de Janeiro de 2022, depois
de ter estudado como um escravo trabalhando sem descanso (nem tou exagerando)... Eu escrevi oficialmente o meu primeiro Kernel usando Linguagem C, isso porque eu tinha encontrado alguns tutoriais explicando sobre como criar um Kernel usando C e Assembly do zero, mas esses mesmos tutoriais estavam em inglês, daí eu usei o Google Tradutor e fui estudando. É o que eu sempre digo, um autodidata de verdade nunca vê dificuldades quando quer aprender alguma coisa.
E esse mesmo Kernel que eu fiz do Zero, eu
lembro que levei o código fonte junto de uma foto em folhas do tipo A4, p’ra escola no primeiro dia que as aulas do 2º trimestre retornaram e eu entreguei as folhas A4 p’ro meu antigo Professor de Programação, alguém que eu admiro muito e tenho muita consideração e respeito, o “Engenheiro Gaspar”.
A imagem do meu primeiro Kernel :
Agora na madrugada do mesmo dia que eu decidi escrever esse livro, ( 31/01/2022 ), eu meio que fiz uma coisa que acho que precisava ser feito. Bom, se você não sabe, um Sistema Operacional é dividido por partes, e uma das partes muito importante é parte dos ( Drivers ). Eu vou tenta te explica rápido sobre isso, então, você consegue escrever coisas em um computador pelo Teclado certo ? Você também consegue usar o Mouse ou comumente chamado de Rato, certo ?
Então se suas respostas foram “SIM”, isso
significa que você está utilizando os Drivers de “Teclado” e de “Mouse”, e existe outros Drivers por aí.
Bom, eu te expliquei isso primeiro porque, um
Kernel sem um Driver de Teclado só vai exibir mensagens e nada mais, você pode fica clicando em qualquer tecla que você quiser ele só vai fica parado e olhando p’ra você, tal como o meu primeiro Kernel.
Então olha que eu estava cansado de ter um
Kernel que só olhava pra mim e nada mais, eu queria pode escrever alguma coisa na tela, e foi isso que eu fiz, eu implentei um Driver de Teclado (hahaha), porém o código nem é meu, e até o momento nem faço ideia de como escrever um Driver de Teclado, isso porque eu não tenho conhecimento nenhum sobre ( IRQ, PIC, GDT, IDT e ISRs ).
E você deve ta se perguntando “Mas o que falta
p’ra você aprender essas coisas ?”, nada, simplesmente a teoria sobre isso é um pouco pesada p’ra mim até o momento. Mas eu não fiz uma implementação do tipo “As Cegas”, eu sabia do que estava fazendo, só não entendi ainda o código, mas a lógica eu fiz certo e está como na imagem da capa deste livro. “O que foi ? Achou que aquilo se escreveu sozinho ?” (hahaha)...
Então, eu posso dizer que estou meio que feliz
e meio que triste, tou feliz porque meu Kernelzinho está funcionando até o momento e está com suporte de um simples Driver de Teclado, e estou triste porque o código não é meu e nem faço ideia de como escrever algo parecido.
Bom, até o momento é isso aí, eu penso em
fazer desse livro um pequeno diário no momento, e quem sabe algum dia se torne um livro de inspiração para outras pessoas que desejarem mergulhar no mundo do ( Desenvolvimento de S.O ). Então estou na madrugada do dia 01 de Fevereiro de 2022, Graças a Deus, e apartir de hoje tudo que será escrito aqui vai ser considerado uma nova experiência dessa minha aventura no mundo do ( Desenvolvimento de Sistemas Operacionais ).
Hoje é 04 de fevereiro de 2022, e são 03:10,
eu não tou com insônia, mas algo tirou o meu sono nessa madrugada, “Um Kernel com Suporte a Teclado, sem configuração de IDT”. Eu não sei se isso é normal, porque até o momento ainda não estudei ou vi algo parecido com isso. Então, durante esses dias que se passaram eu fiquei estudando sobre ( IDT, IRQ, PIC ) e outras coisas ligadas a Interrupções.
Segundo o site ( http://wiki.osdev.org/ ), que
na realidade é como um lugar para se estudar ( Desenvolvimento de Sistemas Operacionais ), diz que :
“Interrupções são sinais de um dispositivo,
como um teclado ou um disco rígido, para a CPU, dizendo para parar imediatamente o que estiver fazendo no momento e fazer outra coisa. Por exemplo, um controlador de teclado pode enviar uma interrupção quando uma tecla de caractere é pressionada. Então o sistema operacional pode exibir o personagem na tela imediatamente, mesmo que a CPU estivesse fazendo algo completamente não relacionado antes, e retornar ao que estava fazendo depois. Quando surge uma interrupção específica, a CPU procura uma entrada para essa interrupção específica em uma tabela fornecida pelo sistema operacional. No modo protegido x86, a tabela é chamada de Interrupt Descriptor Table (IDT)e pode ter até 256 entradas, mas o nome desta tabela e o número máximo de entradas que ela pode ter podem variar de acordo com a arquitetura da CPU. Depois que a CPU encontra a entrada para a interrupção, ela pula para o código para o qual a entrada aponta. Esse código executado em resposta à interrupção é conhecido como rotina de serviço de interrupção (ISR) ou um manipulador de interrupção .” Então por padrão, ou pelo o que eu achei normal até o momento, para se utilizar por exemplo o Driver de Teclado, é necessário fazer a configuração do ( IDT ) e escrever alguns códigos para configurar também o ( IRQ ), porque o ( IRQ ) é o responsável pelas Requisições de Interrupção.
Então, se por padrão é necessário fazer essas
configurações, “Como esse Kernel ta com suporte a Teclado sem tais configurações ?”, é exatamente isso que tira o meu sono e o meu socego nesse exato momento.
Existe um ditado na programação que diz que
“Se tiver funcionando, não mexa.”, eu não gosto desse ditado, porque é como que se o autor estivesse dizendo o seguinte... “O código sendo seu ou não, se tiver funcionando e tudo estiver correndo na perfeição, não mexa.”, só que têm um problema, eu quero mexer, eu gosto de mexer e eu quero entender porquê que tah funcionando desse ou daquele jeito, porque eu sou assim.
Eu vou ter que admitir que o código desse
Kernel ai é baste simples e elegante, eu nunca vi nada parecido até agora, e na verdade o código é de um Tutorial que mostra ( Como Criar um Kernel utilizando Linguagem C e Assembly ).
O Tutorial é em inglês, mas eu utilizei uma
extensão que eu baixei no meu navegador para Traduzir todos conteúdos de um outro idioma p’ra Português. “Ideia da minha amiga Patrícia :3” (https://www.codeproject.com/Articles/1225196/ Create-Your-Own-Kernel-In-C-2)
Esse tutorial passa toda base necessária para
se criar um Simples Kernel com Suporte a Teclado sem muitas configurações, só alguns códigos pra imprimir alguns caracteres na tela, colocar cor de fundo, configurar o teclado e etc, coisas simples, que no final acabaram por apresentar um resultado assustador pra mim.
Mas como diz na descrição, na realidade esse
Kernel ou Kernel completo têm muitas outras funcionadalidades, como ( Exibir números, Teclado E/S, Caixa de Desenho e Tic-Tac-Toe).
E agora você provavelmente deve tah se
perguntando, “Isso te poupa de estuda muita coisa, então não era p’ra você ta feliz ?”.
Minha resposta p’ra essa pergunta é : Não!
E tal como meu irmão “Elias” sempre diz, “O barato custa caro.”.
Eu poderia simplesmente adaptar esse código,
até porque ele é simples e funcional não é ? mas agora suponhamos que eu queira fazer uma outra operação que exige uma nova requisição de interrupção ? Não tenho um IDT configurado, não tenho o ISR configurado, e depois ? Como vai ser ?
Daí eu penso que questões como essas devem ser
analisadas primeiro, e eu penso que é por isso que minha mente não aprovou esse código na hora tal como ela fez com o primeiro que deu suporte ao Driver de Teclado mesmo ele sendo bastente simples. E quando eu digo aprovar, não quer dizer que o código não ta bom ou algo parecido, o aprovar que eu digo aqui é como se o código estivesse perfeito mas, não é o adequado p’ra mim, talvez seja p’ra você, p’ra seu colega de turma (de escola, faculdade, trabalho) ou sei lá pra quem for, mas p’ra mim não é.
Então, esses 2 ou 3 dias que se passaram, eu
fiquei estudando muito sobre (como fazer as coisas do jeito certo) hahahaha... ou seja eu procurei saber mais sobre a teoria por trás do ( IDT, GDT, ISR, IRQ, ... ), e como configurar o IDT para da suporte de teclado no Kernel, e penso que daqui a mais uma ou 3 semanas no máximo, eu vou ter um Kernel com suporte ao meu próprio Driver de Teclado.
“Isso sim é algo que me deixa feliz :).”
Hoje é 06 de Fevereiro de 2022, 14:58, e decidi escrever aqui mais um dos acontecimentos “Históricos” pra mim, dessa minha aventura no mundo do Desenvolvimento de S.O, então é nada mais nada menos que o Driver de Teclado.
Então, finalmente eu tou conseguindo entender
sobre as configurações do IDT, o conceito por trás dos IRQ e o resto das coisas ligadas no desenvolvimento de um Driver de Teclado Simples no caso.
E como esses conhecimentos não são só p’ra
deixar na teoria, hoje eu decidi criar um Driver de Teclado primeiramente se baseando no código do primeiro Driver de Teclado que eu encontrei.
E como resultado :
Ele funciona, porém com alguns erros :)
na verdade são só 2 erros, e o primeiro é que
a função que limpa a tela, não ta funcionando do jeito normal, em vez de ele limpar só os primeiros textos padrão que é isso ai ( SeaBIOS ... ) e o resto, ele acaba limpando tudo, incluindo as coisas que vêm depois da função ser chamada, o segundo erro é que ele escrever com “espaços”, porque como você pode ver, a cada caractere acrescentado, ele coloca um “espaço”.
“Estou triste ?”, Não!
Eu estou é super feliz, porque esses erros,
podem ser corrigidos se eu prestar mais atenção, e eu estou super feliz porque finalmente consigo inserir dados no Kernel usando Teclado, com um código que eu finalmente entendo e eu mesmo posso escrever.
O foco que tah fazendo eu escrever essas
coisas aqui é exatamente essa, é de documentar os erros e os acertos durante o desenvolvimento, é como se eu estivesse escrevendo uma história, e na verdade isso é uma história contada na primeira pessoa e em tempo real.
Então eu estou feliz, porque sinto que é um
passo a mais na minha jornada na área de Desenvolvimento de Sistemas Operacionais.
Hoje é dia 07 de Fevereiro de 2022, e olha que
hoje eu estou mais feliz em relação a ontem. Porque finalmente, o Drive de Teclado foi escrito.
Lembra quando eu falei que tinha 2 erros que
estavam atrapalhando a execução ? “Então eu corrigi eles!”
Acontece que eu estava usando apenas uma
variável p’ra executa as funções p’ra limpar e escrever na mensagens na tela, o erro foi ter inicializado a variável como global. Eu comecei a escrever tudo do zero na magrugada de hoje, especificamente as 03:19, e como eu sei isso ? “Normalmente quando eu começo a escrever um código importante, no topo do arquivo eu coloco a data e hora”.
Então eu apresento a vocês, o Kernel com
Suporte a Teclado escrito porque finalmente eu entendi todo drama por trás do ( IDT, IRQ, ISR e outras coisas ligadas a Interrupções ).
De momento eu estou sem ideas em relação aos
próximos passos, mas vou fica talvez um tempo sem mexer no Projecto, penso em surfar em novas ondas, tou com plano de estuda um pouco sobre Inteligência Artificial e criar alguns Joguinhos 2D em Python.