Na época em que computadores tinham uma vaga lembrança

Na época em que computadores tinham uma vaga lembrança

Estamos no final da década de 70 e começo da década de 80. E para constar ainda não existiam PCs nesta época ! A diversidade de modelos e processadores era gigantesca: Existiam os Sinclair, começando com ZX80 e ZX81, e aqui no Brasil com os clones CP200, TK82C, NEZ 8000 e muitos outros. Tinham também os derivados do Apple II, e os mais avançados Sinclair ZX Spectrum. Tinham outros que não chegaram no Brasil, como Atari 400 e 800, Commodore, Amiga, Oric 1, TRS80 I, II e III (estes chegaram como CP 300 e CP500) e TRS 80 Color (tínhamos os CP400 Color), e muitos outros. Se é que podemos definir com uma única frase os computadores desta época, poderíamos dizer que eram "processadores com uma vaga lembrança". Semicondutores eram caros ainda, a memória era escassa, malabarismos precisavam ser feitos para economizar memória. Apresentar desenhos na tela demandava muito espaço na época. Sabe porque? Simples, pensa no seguinte: Você deseja apresentar uma imagem com 320 x 200 pontos (o que equivaleria a um CGA, mas na época as resoluções eram ainda menores). Se você desejar apresentar em 16 cores, precisaria de 32K somente para o vídeo (320 x 200 x 4bits para cor). A maioria nem vinha com esta capacidade, e os processadores na época eram de 8 bits, e suportavam no máximo 64K de memória. Ou seja, não dava para gastar metade da memória apenas com vídeo. Por isto eram necessários malabarismos em engenharia eletrônica, e vamos explorar aqui algumas destas idéias inventivas desta época.

Atari 2600

Este provavelmente foi o mais radical e mais belo tipo de computador, embora fosse um videogame. Primeiro ele praticamente não tinha memória, eram 128 bytes (isto mesmo, 128 bytes) de memória total. Segundo ele não tinha sequer uma memória de vídeo. Na verdade, tinha 2,5 bytes para guardar todo o vídeo. Como é que dava para desenhar na tela com 20 BITS apenas ?

Não foi fornecido texto alternativo para esta imagem

Se você programa jogos vai achar inacreditável o que vou dizer, mas o Atari tinha dois registradores de 8 bits, e mais quatro bits que se chamavam PF0,PF1 e PF2. Quando estava desenhando uma linha na tela, mostrava os 4 bits de PF0 (um registrador), cada um como um ponto na tela, depois os 8 bits de PF1 (outro registrador) e depois 8 bits de PF2. Na sequência ele repetia os mesmos valores, mas tinha um detalhe! Você poderia inverter algum registrador na segunda parte, ou seja, mostrar os bits de trás para frente. E ele pegava estes 40 bits e apresentava 4 vezes cada ponto na tela, o que gerava uma linha "esticada" com 160 pontos. Mas e as outras linhas? Cada vez que se mudava de linha e iria desenhar a próxima, se trocava o valor dos registradores PF0, PF1 e PF2, antes de começar a desenhar a próxima linha ! Ou seja, o processador estava continuamente mudando os valores destes 3 registradores, a cada linha a ser apresentada, até finalizar o desenho da tela. E isto acontecia 192 vezes, já que este é o número de linhas na tela de uma TV. E a tela ainda precisa ser desenhada 60 vezes por segundo, para que o olho humano tenha a impressão de que os pontos são uma imagem apenas. Incrível, não é mesmo? Mas se você acha isto tão impossível assim, dá uma olhada naquela imagem lá em cima, no canto superior direito. Este era um jogo para Atari 2600 chamado PITFALL. Você consegue ver que se dividirmos a tela ao meio, o lado direito é igual ao lado esquerdo? Olha estes outros jogos aqui, talvez fique mais evidente:

Não foi fornecido texto alternativo para esta imagem

Olhe estes jogos agora, e talvez encontre um padrão : todos eles tem a segunda metade repetida ou invertida em relação à primeira metade. Imagine o trabalho que era criar um jogo para este videogame! Precisava saber a todo momento em que linha se encontrava, trocar o valor dos 3 registradores, e ainda continuar movendo os objetos pra lá e pra cá, detectar colisões e explosões e tudo mais. Depois que eu comecei a estudar um pouco o funcionamento do ATARI, criei um grande respeito pelos programadores que criavam jogos para ele, porque todo o pano de fundo era feito com 2,5 bytes apenas! Antes eu criticava e até achava os desenhos "toscos", mas o que foi feito foi surpreendente. O ATARI foi provavelmente a mais radical de todas as implementações. Os modelos que viriam depois já tinham um pouco mais de memória para processar.

