Arduino e a computação de 8 bits dos anos 80: não é só nostalgia

O Arduino de hoje e os computadores domésticos dos anos 80 compartilham aspectos muito interessantes.

Na década de 1980 também era comum precisar fazer caber em 2KB de RAM uma aplicação completa e capaz de rodar com desempenho satisfatório em uma CPU que processava 8 bits de cada vez.

Quem usou computadores domésticos dos anos 80, do Apple ao MSX, passando pelo TK83, TK95, CP200, CP500 e por muitos outros, incluindo na lista até o videogame Master System, teve oportunidade de testemunhar quanto processamento era possível extrair de CPUs de 8 bits e quantidades limitadas de memória.

Essas condições restritas eram muitas vezes similares às que encontramos hoje em placas de desenvolvimento como o popular Arduino Uno, e entender como se extraíam – na época – resultados fantásticos de equipamentos tão modestos é para muitos entusiastas atuais a chave não apenas para alcançar sucessos no singelo Uno sem recorrer às classes superiores de hardware já disponíveis, mas especialmente para encontrar diversão extra no processo.

Para entender esse meu ponto de vista, é necessário ver de onde eu parti: nos anos 80 tive a felicidade de começar minha experiência com computadores usando um modelo limitadíssimo (até para a época): um TK83, clone brasileiro do célebre Sinclair ZX81 inglês, um dos primeiros sucessos comerciais na área (vendeu mais de 1 milhão de unidades).

O TK83 era tão limitado a ponto de ser necessário escolher entre manter estável a imagem na tela ou processar os cálculos na velocidade normal.

O TK831 era realmente limitado: CPU de 8 bits, 2K de RAM2, capacidade de exibir 22 linhas de 32 caracteres na tela de uma TV. Devido ao baixo desempenho do hardware, o sistema não conseguia manter sincronizada a imagem na TV, e o usuário precisava escolher entre 2 modos: SLOW (em que o sistema desacelerava ainda mais e assim a imagem permanecia sempre presente) ou FAST (velocidade normal, ainda bem baixa, e a imagem da tela apagava perceptivelmente a cada processamento, cálculo ou tecla pressionada).

Aprendi a programar no TK, até porque ele me oferecia pouco mais do que isso. Ou eu programava, ou digitava programas que encontrava em revistas e livros da época. Uma terceira possibilidade seria obter fitas cassette com programas para ele, mas o meu TK era de segunda mão, e foi comprado3 anos depois de ter havido uma breve disponibilidade de fitas de software para ele à venda na minha cidade.

Mas ter aprendido a programar num ambiente tão limitado teve vantagens, incluindo valorizar muito mais os sistemas com abundância de velocidade, memória e interatividade que vieram em progressão geométrica a partir da década seguinte, mas especialmente manter sempre a noção de que, conhecendo as restrições, é possível fazer muita coisa interessante que à primeira vista excederia os limites da plataforma.

Entra em cena o Arduino

O Arduino Uno é a placa de desenvolvimento com a qual muitos estudantes, amadores e curiosos se aproximam da computação embarcada e dão seus primeiros passos no movimento maker e/ou rumo à Internet das Coisas (IoT).

Quem chega a ele acostumado aos valiosos luxos da computação desktop e mobile moderna, incluindo memória vasta (e protegida), velocidades vertiginosas de CPU, displays enormes de alta resolução, conectividade e multitarefa gerenciadas por um sistema operacional, etc. precisa passar pelo choque de realidade de interagir diretamente com a CPU, sem camadas intermediárias que impeçam a memória de ser inadvertidamente sobrescrita ou os recursos de comunicação de entrarem em algum estado indevido que acabe literalmente queimando algum periférico.

Já quem algum dia programou nos computadores domésticos de 8 bits da década de 80 pode sentir uma sensação de nostalgia, de retornar a um conjunto de talentos que foi desenvolvido e praticado há muito tempo, e que rapidamente se descobre que continua à disposição, bastando desenferrujar: processamento paralelo baseado em interrupções da CPU gerenciadas pelo próprio programador de aplicação, métodos para melhor aproveitar os parcos recursos de armazenamento e memória, entrelaçar as rotinas de processamento e as de interface com o usuário, etc.

Em certos sentidos, o Arduino Uno é ainda mais limitado do que o TK83 da minha infância: ambos têm CPUs de 8 bits e 2K de RAM, mas o Arduino não tem os circuitos auxiliares que permitiam à CPU do TK "terceirizar" o controle do teclado e da tela de TV, por exemplo.

