<FabioOlive> AlissonB_: :)

<FabioOlive> AlissonB: :)

<AlissonB> to baixando o dosbox aqui

<AlissonB> instalando

<FabioOlive> blz

<FabioOlive> hehe

<AlissonB> pronto FabioOlive

<FabioOlive> AlissonB: legal, executa o dosbox e vê se a configuração deu certo

<AlissonB> acho que deu

<AlissonB> como faço pra ter certeza?

<FabioOlive> ficou no C:> _

<FabioOlive> ?

<AlissonB> sim

<FabioOlive> beleza, roda aí DIR ou algo assim :)

<AlissonB> yeah

<AlissonB> funfando

<FabioOlive> AlissonB: legal

<FabioOlive> AlissonB: roda o debug :)

<AlissonB> running

<FabioOlive> AlissonB: já te passo um teste :)

<FabioOlive> no debug, só pra testar

<FabioOlive> digita isso:

<FabioOlive> e b800:0000 41 03 4c 07 49 03 53 07 53 03 4f 07 4e 03 20 07

<FabioOlive> note que provavelmente o teclado vai estar mapeado errado :)

<FabioOlive> o : vai estar no Ç :)

<FabioOlive> pra corrigir isso, rode “keyb br” no prompt do dos :)

<FabioOlive> ah, pra sair do debug digita q e enter :)

<AlissonB> esse comando não deu nada FabioOlive

<FabioOlive> qual comando?

<AlissonB> e b800…

<FabioOlive> tinha que ter escrito ALISSON na tela com letras de cores diferentes

<FabioOlive> ahh eu me enganei acho

<FabioOlive> no endereço

<FabioOlive> e b800:00a0 41 03 4c 07 49 03 53 07 53 03 4f 07 4e 03 20 07

<AlissonB> agora sim

<AlissonB> :D

<FabioOlive> hehe

<FabioOlive> ok

<FabioOlive> vamos pensar em algo mais elaborado

<FabioOlive> esse exemplinho não é um programa, é só usar o debug pra escrever direto na memória de vídeo

<Marlon_> Que loucura eh esta fabio?

<FabioOlive> AlissonB: saia do debug com q

<FabioOlive> entra no diretório ASM

<AlissonB> ok

<FabioOlive> vamos criar um programinha em assembly e montar ele com o NASM

<FabioOlive> Marlon_: o AlissonB está começando a estudar assembly x86 16bits

<FabioOlive> usando o DOSBox como máquina de testes (virtual, mas é legal mesmo assim)

<Marlon_> Bah muito legal (:

<FabioOlive> AlissonB: o bom de usar DOSBox é que a partir de agora, qualquer arquivo que tu criar naquele diretório dosc no teu ~ vai aparecer no DOS, então posso te mandar uns programinhas por email e tu grava ali :)

<FabioOlive> máquina.virtual++

<mibotz> máquina.virtual tem 1 pontos de karma

<AlissonB> legal

<FabioOlive> em comparação, meu laptop que tem FreeDOS instalado tem uns programinhas em asm lá que não tenho como tirar dali. o laptop não tem disquete, claro, e o DOS não tem suporte a muitas outras coisas :) pendrive? esquece!

<FabioOlive> haha

<AlissonB> bah, só copiando o código manualmente

<AlissonB> hehe

<FabioOlive> sim, trash né :)

<AlissonB> como diria o eliezerb: doidera low leve

<AlissonB> level*

<AlissonB> huauha

<FabioOlive> hahah pensei num programinha divertido agora

<FabioOlive> ainda usando a memória de vídeo do modo texto

<FabioOlive> pois é uma maneira divertida e imediata de ver que o programa funcionou

<FabioOlive> vamos fazer um programinha que vasculha a memória de vídeo e inverte maiúsculas e minúsculas de todos os caracteres

<eliezerb> AlissonB: low

<FabioOlive> … que estiverem na tela