ZX80 e ZX81

Estes já vinham com a quantidade "absurda" de 1K ou 2K de memória! Nossa, que evolução! Mas pense o seguinte, o ZX80 tinha 32 caracteres por 24 linhas. Se considerarmos isto um quadriculado, que é a televisão, precisaríamos de 32 x 24 = 768 bytes, mas o computador só tinha 1024 bytes, para guardar todo o restante também: programas, variáveis, constantes. Como seria possível fazer algo com um ZX80? A idéia dos criadores do Sinclair foi esta: cada byte representava um setor de 8 pontos x 8 pontos, chamado de caractere. Cada um dos códigos tinha um conjunto de 8 bytes (cada um dos 8 bits um ponto) que representavam o caractere e tinham um circuito que desenhava na tela. Eu falei um pouco sobre isto neste artigo aqui. Mas mesmo se considerarmos apenas um byte por quadrado, ainda era complicado, porque 1024 bytes de memória no total era muito pouco! Olha o grau de genialidade da implementação: Algumas linhas não tinham todas as letras. Se eu tentasse colocar letras em todas as posições possíveis (32x24), precisava de todos 768 bytes da memória. Mas acontece que por sorte algumas linhas tinham uma quantidade menor de caracteres. O ZX80 colocava um caractere especial depois da ultima letra na linha, e quando este caractere era lido, ele parava de desenhar e deixava o restante da linha em branco. Como se fosse uma máquina de escrever que, quando nada mais havia para ser escrito na linha, você digitava o CR (carriage return), e o papel voltava para o começo da linha seguinte. Desta forma, se você tivesse apenas 3 caracteres em cada uma das 24 linhas, ocuparia apenas 4x24 = 96 bytes na tela (3 caracteres para cada caractere da linha + o finalizador CR, para cada uma das 24 linhas). Olha só algumas telas de aplicativos para o ZX80 e ZX81 :

Não foi fornecido texto alternativo para esta imagem

Observe que as duas imagens da parte de cima ocupam apenas o canto esquerdo da tela, e o castelo na parte de baixo já economiza alguns bytes também, logo depois dele. É como se após o último caractere visível de cada linha, nada mais existisse e ele colocasse tudo branco na tela, sem ocupar memória (é o que acontecia mesmo). Na primeira linha da primeira imagem, por exemplo, seria como ser ele guardasse "0123456789X"+ o finalizador de linha. Somente 12 bytes seriam utilizados. E as outras 10 linhas logo a seguir também terminam antes do meio da tela. A imagem do canto inferior direito, por outro lado, precisava de expansão para executar, sem dúvida, porque tinha caracteres até o final da linha.

Apple II

Os computadores Apple II já tinham mais memória, mas ainda assim o número era pequeno para um desenho de qualidade. No início ele vinha com 16K de memória (bem mais que os ZX80 e ZX81). Estes já permitiam a resolução de 280 pontos x 192 pontos, mas era necessário economizar, senão quase toda memória disponível para o 6502 (processador de 8 bits dele) seria consumida. Por isto, eles economizaram ao usar 1 bit para selecionar um conjunto de cores para os outros 7 bits do byte. Então, cada um dos 40 bytes de uma linha tinham 7 bits usados, gerando os 280 pontos. Mas ainda tinha um detalhe: Dois bits adjacentes eram usados para definir cores distintas. Se tivessem dois bits um ao lado do outro ligados no vídeo (11) a cor era branca. Já se tivesse um pixel apagado e um aceso (01) as cores poderiam ser verde ou laranja (dependia do bit 7). Se os pixels fossem aceso e apagado (10) as cores poderiam ser Violeta ou azul (também dependia do bit 7). Como o mais comum na época eram monitores verdes, tudo ficava bom porque as cores viravam verdes. Mas se você tentasse usar um vídeo colorido, as letras ficavam com pontos de cores diferentes. E se tentasse mover todos os pontos da imagem 1 pixel apenas para o lado, as cores mudavam todas. Era uma arte criar jogos e aproveitar da melhor forma estes 280 pontos na tela. Olha só como era se tentássemos escrever na tela em alta resolução :

Não foi fornecido texto alternativo para esta imagem

