[tutorial] um pouco sobre o antigo pc altair 8800

Iniciado por kodo no kami, Dezembro 17, 2017, 18:47:43 PM

tópico anterior - próximo tópico

0 Membros e 1 Visitante estão vendo este tópico.

kodo no kami

e ae galera blz? nesse tutorial vamos programar para um computador antigo da decada 70, sendo essa maquina um altair 8800 da mits. Nesse tutorial vamos esta usando um simulador ja que é uma maquina extramente antiga e rara entre colecionadores (nunca tive oportunidade de mexer com um de verdade, queria uma replica de natal para brincar kkk =/ ), no caso para esse tutorial vamos usar o "altair 8800 emulator" embora exista outros emuladores para ele inclusive alguns onlines

site oficial (altair32)

bom galera antes de começar a brincar com o emulador temos que entender algumas coisas, a primeira delas que programar esse tipo de maquina não é tão simples como as atuais onde a gente cria o codigo em C, Pascal ou qualquer outra linguagem usando uma IDE bonitinha e depois joga no disco para dar boot. As maquinas mais antigas as vezes nem tinha o teclado ou monitor, apenas leds para sinalizar o bit daquele barramento, chaves ou botões para mudar os estados deles (no caso do altair são aquelas chaves do tipo alavanca). Outra coisa que temos que citar que a arquitetura do altair 8800 é baseado nos processadores intel 8080 (talvez exista variantes em 8085 ou ate em z80 ja que o proprio simulador tem a opção z80, alem dessas arquiteturas tambem serem compativeis de certa forma, embora creio que precise mudar um pouco o circuito para que isso seja possivel ~ uma coisa interessante que os computadores imsai 8080 é um clone do altair, eles tambem usavam processadores 8080, ate que começaram a ser fabricados usando o 8085 como cpu). Como o computador é baseado em 8080 então a arquitetura e o assembly usado na arquietura atual x86 não é compativel com essa maquina, nem o set de instruções e nem o binario gerado (para isso, temos que programar exatamente para a arquitetura 8080 ou ate mesmo o 8085 e z80, excluindo algumas instruções não compativel com o 8080). bom galera agora que a gente ja falou um pouco sobre esse computador vamos da uma olhada em uma imagem que peguei wikipedia dessa maquina

altair 8800

o que precisamos entender que vamos programar ele manualmente bit a bit formando o codigo binario equivalente aquela instrução do 8080, depois podemos rodar o programa tanto passo a passo quanto de uma vez. primeiro de tudo vamos entender um pouco do painel desse trem.

img grande


O primeiro botão que vamos ver é o que fica no lado esquerdo do canto inferior (escrito off e on ~ coloquei em vermelho), esse botão liga e desliga a maquina (quando empurramos a alavanca para on ele liga para off ele desliga),

img grande


o segundo botão que vamos analisar sera o botão para rodar o programa do computador, sendo esse botão o run (no meu exemplo ele é o verde), para a gente usar esse botão temos que coloca o programa antes ne (esse emulador ja tem um programa padrao nele entao podemos dar um run sem problema), outra coisa que podemos ver que os leds que estiver escrito A e os D vao mudar constantemente sendo os leds A representando os endereços de memorias (normalmente vai mudar sequencialmente menos quando acontecer um jmp) e o D representando a instrução ou os dados (lembrando que isso é binario ~ no exemplo abaixo seria o codigo hexadecimal 8 no barramento de dados e no barramento endereço de memoria o numero 4cff), podemos apertar em stop para parar o programa no trecho atual da memoria (tambem a cor verde porem para cima dessa vez), depois que o programa estiver parado podemos apertar em run novamente para rodar ele novamente

img grande


podemos rodar o programa passo a passo depois de parado usando o botão single step (no meu exemplo ele é o verde claro), o single step tambem serve para passar para o proximo dado na memoria (executando ele é claro)

img grande


para a gente resetar os registradores tambem seria meio para reiniciar o computador sem cortar a sua energia, usamos  o botão reset (no meu exemplo é o roxo)

img grande


para a gente ir para um endereço de memoria especifico temos que setar os bits equivalente a ele no barramento de endereço, para isso usamos os botões do barramento de endereço/dados (no meu exemplo é a cor marrom), supondo que eu quero debugar o meu programa a partir da posição hexadecimal 25 (100101) de memoria, então basta setar o valor 100101 nos botões de barramento e depois usar o botão de leitura ou Examine para pular para aquele trecho (no meu caso é o azul claro o botão), o Examine Next é executado para ler o proximo byte porem não executar como codigo

img grande


para a gente escrever na memoria primeiro vamos para a posição desejada como no exemplo anterior, depois escrevemos no barramento de dados usando os botões de barramento (esse botão serve tanto para memoria quanto para os dados a diferença que os dados sao apenas 8 bits ou seja os oitos primeiros botões ja que é um processador de 8 bits), por fim usamos o botão deposit (no meu exemplo era o azul escuro), o Deposit Next vai pular a instrução e escrever no proximo endereço depois dela, no exemplo abaixo eu escrevo o byte 05 na memoria

img grande


um simples programa que atribui um valor a um registrador depois soma com um outro valor a esse registrador depois joga na memoria no endereço 0b, no caso a instrução hlt vai parar o programa (seria o mesmo que puxar o botão stop porem por software), depois basta a gente da um step para o proximo dado para ter o resultado

mvi a,50h
mvi b,10h
add b
mvi h,0
mvi l,0bh
mov m,a
hlt


depois de compilado vai gerar o codigo binario abaixo (representei ele em hex), voce pode criar seus proprios programas e não se limitar ao meu, bastando usar um compilador para 8080,8085 ou z80 para descobrir os bytes equivalente (ou procurar em manuais dessa arquitetura pelo set de instruções tambem)

3e 50 06 10 80 26 00 2e 0b 77 76 00

depois disso basta voce escrever cada byte desse sequencialmente a partir do endereço de memoria 0 ( vai da um trabalho isso em u.u ), depois executar o programa ele ate ele para no hlt como previsto pelo codigo, para a gente exibir o resultado basta exibir o proximo dado apertando o Examine Next (ele ler o proximo endereço da memoria sem executar), no meu exemplo tem que da o valor 60 (1100000)

img grande


bom galera sei que tem muita coisa para falar sobre esse computador principalmente voltado a parte de programação, porem, esse tutorial foi feito para mostrar o funcionamento basico dessa maquina sem nos aprofundar tanto, então quem sabe em algum futuro tutorial eu entro de cabeça para ensinar asm 8080/8085 ou ate mesmo z80 ^^

by kodo no kami