<eliezerb> FabioOlive: Eu vou ir pro FLISOL em Chapecó

<FabioOlive> boa eliezerb ! vai ser legal

<eliezerb> Em Joaçaba temos uns problemas com Proxy na rede

<FabioOlive> sem flisol em joaçaba então, pelo menos esse ano :)

<eliezerb> E uma burocracia danada com espaço

<eliezerb> Ano passado fomos barrados nessa questão

<AlissonB> eliezerb, vamos ter uma sala de hardware livre e uma de software livre

<AlissonB> prepara alguma coisa pra aprensentar

<eliezerb> Firefox OS?

<eliezerb> Uma oficina de uma hora?!

<eliezerb> OpenWeb?

<AlissonB> acho que Firefox OS é legal

<AlissonB> já manja bem?

<eliezerb> Até lá já tivemos alguns encontros aqui em Joaçaba :) E é moleza FFOS

<eliezerb> Em uma oficina de 1 hora da quase pra fazer um aplicativo de média complexidade (se você manjar dos paranaues web)

<eliezerb> Submeter no MarketPlace

<eliezerb> E se pá, ter uns 300 downloads

* fba saiu (Read error: Connection reset by peer)

<FabioOlive> hahaha funcionou o INVERTE.COM

<FabioOlive> :D

<AlissonB> a minha pergunta é: vc está preparado para apresentar isso eliezerb?

<FabioOlive> AlissonB: vou te mandar o programa por email rapidinho

<FabioOlive> ou melhor

<AlissonB> blz FabioOlive :D

<eliezerb> AlissonB: Posso te dar essa resposta daqui 15 dias?

<FabioOlive> cat: src/dosbox/asm/inverte.asm: Arquivo ou diretório não encontrado

<FabioOlive> oops

<FabioOlive> peraí

<AlissonB> blz eliezerb :)

<AlissonB> quanto antes, melhor

<eliezerb> AlissonB: Vou fazer essa mesma oficina com a galerinha da paçoca aqui do curso

<AlissonB> quero ir fechando as atividades

<FabioOlive> section .text

<FabioOlive> org 0x0100

<FabioOlive> start:

<FabioOlive> mov ax, 0xb800

<FabioOlive> mov es, ax

<FabioOlive> mov di, 0

<FabioOlive> volta: mov al, [es:di]

<FabioOlive> xor al, 0x20

<FabioOlive> mov [es:di], al

<FabioOlive> add di, 2

<FabioOlive> cmp di, 4000

<FabioOlive> jnz volta

<FabioOlive> ret

<FabioOlive>

<FabioOlive> AlissonB: roda aí “edit inverte.asm” e digita esse programinha

<AlissonB> dá uma explicada nele enquanto em digito :D

* fba (~fba@177.183.223.164) entrou em #OeSC-Livre

<FabioOlive> AlissonB: depois “assembla” ele com: nasm -f bin -o inverte.com inverte.asm

<FabioOlive> eu tinha explicado que no modo “PC XT” em que o DOS funciona, o segmento de memória B800:0000 contém a memória de vídeo em modo texto <eliezerb> AlissonB: Mas se tu achar alguém pra falar de algo massa, coloca! Não espera por mim não :) É muito bom assistir a galera

<FabioOlive> esse programinha basicamente faz um loop, olhando cada um dos bytes (pulando de dois em dois) de 0 a 4000 a partir desse endereço <FabioOlive> ele pega o byte e inverte o bit 5 (operação xor al, 0x20), e escreve o byte de volta no mesmo lugar

<FabioOlive> a diferença binária entre caracteres maiúsculos e minúsculos sempre está no bit 5. tipo 'A' é 0100 0001, e 'a' é 0110 0001.

<FabioOlive> só muda o bit 0010 0000

<FabioOlive> se invertermos esse bit de uma sequência de carateres ASCII, vamos na verdade estar invertendo entre maiúsculas e minúsculas

<FabioOlive> 0x20 (20 em hexa) equivale a 0010 0000

