sexta-feira, 28 de outubro de 2016

Cartucho Caps Lock para Expert

Longe de casa, numa viagem a trabalho, sexta feira a noite sem ter o que fazer, estava eu escutando o Repórter Retro em sua vigésima edição quando um dos locutores sugeriu, em tom de brincadeira um cartucho com LED de Caps Lock para o Expert.


Como já havia projetado um circuito de Caps Lock para o ZX Spectrum (que nunca existiu no projeto original) resolvi entrar na brincadeira e projetar o tal cartucho de Caps Lock para o Expert utilizando o mesmo princípio.

Para ativar o LED de Caps lock o MSX utiliza o bit 6 da porta C da PPI que é mapeada no endereço de I/O 0xAAh. Então basta capturar as escritas neste mesmo endereço para se ter uma cópia do estado do LED.

O circuito pode ser implementado facilmente numa PLD, mas para manter o espírito retro o circuito foi projetado utilizando Chips TTL.

O endereço 0xAA pode ser representado em binário por 0b10101010 que correspondem às linhas de endereço A0..A7 nos seguintes estados.

linha  A7 A6 A5 A4 A3 A2 A1 A0
       1  0  1  0  1  0  1  0
 
Além disso devemos decodificar os sinais /WR e /IORQ em nível baixo

linha  A7 A6 A5 A4 A3 A2 A1 A0  /WR  /IORQ
       1  0  1  0  1  0  1  0    0    0
 
Adicionamente é necessário decodificar a linha /M1 em nível alto, para diferenciar um ciclo de leitura/escrita de I/O (/M1=1) de um ciclo de requisição de endereço adicional de vetor de interrupção (/M1=0).

linha  A7 A6 A5 A4 A3 A2 A1 A0  /WR  /IORQ /M1
       1  0  1  0  1  0  1  0    0    0     1


Para o circuito apresentado, isso não faz muita diferença, uma vez que estamos capturando somente as escritas, mas a linha /M1 vai continuar no circuito para fins didáticos.  

Continuando, a linha A2 não é utilizada na decodificação, tal qual no circuito do Expert (e do Hotbit). Sendo assim os sinais que devemos decodificar são:

linha  A7 A5 A3 A1 /M1
       1  1  1  1   1

linha  A6 A4 A0 /WR /IORQ
       0  0  0   0   0    

Aproveitando o espírito Sinclair do projeto anterior, os sinais em nível 1 vão para uma porta lógica AND formada por diodos. Qualquer dos sinais em nível "0" provoca um nível baixo na saída, sendo assim a linha G1 do 74LS138 só fica em nível alto quando todas as linhas A7, A5, A3, A1 e /M1 estão em nível alto.

As linhas /WR e /IORQ vão para os sinais /G2A e /G2B, e as linhas de endereço A6,A4,A0 vão para os pinos A,B,C do 74LS138.

Desta forma a saída /Y0 só será ativada quando todos os sinais A,B,C,/G2A,/G2B estiverem em nível baixo e o sinal G1 estiver em nível alto, o que corresponde ao endereço 0xAA ou o endereço da porta C da PPI.
O sinal do decodificador aciona um dos flip-flops de um 74LS74 que armazena o estado do bit 6 do barramento de dados do Z80.

O flip flop é acionado pela borda de subida do sinal do decodificador. Como a linha de dados do Z80 continua válida duarante a subida do sinal de /IORQ, não é necessário colocar um inversor entre a saída do decodificador (/Y0) e a entrada do flip flop (CLK).



A saída inversora do flip flop foi utilizada de forma a acender o LED através de um nível negativo, pois algumas portas TTL possuem mais capacidade de corrente para drenar energia (sink) do que para fornecer (source).

O Sinal de /RESET do Z80 é utilizado para apagar o LED durante o reset do Z80.

O circuito do cartucho de Caps Lock encontra-se na figura abaixo.

A distribuição dos sinais no 74LS138 foi feita feita para simplificar o layout do circuito impresso, cujo layout (em formato Eagle) se encontra no meu repositório do GitHub.