Tá vendo como as letras ficavam coloridas ? Em um monitor verde ficava ótimo, mas no colorido, precisava pensar em como colocar os pixels na tela, porque dois pixels mudavam de cor, dependendo se estavam acesos ou apagados um ao lado do outro. Mas foi uma decisão de Steve Wozniak, provavelmente um dos últimos deuses da informática ainda vivos. Ele foi o criador do AppleII.

ZX Spectrum

No ZX Spectrum, que também tinha 16k, na maioria dos modelos, eles optaram por fazer assim : Cada quadrado que compõe uma letra (8x8 pontos), tinha uma mesma cor de frente e uma cor de fundo. Para cada um destes quadrados de 8x8, existia um byte dividido em 3 bits para definir a cor da frente, 3 bits para definir a cor do fundo, e ainda sobravam dois bits, que significavam hilight e blink (piscante). Eu acho que era mais fácil para os algoritmos desenharem, porque não mudavam a cor a cada pixel adjacente, como no Apple II, mas tinha um outro efeito. Os desenhos precisavam combinar blocos de 8x8. Dentro de cada quadradinho deste, a cor tinha que ser a mesma para os pontos. Olha só como eram as imagens de um ZXSpectrum:

Não foi fornecido texto alternativo para esta imagem

Você consegue ver os padrões quadrados que isolam as cores ? Dá para ver que dentro de um mesmo quadradinho sempre tem duas cores, uma para frente e outra para o fundo. Ao longo do tempo, depois de rodar vários programas, acaba ficando repetitivo, e diria até cansativo.

Atari 400 e Atari 800

A Atari acabou criando outro mecanismo também inovador para economizar memória de vídeo. Eles optaram por dividir por faixas na tela, e cada uma delas poderia ser formada por uma resoluções diferentes. Eu particularmente acho que este acabava gerando o melhor efeito visual :

Não foi fornecido texto alternativo para esta imagem

Você poderia ter uma área com letras maiores, ocupando menos espaço, como os pontos do Caratê, na imagem superior esquerda, e uma combinação entre áreas com desenho e texto puro, como a imagem do canto superior direito. No processador de vídeo dele, chamado ANTIC, você definia um conjunto de bytes, e para cada segmento definia um dos tipos de resolução. Cada um deles ocupava um espaço em tela, mas era variável. Assim poderíamos definir diferentes resoluções para cada "faixa" na tela. Ele tinha modos mais simples com 40 caracteres, que ocupavam 960 bytes, até modos com 320 pontos na tela e 2 cores, que ocupavam 7680 bytes. Mas você poderia definir uma área em alta resolução menor na tela, reduzindo este valor de 7680 para a metade, por exemplo, se definisse este modo para metade da tela apenas.

Como você pode ver, nesta década de 70 e 80, surgimento dos computadores pessoais, a regra parecia ser criar formas inventivas para economizar bits para o vídeo, indo desde quase nada de memória (20 bits do atari 2600), mas jogando uma grande carga para o processador do jogo ou computador, ou reutilizando bits, como o Apple II, ou ainda não utilizando memória para áreas da tela sem pontos, como foi feito para o ZX80 e ZX81.

Com o surgimento dos PCs, o preço das memórias despencou, e como a decisão no PC foi colocar placas de vídeo fáceis de substituir, surgiu uma diversidade grande de opções: MDA, CGA, VGA, Hercules. e muitas outras. Hoje, as placas de vídeo podem se dar ao luxo de ter dezenas de gigabytes de espaço, com milhares de cores por ponto, e até processadores específicos para tratamento de imagens.

E vários outros artigos que você também pode encontrar no meu perfil, sobre eletrônica, Inteligência artificial, computação natural, MicroServiços, Containers e Matemática, todos eles de uma forma, digamos, não usual!

Basta procurar por outros artigos no linkedin por #glaucoreis, ou olhar no meu perfil artigos publicados em Destaque.

Obrigado e até a próxima !

#glaucoreis #zx80 #zx81 #appleii #atari2600 #atari400

Luciano Duarte Ferreira

Customer Success Manager Architect

3 a

A geração que trabalhava nos 1970's era incrível, a geração que na minha cabeça seria "jovem para sempre", hoje de cabelos brancos, tinha desafios muito mais complexos dos que os que temos hoje: se hoje em dia, o camarada reclama de calcular a quantidade de bytes de um registro para otimizar o processamento dele mesmo, imputando culpa nas ferramentas, com inúmeras funções que permitem otimização, fazer o cara programar para um produto com arte final, vendido para famílias de classe média se divertirem jogando, só com um punhado de bytes de memória e um "quadradinho" minúsculo de artifícios, é de se tirar o chapéu. Mais uma vez, parabéns pelo brilhante texto! 😉