<FabioOlive> lembra que na memória de vídeo em modo texto, cada dois bytes definem um caracter na tela

<FabioOlive> primeiro o código ASCII dele, depois os “atributos” (cores, se está piscando, etc)

<FabioOlive> por isso que o programinha vai pulando de dois em dois

<FabioOlive> assim pega só o código ascii de cada caractere e muda

<FabioOlive> eu conto até 4000, de 2 em 2, porque a tela em modo texto no DOS tem 80×25 == 2000 caracteres. 2000 caracteres com 2 bytes cada um dá 4000 bytes :)

<FabioOlive> AlissonB: eu uso o registrador DI como um “ponteiro” na memória de vídeo, é esse registrador que diz em qual endereço de caractere o loop está operando

<FabioOlive> e uso o registrador AL pra armazenar o byte lido do endereço de memória apontado por ES:DI. ES é um registrador de segmento que eu apontei pra memória de vídeo lá no início

<AlissonB> esses nomes de registradores foi vc que deu ou são esses mesmo?

<Marlon_> Alienígena essa coisa em assembly o.0

<FabioOlive> AlissonB: são assim mesmo, são os registradores padrão de um processador x86

<FabioOlive> AlissonB: depois que tu digitar esse programinha vamos explicar um pouco mais :)

<FabioOlive> desculpa o delay, o sinal da wifi tava fraquejando aqui :)

<FabioOlive> AlissonB: avisa quando tu conseguir terminar de digitar e compilar esse programinha :)

<AlissonB> já fiz FabioOlive, mas deu erro

<AlissonB> daí como o cursor tinha travado na tela do dosbox

<FabioOlive> legal, corrige o erro então :)

<AlissonB> tive que dar exit pra voltar pra cá

<FabioOlive> :)

* Marlon_ saiu (Quit: Saindo)

<FabioOlive> aqui tá funcionando o programinha :) vê se copiou algo errado

<FabioOlive> AlissonB: se tu clicar com o mouse na janela do dosbox, ele vai capturar o mouse pra ele, e não lembro como é que libera

<AlissonB> bom, agora compilou

<FabioOlive> se apertar Alt+Enter pra ficar em tela cheia e depois apertar de novo pra voltar pro modo janela, ele libera o mouse

<FabioOlive> AlissonB: ok, agora roda CLS, depois DIR, e depois roda INVERTE

<FabioOlive> :)

<AlissonB> ficou um monte de símbolos esquisitos

<AlissonB> hehe

<FabioOlive> hehe sim onde tiver números e outros símbolos vai ficar estranho

<FabioOlive> se rodares INVERTE de novo volta ao normal

<AlissonB> humm

<AlissonB> saquei

<FabioOlive> na época do DOS tinha uns vírus que manipulavam a memória de vídeo, fazendo os caracteres “caírem” pela tela até se amontoarem nas linhas de baixo hehehe

<FabioOlive> o “cascata”

<AlissonB> huauhahu, nossa

<FabioOlive> a gente podia fazer um programa que imita o vírus cookie, que basicamente mostra um pacman na tela que sai comendo os caracteres heheheh

<FabioOlive> se não tivesse nada na tela pra comer ele avisava que ia comer o disco

<FabioOlive> aí a pessoa tinha que ficar digitando coisas

<FabioOlive> pra ele comer

<FabioOlive> hahahaha

<FabioOlive> AlissonB: acho que o DOSBox vai ser uma maneira divertida de aprender arquitetura de computadores, e principalmente já usando como base uma arquitetura útil nos dias de hoje, que é a x86

<FabioOlive> o modo 32 ou 64 bits basicamente é a mesma coisa com registradores maiores hehehe

<AlissonB> essa era a minha dúvida

<AlissonB> qual a diferença em termos práticos?

<FabioOlive> só que obviamente sistemas operacionais como o linux usam um modelo de memória diferente, então não seria possível brincar assim

