Em 15 de Abril de 2011.
Desde que comecei a participar da
lista do TK90X um assunto recorrente é a ULA do TK.
Vários defendem com unhas e dentes a necessidade de se descobrir o funcionamento exato dela para fazer um possível clone.
Sim, mas o que é a ULA? Bem, a sigla propriamente dita vem de Uncommitted Logic Array.
É um chip de lógica que foi customizado pela Microdigital para o TK90X e é responsável pela grande maioria dos sistemas do TK.
E como ele surgiu?
Lá pelos anos 80 no auge da Reserva de Mercado era bem comum a prática da "clonagem" de equipamentos estrangeiros e não foi diferente com o ZX Spectrum lançado em 82 na Inglaterra e praticamente um sucesso instantâneo devido ao "alto poder" para o usuário doméstico unido com o baixo custo.
De olho neste mesmo filão no mercado nacional, a Microdigital iniciou então o seu processo de cópia, mas esbarrou num enorme problema: o Spectrum tinha um chip customizado que, além de não saberem o funcionamento interno, ainda deveria ser adaptado para a realidade brasileira.
Iniciou-se então um grande estudo acerca do chip para entender o funcionamento e começou-se a construir um circuito equivalente que faria as mesmas funções, mas no clone nacional.
Após incansáveis testes, este circuito já completamente funcional foi sendo convertido e resumido a portas lógicas e então miniaturizado e acondicionado dentro de um chip de 40 pinos, a nossa ULA nacional.
O que eu resumi apenas nesse parágrafo, na verdade custou mais de um ano de trabalho feito por dois engenheiros com apenas um osciloscópio e muita paciência, estudo e dedicação.
Irei descrever brevemente o funcionamento de cada pino indicando a função e a direção (se é um pino de entrada ou saída).
Ao contrário da ULA original do Spectrum, a nossa tem SOMENTE portas lógicas, portanto todos os sinais são digitais.
Os pinos foram divididos em grupos para facilitar a descrição, portanto estarão fora da ordem de contagem dos pinos. Para referência, pegue
aqui os esquemas do TK90X levantados pelo Jorge Braga.
Pino 1 - N.C.
Direção: Não se aplica
Não conectado. Não faz absolutamente nada.
Pino 40 - VCC 5V
Pino 20 - GND
Direção: Entrada
São os pinos de alimentação do CI. O Vcc vem diretamente do regulador de voltagem e o GND é ligado ao mesmo Terra do resto da placa.
Pino 11 - OSC - 14.30244 Mhz
Direção: Entrada
Este é o que realmente faz a ULA trabalhar. Um "trem de pulsos" vai continuamente neste pino, ditando o ritmo para todas as portas lógicas internas "andarem".
No Spectrum original a ULA trabalha com exatamente 14Mhz. Este então é dividido internamente por 2 para alimentar as portas lógicas que trabalham a 7Mhz e novamente por 2 para as portas que trabalham a 3.5Mhz.
Mas por que no nacional ficou esse número tão "cabalistico", 14.30244Mhz? Esse número é exatamente a frequência do PAL-M multiplicado por 4.
Então poderia ser economizado um cristal de frequência na montagem final do equipamento nacional.
Isso pode parecer irrisório, mas lá nos 80s pra uma fábrica que produziria milhares de máquinas era uma senhora economia.
pino 36 CPU - 3.57Mhz
Direção: Saída
Saída de Clock para o Z80. A partir daqui a ULA faz o Z80 andar, enviando os pulsos de clock para o processador a aproximadamente 3.57Mhz.
Isso é ligeiramente mais rápido que a frequência original do Spectrum que é 3.50Mhz para que a frequencia pudesse ser aproveitada para a geração das cores (vide pino 39).
Curiosamente de tempos em tempos este clock é cortado para que a ULA possa ter preferência no acesso da memória baixa.
Pino 39 - Subcarrier - 3.575611 Mhz
Direção: Saída
Frequência da subportadora de croma. É usada pelo circuito de vídeo para geração das cores do padrão PAL-M.
É o inverso da saída do clock da CPU, porém ao contrário desse, o clock aqui nunca para.
Esse mesmo clock é usado na parte de oscilação da fonte para gerar as tensões de -5V e +12V.
Pino 21 - Red
Pino 19 - Green
Pino 22 - Blue
Pino 18 - Bright
Direção: Saída
Aqui temos a saída de vídeo na sua forma digital. Com três bits temos 8 combinações possíveis de cores.
O pino 18, Bright, é um "modificador" para as cores e, quando acionado, diz que aquela aquela cor em particular é mais brilhante.
Na prática portanto, temos 16 cores possíveis, conforme organizei na tabela abaixo.
| Cor | R | G | B | Bright |
| Preto | 0 | 0 | 0 | 0 |
| Azul | 0 | 0 | 1 | 0 |
| Verde | 0 | 1 | 0 | 0 |
| Ciano | 0 | 1 | 1 | 0 |
| Vermelho | 1 | 0 | 0 | 0 |
| Magenta | 1 | 0 | 1 | 0 |
| Amarelo | 1 | 1 | 0 | 0 |
| Branco | 1 | 1 | 1 | 0 |
| Preto com brilho | 0 | 0 | 0 | 1 |
| Azul com brilho | 0 | 0 | 1 | 1 |
| Verde com brilho | 0 | 1 | 0 | 1 |
| Ciano com brilho | 0 | 1 | 1 | 1 |
| Vermelho com brilho | 1 | 0 | 0 | 1 |
| Magenta com brilho | 1 | 0 | 1 | 1 |
| Amarelo com brilho | 1 | 1 | 0 | 1 |
| Branco com brilho | 1 | 1 | 1 | 1 |
Pino 33 - Sync
Pino 35 - Burst Gate
Direção: Saída
Ocorrem a cerca de 15Khz marcando o sincronismo horizontal.
O pino
Sync marca o inicio e fim do
sync tip, ou seja, o sinal de sinconismos propriamente dito.
Já o
Burst Gate ocorre logo após e marca o inicio e o fim do
color burst para a sincronização das cores. Ele é necessário para o funcionamento do LM1886. Veja imagem abaixo para referência.
Fica mais fácil de perceber a função desses dois sinais mostrando no Osciloscópio. No canal 1 (vermelho) está o sinal de video composto e no canal 2 (amarelo) o Burst Gate.
Aqui, no canal 1 o video composto novamente e no canal 2 o Sync.
Pino 37 - A14
Pino 38 - A15
Direção: Entrada
Linhas de dados A14 e A15 necessárias para desempenho das funções internas.
Pino 15 - /MREQ
Pino 16 - /WR
Pino 17 - /RD
Direção: Entrada
Recebem os sinais diretamente da CPU.
O pino 15 é dividido também com a linha de RESET que é invertida numa porta lógica antes.
Portanto, quando o TK é resetado, este pino fica em nivel alto enquanto durar o pressionamento do botão.
Pinos 3 a 9 - A0 a A6
Direção: Saída
As linhas de endereços da ULA ficam conectadas diretamente as memórias (primeiros 16kb). Servem para controle da matriz de endereçamento (vide pino 12 e 13). As linhas de endereços da CPU também ficam ligados nessas memórias, porém por um multiplexador e resistores.
Pinos 25 a 32 - D0 a D7
Direção: Entrada e Saída
As linhas de dados da ULA ficam conectadas diretamente as memórias (primeiros 16kb). As linhas de dados da CPU também fica ligados nessas memórias, porém por resistores.
Pino 12 - /CAS
Pino 13 - /RAS
Pino 14 - /VRAMWR
Direção: Saída
Sinais de controle para as memórias de vídeo. As memórias dinâmicas funcionam com um sistema de endereçamento por matriz.
Então, para se acessar uma determinada posição da memória, posicionamos o endereço da linha nas portas A0 a A6 da memória e em seguida ativamos o sinal /RAS.
Em seguida, nas mesmas portas A0 a A6 colocamos o endereço da coluna e ativamos o sinal /CAS.
Com isso o dado gravado nessa posição da matriz aparece na porta DOUT da memória.
Para se fazer a gravação o processo de seleção é exatamente o mesmo, porém o sinal de /VRAWR é usado após o /CAS para fazer a gravação na matriz do dado que se encontra a porta DIN do chip.
O esquema de matriz ocupa menos espaço no chip, portanto sendo mais barato para produzir e consequentemente diminuindo o custo da peça, que naquela época era bastante significativo para uma fábrica de computadores.
Porém, a grande desvantagem delas é que precisam de um circuito extra para o
refresh das memórias. Sem esse "refrescamento" elas simplesmente perdem seu conteúdo após alguns poucos nanosegundos.
O refresh é feito posicionando sequencialmente cada linha da matriz nas portas A0 a A6 e executando o comando /RAS entre cada endereço.
Pino 34 - /INT - 60Hz
Direção: Saída
Normalmente em nível alto, gera uma interrupção para a CPU a cada 60Hz.
Essa interrupção desvia a execução do processamento para o endereço 0x0038h da ROM que é responsável pela leitura do teclado.
Um desses comando dessa rotina ativa o /CS da ULA (vide pino 2).
Pino 2 - /CS
Direção: Entrada
É o pino de controle para o Teclado, Som e MIC e é selecionado quando encontra uma instrução IN ou OUT na porta 0xFE (254 em decimal).
Na realidade o hardware do TK (ou do Spectrum) só decodificam o bit da linha A0, portanto uma operação em
qualquer porta par ativaria essa entrada,
no entanto o fabricante sempre recomendou usar somente a porta 254 para evitar incompatibilidade com futuros hardwares.
Pino 10 - Keyboard
Direção: Saída
É ativado para a leitura do teclado. Como somente os primeiros cinco bits de D0 a D4 são necessários para essa tarefa, o bit D6 é usado durante a leitura da porta EAR.
Note que a ULA simplesmente avisa quando vai ler o teclado (ou EAR). Os dados caem no barramento e ficam disponíveis para serem interpretados pela ROM.
Fica ativo quando o pino 2 (/CS) está selecionado e é executado um operação de leitura. Pino 17 (/RD) selecionado.
Pino 24 - Som
Direção: Saída
Neste pino é onde temos a saída de som e dele parte o famoso ponto "TP7", onde ligamos a saída de áudio no mod de A/V.
Fica ativo quando o pino 2 (/CS) está selecionado e é executado um operação de escrita. Pino 16 (/WR) selecionado.
Pino 23 - MIC
Direção: Saída
Saída de Áudio para o gravador cassete. Provavelmente é separada da saída de som para não saír o áudio na TV durante o comando SAVE.
Fica ativo quando o pino 2 (/CS) está selecionado e é executado um operação de escrita. Pino 16 (/WR) selecionado.
Bem, agora que já passamos da parte teórica, por que não algumas ilustrações?
Nas fotos acima, o Master Clock de cerca de 14Mhz na primeira linha, que está marcada como "Lab1 - 0".
Na verdade esse título da linha pode ser mudado, mas dá tanto trabalho que deixei assim mesmo. Então quando eu me referir a "linha 0" será essa.
Então, como eu dizia, o Master Clock (pino 11) na linha 0, o Clock da CPU (pino 36) na linha 1 e a subportadora (pino 39) na linha 3.
Veja na primeira foto que peguei um momento onde a ULA tinha parado a CPU interrompendo momentaneamente o clock.
Apesar da subportadora e o clock aparentemente ter a mesma largura, quando ampliado na foto 2, nota-se que a subportadora é ligeiramente menor.
Aliás, essa diferença praticamente nem é perceptível no osciloscópio. Só notei quando coloquei no analizador.
Os sinais de Sync (pino 33) na linha 0 e Burst Gate (pino 35) na linha 1. Ocorrem praticamente juntos, mas na ampliação na segunda foto, é possivel ver que o Burst Gate ocorre exatamente depois do sinal de Sync.
Na linha 0 o /CS (pino 2), na linha 1 o Keyboard (pino 10) e na linha 2 o /INT (pino 34).
Com o TK funcionando normalmente o /INT irá pulsar a cada 60Hz ou seja, sessenta vezes por segundo, gerando uma interrupção.
Uma das funções programadas na ROM nessa interrupção é ler o teclado. Veja que logo após a interrupção a ULA é selecionada e esta imediatamente gera o sinal de leitura do teclado.
Os sinais R, G, B e Sync. Essas imagens foram capturadas com aquela tela inicial "TK90X Color Computer" e como ela é toda branca, vejam que todos os bits estão em nivel alto.
Na segunda imagem peguei um outro ponto, muito provavelmente onde estão aquelas barras coloridas na parte de baixo.
Atualizado em 24 de maio de 2011
O Claudio Cassens, um dos engenheiros projetistas da ULA original cedeu as fotos do protótipo original.
Agradeço ao Claudio pela enorme contribuição.
Dúvidas ou sugestões, comente no espaço abaixo.
Em 22/4/2011 20:01:00 por Marcelo Martins
Fala Victor, blz? Cara, ficou show!!! Eu nunca compreendo qdo vcs comentão na lista TK90X, mas aqui, ficou muito mais simples. Principalmente a saída RGB. Muito legal. Valeu!
Em 23/4/2011 08:45:00 por Claudio Moises
Vitao! Voce sabe como eu era curioso e leigo em ULA tando que vc me deu uma dica basica! Com essa explicacao tecnica tudo clareou! Deu ate vontade de ingressar no grupo que quer clonar o clone. Parabens por mais esse maravilhoso trabalho e obrigado por compartilhar.
Em 23/4/2011 14:19:00 por Nelson
Fala Vitão, ficou show! Vc acha que isso pode ser implementado em alguma coisa?
Grande abraço.
Em 24/4/2011 12:29:00 por Wesley Camargo
Parabens pelo Artigo Victor, este foi realmente uma aula. valeu.
Em 28/4/2011 05:52:00 por Leonardo Suárez
Parabéns Victor e obrigado também. Esse é provavelmente o mais completo documento sobre a ULA do TK.
Em 6/5/2011 17:49:00 por francisco
E ai Victor quando vamos ter o artigo para colocarmos a saida RGB no Tk?
Em 6/5/2011 17:53:00 por Victor Trucco
Francisco, já fiz esse artigo a alguns meses. Veja na home que tem o artigo Saida RGB para o TK90X. Abraço
Em 4/7/2011 03:17:00 por Antonio Pereira
Me lembro que em 1989 eu estava saindo da ETFPB, atual IFPB, do curso de eletrônica e meu primeiro serviço pra ganhar dinheiro foi o reparo de um TK-95.
Tenho um exemplar desses até hoje. Em seguida fui trabalhar em uma empresa consertando Exato CCE. Velhos tempos...
Em 6/9/2011 20:28:00 por paulo larini
Olá Victor, onde se consegue comprar esse chip?
Em 6/9/2011 21:04:00 por Victor Trucco
Paulo, infelizmente não se consegue mais comprar. Hoje em dia o mais fácil é retirar de alguma sucata de TK ou do VEG8000 (veja o artigo sobre ele aqui mesmo no meu site). Um abraço
Em 6/9/2011 22:25:00 por paulo larini
Pois é. O meu parece ter problema nisso ai, veja só: quando ligo, aparece uma tela preta com borda branca e alguns quadradinhos coloridos na parte preta tipo que subindo. Tem alguma ai para vender?
Em 7/9/2011 06:25:00 por Victor Trucco
Paulo, pelo problema que vc descreve é defeito na memória baixa. ULA até hoje eu só vi uma com defeito e já devo ter consertado mais de 50 TKs a essa altura. Veja meus artigos de conserto que tem algumas dicas sobre isso. Abraco
Em 7/9/2011 07:47:00 por paulo larini
Se eu remover a rom, ele apresenta aquele padrão perfeito que vc diz: Uma máquina com a memória de video perfeita, mostrará um padrão de listras verticais pretas, azuis e brancas. Por isso acho que deve ser outra coisa.
Em 7/9/2011 08:55:00 por Victor Trucco
Paulo, então o defeito provavelmente é na propria ROM. Veja... Se o defeito fosse na ULA, nem aquele padrão listrado vc veria, certo? Claro que defeito em ULA pode acarretar em diversos problemas estranhos, mas é muito dificil ver uma com defeito. Tente uma outra ROM por ai. Abraço
Em 7/9/2011 10:53:00 por paulo larini
Farei isso, pode me dizer onde consigo outra? :)
Em 7/9/2011 11:04:00 por claudio moises
por engano me descadastrei mas voltei
Em 7/9/2011 11:18:00 por Victor Trucco
Paulo, alem de mim no RJ, posso te indicar vários amigos, dependendo da região do Brasil que vc estiver para gravação do chip. Fora isso, sempre se pode recorrer a uma sucatinha de TK... Abraço
Em 7/9/2011 17:18:00 por paulo larini
Ok, poderia me enviar um email off? Sou de maringá - PR, Obrigado.