Mesmo limitado, o Arduino conta com mais memória, uma grande variedade de periféricos e acessórios modernos, e o luxo de não precisar hospedar seu ambiente de desenvolvimento, que roda em um PC externo.

Por outro lado, de modo geral o Arduino Uno tem bem mais recursos aplicáveis ao seu âmbito de atuação. Para começar, ele tem mais memória. Apesar de ter os mesmos 2K de RAM que o TK83, na década de 80 estes 2K precisavam armazenar o programa, os dados e o estado de execução, enquanto no Uno eles podem se concentrar nos dados variáveis e no estado de execução, já que o programa fica nos 32K adicionais de memória flash, e ainda é possível manter 1K de dados persistentes numa memória EEPROM.

Ele também tem a riqueza do ambiente ao seu redor. Via porta USB, ou com as centenas de periféricos e acessórios plugáveis usando métodos padronizados de comunicação e controle (como I2C e SPI), é possível conectar o humilde Uno a recursos que para o TK83 seriam quase mágicos: displays de alta resolução, Internet sem fio, sensores diversos, e variadas formas de interatividade.

Para completar, ele tem um ambiente de desenvolvimento integrado, fazendo uso de recursos modernos para facilitar a programação e os testes. Isso porque, ao contrário do modesto TK83 e seus contemporâneos, como regra geral ele não hospeda suas ferramentas de desenvolvimento: a IDE do Arduino roda em um computador externo, usualmente milhares de vezes mais rápido e com mais memória, no qual é feita a edição e a compilação. Quando fica pronto, é só uma questão de transferir o código-objeto para o Arduino.

O melhor de 2 mundos

O TK83 era interessante na sua década, e o Arduino Uno é útil agora. Não é o caso de tentar analisar qual é o melhor: minha reflexão é sobre como um mesmo conjunto de habilidades permitiu realizar na prática o potencial de cada um desses equipamentos icônicos, e – quando as circunstâncias permitem – essas mesmas habilidades permitem extrair hoje rendimento extra até de classes superiores de hardware, quando é necessário fazer caber um pouco mais de dados, rodar um pouco mais rápido e fazer a bateria durar alguns ciclos a mais.

Para exemplificar a relação entre esse tipo de habilidade e a disponibilidade limitada de recursos: criar implementações pequenas de Xadrez que permitam jogar contra o computador é um desafio de muitos programadores, mas só no ano passado foi batido o recorde estabelecido no começo da década de 80 pelo notório 1K ZX CHESS, que cabia (programa + variáveis) na RAM de 1K do ZX81 original inglês, e permitia ao usuário jogar xadrez contra a CPU, que usava inteligentemente contra ele as regras completas do jogo (exceto os 3 movimentos extraordinários: roque, promoção do peão e captura en passant).

Desenvolver hoje, e em escala industrial, o tipo de engenhosidade necessária para fazer caber uma aplicação complexa em recursos tão limitados provavelmente é economicamente inviável e desinteressante: assim como aconteceu mais perto do final da década de 1980 com o TK83, já há hoje em relação à classe de hardware representada pelo Arduino Uno novos equipamentos tão acessíveis e econômicos quanto o próprio Uno foi no momento do seu lançamento.

Mas quem já desenvolveu esse conjunto de talentos continuará tendo aonde aplicá-los, e também provavelmente vai continuar se divertindo por alguns anos projetando e implementando aplicações interessantes no hardware da classe do Uno, ou mesmo nos seus primos menores, como a classe ATtiny de microcontroladores.

E eu estarei entre eles ;-)


Leia também: The IoT and the return of 8-bit computing, de Simon Bisson.

 
  1.  Assim como outros contemporâneos, vários dos quais tinham ainda menos recursos, a exemplo do heróico e brasileiro Nestor.

  2.  Que era pouco, mas ainda assim era o dobro do que o 1K de RAM que vinha no ZX81 original inglês

  3.  do Charles, amigo e colega de escola, que também continuou no ramo e hoje também se interessa por plataformas embarcadas, não por coincidência.

Comentar

Dos leds ao Arduino, ESP8266 e mais

Aprenda eletrônica com as experiências de um geek veterano dos bits e bytes que nunca tinha soldado um led na vida, e resolveu narrar para você o que descobre enquanto explora esse universo – a partir da eletrônica básica, até chegar aos circuitos modernos.

Por Augusto Campos, autor do BR-Linux e Efetividade.net.

Recomendados

Livro recomendado


Artigos já disponíveis

Comunidade Arduino

O BR-Arduino é integrante da comunidade internacional de entusiastas do Arduino, mas não tem relação com os criadores e distribuidores do produto, nem com os detentores das marcas registradas.

Livros recomendados