<FabioOlive> em termos práticos, a diferença pro assembly de um DOS pro Linux é o espaço de endereçamento, que no caso do Linux é muito maior, a proteção de memória, e a maneira de chamar os serviços do sistema operacional

<AlissonB> e o que muda de x86 pra x64?

<FabioOlive> basicamente o espaço de endereçamento, e em 64 bits tem mais alguns registradores na CPU, pra melhorar o desempenho do código

<FabioOlive> AlissonB: sabe esses AX, DI, ES, AL, e tal que usamos ali em cima?

<AlissonB> aham

<FabioOlive> esses são os registadores da CPU

<FabioOlive> cada um deles é como se fosse uma variável, ou um lugarzinho pra guardar um número

<FabioOlive> as operações do processador funcionam em cima desses registradores

<FabioOlive> e tem instruções pra ler dados da memória pra dentro dos registradores, e pra escrever registradores de volta na memória

<FabioOlive> alguns registradores tem funções especiais, como o IP, que é o Instruction Pointer

<FabioOlive> basicamente ele indica o endereço da memória onde o processador vai buscar a próxima instrução pra executar

<FabioOlive> só o que o processador faz é isso :)

<AlissonB> hummm

<AlissonB> isso sim é low level

<FabioOlive> quando tu liga o computador, todos os registradores da CPU estão zerados

<FabioOlive> e aí o processador, naturalmente, busca a instrução que estiver no endereço 0 de memória (porque IP tem o valor 0 quando liga) e executa ela

<FabioOlive> depois incrementa o IP e executa a próxima

<FabioOlive> depois incrementa o IP e executa a próxima

<FabioOlive> depois incrementa o IP e executa a próxima

<FabioOlive> depois incrementa o IP e executa a próxima

<FabioOlive> depois incrementa o IP e executa a próxima

<FabioOlive> depois incrementa o IP e executa a próxima

<FabioOlive> depois incrementa o IP e executa a próxima

<FabioOlive> depois incrementa o IP e executa a próxima

<FabioOlive> …

<FabioOlive> pra sempre :)

<FabioOlive> claro que algumas instruções alteram esse fluxo

<FabioOlive> então programas em assembly basicamente consistem em carregar valores em registradores, realizar operações neles, escrever de volta na memória e por aí vai

<FabioOlive> por exemplo

<FabioOlive> pra multiplicar dois números

<FabioOlive> tu usa uma instrução pra carregar o primeiro número em um registrador (AX, por exemplo)

<FabioOlive> depois outra instrução pra multiplicar o registrador AX pelo outro número

<FabioOlive> e depois provavelmente vais escrever o resultado (que está em AX) em algum outro lugar

<FabioOlive> é ridiculamente simples assim :)

<AlissonB> pois é, acho que o pessoal se assusta com assembly porque não sabe essas coisas

<AlissonB> mas seria legal ter uma tabela das funções de cada registrador

<FabioOlive> e se parares pra pensar, todos os programas são assim, pois só o que o computador executa é linguagem de máquina (que corresponde 1 pra 1 com assembly)

<AlissonB> tem isso por aí?

<FabioOlive> claro

<FabioOlive> tem milhares de páginas de manuais da Intel pra ler sobre isso :)

<AlissonB> a Intel fez manual pra x64 também?

<FabioOlive> AlissonB: quando tu rodas o programa debug, ele funciona como se fosse um console do processador

<FabioOlive> sim, os manuais da Intel incluem tanto 32 quanto 64 bits. a diferença não é muito grande entre eles, então 99% do assembly é o mesmo.

<FabioOlive> AlissonB: roda o debug aí

<FabioOlive> e no prompt digita r e enter

<FabioOlive> ele vai te mostrar o conteúdo dos registradores

<FabioOlive> quase tudo zerado :)

<FabioOlive> o debug funciona como se ele tivesse “congelado” a máquina na hora que ligou

<FabioOlive> e permite examinar o conteúdo da memória e dos registradores

