Dissecando a ULA do TK90X - Parte 2



A porta 254


Para quem conhece pelo menos um pouco do funcionamento do TK90X, sabe que através da porta 254 do Z80 algumas funções pode ser executadas:
- Cor da borda
- Saída de som
- Saída Mic, usada para gravar programas na fita cassete
- Leitura da entrada Ear, para ler programas da fita
- Leitura do teclado

A maior parte do trabalho no entanto, é feito fora da ULA, no próprio circuito do TK. A parte que interessa de fato é bem simples no nosso esquema:


O sinal /CS é formado por componentes do TK que detectam um acesso na porta 254 da CPU, então, combinamos esse com o /WR numa porta OR, parte de um 74hc32, o U9 no esquema. Se ambos os sinal forem nivel baixo, estamos em modo de escrita e nesse momento a linha de dados, D0 a D7 é armazenado no latch (o equivalente a uma mémoria de um único byte) 74hc574, U13 no esquema. O sinal "VidBusEN" seria o aviso que a CPU tem preferência sobre a ULA. Ele foi adicionado aqui para resolver um bug de acionamento errático que ocorria em alguns TKs. Por algum motivo nessas máquinas as portas eram selecionadas fora da hora, então o VidBusEN foi colocado na equação. Falaremos mais dele quando chegar a hora, mas no momento basta dizer que serve para dizer que a CPU está no controle do barramento, não a ULA.

No VHDL, temos então:

	if ( CS = '0' and WR = '0' and vidbus_en = '1') then
            
		rSpk        <= ULA_D( 4 );              -- Escreve bit 4 na saida de som 
		rMic        <= ULA_D( 3 );              -- Escreve bit 3 na saida Mic
		BorderColor <= ULA_D( 2 downto 0 );     -- Guarda os bits de 0 a 2 como cor da borda
		
	end if;



Já o sinal /CS também é combinado com /RD em outra porta OR, dessa vez em U10, para detectar o modo de leitura. Na verdade todo o trabalho de leitura também é externo à ULA, ficando aqui só a tarefa de combinar os dois sinais.

No VHDL:

	if ( CS = '0' and RD = '0' and vidbus_en = '1') then
            
		KEYBOARD <= '0'; -- ativa o pino "KEYBOARD", dizendo para a ROM que e hora de ler o teclado e a porta EAR 
	
	else
	
		KEYBOARD <= '1'; -- saida "KEYBOARD" inativa    
		
	end if;

Voltar para o índice




Dúvidas, sugestões? Use o espaço abaixo.


Voltar - Home


Comente



COMENTÁRIOS DESABILITADOS NO MOMENTO! RETORNAM EM BREVE
É expressamente proibido a reprodução total ou parcial deste texto sem a minha devida autorização por escrito.