[tutorial] um pouco sobre o antigo pc altair 8800

postagem de conteudo sobre programação para arquitetura z80, 68k, 6502 e arquteturas antigas
Post Reply
User avatar
Kodo no Kami
Admin
Admin
Posts: 723
Joined: Fri Jan 02, 2015 1:56 pm
Contact:

[tutorial] um pouco sobre o antigo pc altair 8800

Post by Kodo no Kami » Sat Dec 16, 2017 8:08 pm

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

Image

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.

Image

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),

Image

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

Image

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)

Image

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)

Image

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

Image

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

Image

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

Code: Select all

 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)

Code: Select all

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)

Image

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
Image

que desagradavel ~ mirai kuriyama

User avatar
51M0N
Admin
Admin
Posts: 872
Joined: Fri Jan 02, 2015 2:06 pm

Re: [tutorial] um pouco sobre o antigo pc altair 8800

Post by 51M0N » Sun Dec 17, 2017 10:12 am

muito bom o post mano, para vc como são as coisas um pc desse n tinha nem interface gráfica somente circuitos e dispositivos de entrada e saída, achei uns links uteis .

Uma replica do Altair 8800 com arduino[0][1], tem ate um kit do anuncio dele na revista Popular Electronics[2][3] e umas documentação de operação[4]...eheheh quem sabe no futuro vc monta um. =)




[0]https://hackaday.com/tag/altair-8800/
[1]https://github.com/companje/Altair8800
[2]http://www.americanradiohistory.com/Arc ... 975-01.pdf
[3]https://www.imsai.net/download/PopTronics_Jan-1975.pdf
[4]http://www.classiccmp.org/dunfield/altair/altair6.htm
Image
"Você, eu, nem ninguém vai bater tão duro como a vida. Mas não se trata de bater duro. Se trata de quanto você aguenta apanhar e seguir em frente (...). É assim que se consegue vencer." by Rocky Balboa

User avatar
Kodo no Kami
Admin
Admin
Posts: 723
Joined: Fri Jan 02, 2015 1:56 pm
Contact:

Re: [tutorial] um pouco sobre o antigo pc altair 8800

Post by Kodo no Kami » Tue Dec 19, 2017 1:23 pm

show mano, fazer com arduino deve ser foda vou tentar depois \o
Image

que desagradavel ~ mirai kuriyama

Post Reply

Return to “z80 / 68k / 6502”