* ubuntero (~ivan@177-137-54-145.cte.net.br) entrou em #OeSC-Livre

<FabioOlive> aí podes inserir código em assembly direto em pontos da memória RAM e mandar ele executar :)

<FabioOlive> é como se tu estivesse controlando o processador manualmente, saca?

<AlissonB> perfeitamente!

<FabioOlive> a barbada é que existem regiões de memóra que são mágicas :)

<AlissonB> vi os registradores zerados agora

<AlissonB> bacana

<FabioOlive> tu já viu a região da memória de vídeo, por exemplo

<FabioOlive> tudo o que tu escrever lá, aparece na tela

<FabioOlive> o mesmo se dá com modos gráficos, só que aí cada ponto na tela vai ter uma cor, que é representado por um ou mais bytes na memória de vídeo

<FabioOlive> que nesse caso fica no segmento A000:0000

<FabioOlive> se tu fizer um programa que muda o modo de vídeo pro modo gráfico e sair escrevendo na RAM a partir do endereço A000:0000, vão aparecer pontos coloridos na tela :)

<AlissonB> não tem como fazer isso no linux, por exemplo?

<FabioOlive> AlissonB: e aí também tem regiões de memória em que aparece o teclado, ou uma placa de rede, ou o controlador de disco, etc

<AlissonB> o segmento nem vai ser o A000 daí?

<FabioOlive> não, o Linux não vai deixar tu fazer isso :)

<FabioOlive> pois é, aí nem sei onde vai ficar hehehe :)

<FabioOlive> AlissonB: note que no tempo do DOS a gente usava modo gráfico 320×200 pontos com 256 cores :)

<FabioOlive> era um byte por pixel, hehehe

<FabioOlive> 64000 bytes pra descrever a tela gráfica :)

<FabioOlive> old school total :)

<AlissonB> pois é, pra gente é mais difícil absorver essa época

<AlissonB> nasci na época errada

<AlissonB> huahua

<FabioOlive> hahaha hoje em dia é mais difícil entender essas coisas

<AlissonB> agora tem que correr atrás da máquina pra aprender :)

<FabioOlive> tipo, uma tela full hd com 32 bits de cor (24 bits de cor mais 8 bits de canal alpha pra transparência) dá vários megabytes, que é mais RAM que o DOS sequer acessava :)

<FabioOlive> AlissonB: pra operar o hardware, basicamente precisamos saber em que endereço ele está, e que informação escrever onde.

<FabioOlive> isso se consegue com a documentação dos chips fornecidas pelo fabricante

<AlissonB> hummm

<FabioOlive> por exemplo, vamos imaginar que tem um chip controlador de disco no endereço C000

<FabioOlive> e na documentação diz que o primeiro byte serve pra indicar qual setor do disco é pra ser lido ou escrito, o segundo byte é pra mandar o comando de ler ou escrever o setor, e um terceiro byte serve de “status” pra indicar se uma operação está em andamento

<FabioOlive> e digamos que no endereço C100 até C300 (512 bytes) é a área de memória que o controlador usa pra escrever um setor no disco ou ler

<FabioOlive> então se quisermos ler o setor 15 do disco

<AlissonB> porque c100 até c300 são 512 bytes?

<FabioOlive> fazemos um programinha assembly que escreve 15 no endereço C000, digamos que 01 pra operação de leitura no endereço C001, e então o programinha fica em loop lendo o byte no endereço C002 até que ele seja zero. quando ele tiver o valor zero, indica que o controlador acabou a operação e o setor 15 foi lido e seu conteúdo está no endereço C100 a C300

<FabioOlive> é assim que se opera o hardware

<FabioOlive> :

<FabioOlive> :)

<FabioOlive> claro que estou simplificando um pouco, e criando exemplos fictícios de endereços e tal

<FabioOlive> mas a operação básica é assim

<AlissonB> mas isso no dia a dia é complexo de implementar, ou só precisa de prática (como qualquer outra coisa)?

