Dissecando a ULA do TK90X - Parte 5



O Gerador de Interrupções


O pino /INT da ULA fica normalmente em nível alto, mas desce gerando uma interrupção para a CPU a cada 50 ou 60Hz, dependendo o modo selecionado pelo pino 1 da ULA. Quando o Z80 recebe essa interrupção desvia a execução do processamento para o endereço 0x0038h da ROM que é responsável pela leitura do teclado.

     
    -- INT ocorre a cada 50 ou 60Hz, dependendo da selecao de frequencia
    process( clk7 )
    begin
        if falling_edge( clk7 ) then

            if ( ( vc = 223 and hc = 275 and VERT50_60 = '1' ) or 
                 ( vc = 247 and hc = 275 and VERT50_60 = '0' )) then
                 
                INT_n <= '0';
                
            elsif ( ( vc = 223 and  hc = 338 and VERT50_60 = '1' ) or
                    ( vc = 247 and  hc = 338 and VERT50_60 = '0' )) then
                     
                INT_n <= '1';
                
            end if;

        end if;
    end process;
	

Como vemos no código, se o contador horizontal estiver entre 275 e 338 e a linha vertical for 223 (ou 247 no caso de 50Hz), o sinal de /INT fica ativo por 64 pulsos de clock. Esses valores são exatamente o último pixel do "miolo" da tela, o ponto mais baixo a direita da área útil, antes da borda.

Já no esquema, é um pouco diferente e para economizar componentes, foi usado apenas um Flip Flop 7474 combinado com uma porta inversora.


O primeiro FF de U32 recebe como clock o sinal reset do contador horizontal, chamado de HCrst, ou seja, quando o contador horizontal termina, o FF armazena o VsyncEn, que como vimos na parte 4 deste artigo, fica ativo por 8 ciclos de clock, a partir do Vsync. Na prática o FF "clocka" a cada final de linha da tela, mas somente quando estamos no fim do miolo é que por 8 ciclos temos um nível baixo na saída inversa do primeiro FF.

Na segunda metade de U32 temos o pino de "set" em nível alto, então tão logo a saída inversa do primeiro FF, que está ligada a entrada de clock do segundo, abaixe, a saída inversa deste também abaixa, gerando o nosso sinal /INT. Note que o sinal permanesse abaixado até que o bit 6 do contador horizontal, invertido em U27, faça "reset" no segundo FF, levando o sinal a nível alto novamente após 64 pulsos do contador.

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.