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.
Um comentário:
Adorei a ideia! :)
Postar um comentário