<FabioOlive> escreve um valor mágico em um certo lugar, espera que outro valor mágico apareça em outro lugar, e aí o hardware fez alguma coisa que o valor mágico que foi escrito indicou

<FabioOlive> AlissonB: olha, hoje em dia escrever drivers pra dispositivos é bem complexo

<FabioOlive> o hardware anda bem complexo hoje em dia

<FabioOlive> AlissonB: MAS a barbada é que não precisas fazer isso, já que tens um sistema operacional pra usar :)

<FabioOlive> o Sistema Operacional é exatamente o programa que implementa todas essas funções e apresenta uma interface simples pros programas :)

<FabioOlive> mas é interessante saber que é esse tipo de coisa que o Sistema Operacional faz :)

<FabioOlive> AlissonB: sobre 512 bytes entre c100 e c300, abre um shell aí e digita: echo $1)

<FabioOlive> :)

<FabioOlive> o prefixo 0x indica hexadecimal, e 0x100 é 256 em decimal :) entre 0xc100 e 0xc300 tem 0x200 bytes, que é 512 bytes em decimal :)

<AlissonB> hum, show

<AlissonB> é bastante coisa pra absorver

<AlissonB> hehe

<FabioOlive> AlissonB: estás aos poucos entendendo? :)

<FabioOlive> é bastante coisa, ainda mais de forma remota assim hehehe

<AlissonB> aham, eu costumo aprender por meio de repetição

<FabioOlive> :)

<FabioOlive> AlissonB: como eu disse, o processador só sabe ir buscando instruções da memória e executando

<FabioOlive> isso significa que, quando tu liga o computador e toda a RAM está zerada, e todos os registradores estão zerados, alguma coisa tem que existir na memória que faça algo de útil

<FabioOlive> a RAM está zerada, mas não é só a RAM que tem ali né ;-)

<FabioOlive> AlissonB: quando a gente liga o computador, qual é a primeira coisa que executa?

<FabioOlive> começa com B :)

<FabioOlive> e termina com IOS :)

<FabioOlive> bootloader vem depois

<FabioOlive> o BIOS é quem carrega o bootloader

<AlissonB> o pessoal confunde muito bios com cmos

<eliezerb> E esse não tem nada de ignorante

<eliezerb> rsrsrs

<FabioOlive> o BIOS vem gravado de fábrica, é uma memória não volátil, ou seja, não se perde quando desliga a energia

<FabioOlive> antigamente era uma ROM mesmo, hoje em dia é uma Flash que pode ser regravada

<FabioOlive> AlissonB: “CMOS” é a memóriazinha RAM não volátil que tem no circuitinho de “relógio de tempo real” pro computador saber as horas quando boota :)

<FabioOlive> CMOS na verdade é Complementary Metal-Oxide Semiconductor, que é o nome do processo de fabricação daquela memóriazinha

<FabioOlive> mas aí imperou o princípio Gilette, e ninguém mais chamou de lâmina de barbear, saca?

<FabioOlive> a memória CMOS virou “a CMOS” :)

<FabioOlive> bom

<FabioOlive> eu tava falando do BIOS

<FabioOlive> AlissonB: tu já sabes agora que quando o processador liga ele sai executando instruções da memória

<FabioOlive> mas que a RAM está zerada quando liga, então não tem nada de útil pra executar lá

<FabioOlive> então a barbada é que o projeto da placa mãe tem que mapear no endereço inicial do processador exatamente a memória que contém o BIOS, e assim quando liga o processador sai executando o BIOS

<FabioOlive> :)

<AlissonB> excelente

<AlissonB> ele sempre vai buscar o BIOS

<FabioOlive> aí o BIOS, que é o Basic Input/Output System, sabe fazer o básico que é inicializar o hardware básico da máquina (RAM, tela, teclado, disco) e carregar o setor 0 do primeiro disco configurado, e aí saltar pro código desse setor