Ricardo Herminio Barros

Lider Técnico | Gerente de Projetos | Especialista em Seguros | IFRS17 | SAS | SAP | Desenvolvedor Mainframe | Arquitetura Corporativa | Integrações | BI | ETL | Analytics | Data Science | Cloud | AWS | Azure

3 a

Eu vivi esta época. Em computares pessoais havia o uso de fitas K7 a torto e a direito. Nos mainframes, todos os sistemas usavam fitas (vide as imensas fitotecas que as empresas mantinham, inclusive com funcionários com uma função de "fitotecário", e as raras areas em disco online (gerenciadas pelo CA-Dynam/D por exemplo) eram de uso comunitário, isto é, tinhamos que combinar com os analisas de outros sistemas a vez de usar. Hoje é tudo TB para cá, TB para lá...rsrsrsrs!

Marcelo Martins

Senior Software Engineering na TD Securities

3 a

Censacinal meu caro, é realmente interessante o que os programadores da época faziam com tão pouca memória disponível. A maioria dos softwares demandavam algoritmos muito bem elaborados.

José Carlos Bronze

Systems Analyst at IBM Global Services

3 a

Outra qualidade do Glauco: historiador! Está história que remete aos primórdios dos computadores pessoais causa arrepios. Demandava esforço grande para contornar as limitações dos equipamentos. Nesta época eu trabalhava com os mainframes /360 e também aí havia a necessidade de economizar memoria embora de forma não tão dramática. Mas mesmo assim era comum desmembrar programas ou ainda usar por exemplo a linguagem Assembler para economizar memória que ainda era bastante cara na época. Tempos heróicos!

Entre para ver ou adicionar um comentário

Outros artigos de Glauco Reis

  • DEVS e a computação quântica

    DEVS e a computação quântica

    Recentemente resolvi assistir a um episódio de DEVS, uma série que encontrei perdida na Disney de 2020, meio que sem…

    1 comentário
  • Michael Jackson nos ensine para que serve uma IA generativa !

    Michael Jackson nos ensine para que serve uma IA generativa !

    Olha, meus amigos. Vou parecer repetitivo, e na verdade serei repetitivo mesmo.

    6 comentários
  • A Inteligência Artificial pela rede Globo

    A Inteligência Artificial pela rede Globo

    Este final de semana fui assistir à reprise do Globo Reporter sobre Inteligência Artificial apresentado na última sexta…

    8 comentários
  • A história esquecida do PC

    A história esquecida do PC

    Se você me acompanha, sabe que eu coleciono computadores anteriores ao PC. Estamos falando de computadores com Z80…

    8 comentários
  • Quem NÃO olha para os erros do passado, comete os mesmos erros no futuro

    Quem NÃO olha para os erros do passado, comete os mesmos erros no futuro

    Neste artigo, inusitadamente começo com uma frase que diz quase tudo a que este artigo se refere. Vou contar uma…

    4 comentários
  • As IAs generativas e o gol de mão do Maradona

    As IAs generativas e o gol de mão do Maradona

    TODOS os dias, sem exceção, aparecem aqui fracassos ou distorções gerados por alguma IA generativa. Seja uma face do…

    4 comentários
  • Sobre "conectar os pontos" de Steve Jobs

    Sobre "conectar os pontos" de Steve Jobs

    Vou fazer aqui algo não muito usual. Agora a pouco estava curtindo um post sobre a vida do Steve Jobs, e me lembrei do…

    18 comentários
  • Prêmio Nobel de física e os invernos da Inteligência artificial

    Prêmio Nobel de física e os invernos da Inteligência artificial

    Olha, saiu do forno o prêmio Nobel de física! O surpreendente foi que neste premio, pesquisadores que dedicaram boa…

    6 comentários
  • Brownian Motion e a computação Quântica

    Brownian Motion e a computação Quântica

    A poeira é algo que incomoda demais os aficionados por limpeza. Mas o polen, que também é uma partícula, permite a…

    5 comentários
  • O jogo da imitação e a computação quântica

    O jogo da imitação e a computação quântica

    Esta semana que passou tive a oportunidade de participar do TDC São Paulo, e lá encontrei pessoas queridas que não via…

    9 comentários

Outras pessoas também visualizaram

Conferir tópicos