<AlissonB> pq ele sabe onde o BIOS está!

<FabioOlive> o setor zero tu já sabes que é o MBR, o Master Boot Record

<FabioOlive> ele contém um boot loader que vai saber carregar o sistema operacional

<FabioOlive> e aí tudo funciona :)

<AlissonB> todo mundo sabe quem chamar e o negócio funciona, hehe

<FabioOlive> AlissonB: na verdade a CPU não sabe nada, ela sempre começa a executar o mesmo endereço quando boota :) mas o projetista da placa mãe tem que saber fazer o chipset da placa mapear o BIOS nesse endereço certo

<FabioOlive> eu te falei que a CPU começa no endereço 0, mas isso foi só pra simplificar. processadores antigos de 8 bits começavam no endereço 0.

<FabioOlive> as CPUs x86 bootam em modo 16 bits, e saem executando no endereço FFFF:0000, que dá o endereço físico FFFF0 :)

<FabioOlive> então é lá no FFFF0 que os projetistas de chipsets mapeiam a ROM (ou Flash) do BIOS :)

<FabioOlive> AlissonB: aliás, até dá pra comprovar isso

<FabioOlive> entra no debug aí no DOSBox

<AlissonB> ok

<FabioOlive> e digita: u ffff:0000

<FabioOlive> u de unassemble, disassemblar

<FabioOlive> no meu aqui, a instrução em FFFF:0000 é JMP F000:12C0

<FabioOlive> ou seja, “JUMP to F000:12C0”

<FabioOlive> lá em F000:12C0 deve ter o início verdadeiro do BIOS :)

<AlissonB> que doidera =x

<AlissonB> pra mim é o mesmo endereço

<FabioOlive> sim, deve ser padrão da BIOS do DOSBox

<FabioOlive> o DOSBox não usa o BIOS da tua própria máquina :) ele tem um BIOS próprio pra máquina virtual que ele cria :)

<FabioOlive> AlissonB: estão caindo algumas fichas? :)

<AlissonB> claro :D

<FabioOlive> legal :)

<FabioOlive> como o BIOS sabe operar o básico, tipo interagir com a tela e teclado, e interagir com os discos, o próprio sistema operacional simples como o DOS usa funções do BIOS pra operar

<FabioOlive> então os programas em assembly (ou qualquer programa) não precisam acessar o hardware direto, mas podem pedir para o BIOS ou o DOS fazerem isso

<FabioOlive> tipo “Ô BIOS, lê um caracter do teclado e me retorna no registrador AL”

<FabioOlive> e aí o teu programa só precisa saber como fazer esse pedido pro BIOS

<FabioOlive> e isso é padronizado e publicado em manuais, livros, etc

<AlissonB> humm

<AlissonB> legal ter documentação de tudo

<AlissonB> :)

<FabioOlive> sim, se não for assim não tem como :) não é mágico, tudo tem que ser operado da maneira correta

<FabioOlive> e só se sabe qual é se for documentado e publicado

<FabioOlive> agora tu vais entender outra coisa interessante

<FabioOlive> imagina que a Broadcom– faz um novo chip de wireless

<mibotz> Broadcom tem -1 pontos de karma

<FabioOlive> aí eles mesmos fazem um driver pra windows e mandam pra mickeysoft o driver binário, sem código fonte nem documentação

<FabioOlive> funciona legal no windows, pois eles criaram o driver que mexe no hardware deles, que só eles sabem mexer, e integrando com as funções do windows, na interface padrão de drivers

<FabioOlive> e funciona legal

<FabioOlive> MAS ninguém na mickeysoft sabe como o hardware funciona, eles só usam o driver que veio pronto

<FabioOlive> se eles não publicarem a informação de como mexer no hardware deles, só vai existir esse driver que eles mesmos fizeram

<AlissonB> mickeysoft++

<mibotz> mickeysoft tem 1 pontos de karma

<AlissonB> ri disso

<AlissonB> :D

<FabioOlive> é praticamente impossível ler o assembly do driver pra descobrir como o hardware funciona

<FabioOlive> resultado: esse hardware não teria driver pra Linux

<FabioOlive> a não ser que se faça uma engenharia reversa furiosa no driver pra windows

<FabioOlive> pois nessa situação, nem a microsoft sabe como funciona

<FabioOlive> só a broadcom

<FabioOlive> e a broadcom não conta pra ninguém

<FabioOlive> e só faz o driver pra windows e manda pronto

<FabioOlive> foda isso né?

<FabioOlive> aí fica todo mundo refém do driver porco da broadcom

<FabioOlive> esse é o caso de alguns hardwares da broadcom e dos chips gráficos da nvidia

<FabioOlive> não publicam como a porcaria funciona, e como não existe mágica, não funciona e pronto :)

<FabioOlive> a própria microsoft, se tivesse que fazer o driver pro windows, não conseguiria

<AlissonB> puts, que triste

<AlissonB> poderiam pelo menos liberar a documentação né

<AlissonB> a broadcom

<AlissonB> daí alguém faria o serviço sujo

<FabioOlive> e é por isso que geralmente quando um “gurizinho de TI” formata uma máquina com aquele CD velho de Windows XP, nada funciona direito, e aí tem que passar um tempo “baixando drivers”

<FabioOlive> aí começa a funcionar

<FabioOlive> em geral o Windows contém apenas drivers genéricos que conseguem operar o básico

<FabioOlive> tipo, gráfico 1024×768 sem aceleração 3D

<FabioOlive> rede básica sem muito desempenho

<FabioOlive> mas é o suficiente pra ficar catando drivers dos fabricantes até o negócio funcionar

<FabioOlive> no caso dos sistemas operacionais livres, só o que podemos fazer é brigar com essas empresas até eles liberarem

<FabioOlive> a documentação

<FabioOlive> hoje em dia a maioria já se entregou e liberou, ou mandou os seus próprios drivers em código fonte em C pro Linux

<FabioOlive> mas ainda tem umas nVidias que continuam na mesma :)

<AlissonB> então a nvidia faz frente a esse tipo de liberação?

<AlissonB> é uma das poucas?

<FabioOlive> sim, eles são uns fiadaspu

<FabioOlive> uma coisa engraçada é que, no tempo em que essas empresas só faziam driver pra windows, eles tinham uma vantagem: ninguém ficava sabendo o quão RUIM são os chips deles

<FabioOlive> pois eles maquivam a mula bem bonita no driver, resolvendo os bugs e tentando fazer de conta que funcionava bem

<FabioOlive> quando começaram a ter que liberar suas documentações e drivers livres, caiu a máscara

<FabioOlive> e ficou muito clara a quantidade de bugs do *hardware* que essas empresas fazem :)

<AlissonB> hummm

<FabioOlive> por isso que muitas empresas relutavam muito em liberar documentação

<FabioOlive> frequentemente o hardware nem se comporta exatamente como está documentado

<FabioOlive> :)

<FabioOlive> aí tem que ter remendos no driver, tipo ahhh se for o chip versão tal e eu mandei o comando tal, a documentação manda ler o status no bit tal do registrador tal, mas está errado e vou ler no outro lugar tal

<FabioOlive> por isso que tem tantos fucks, shits e etc no código fonte do Linux :)

<FabioOlive> bom,

<FabioOlive> acho que a aula está boa já por hoje né AlissonB :)

<FabioOlive> 1am já :)

<FabioOlive> como passa né?

<AlissonB> sim, passou voando

<AlissonB> com certeza, show de bola FabioOlive++

<mibotz> FabioOlive tem 109 pontos de karma

<AlissonB> já bateu o sono violento aqui

<AlissonB> ahuha

<FabioOlive> duas horas de aula de assembly hehehe

<FabioOlive> nocauteou!

1) 0xc300 - 0xc100
Navegação
Ferramentas