Ola!
Neste post vamos falar um pouco sobre como construir uma interface I/O digital para o Mega Drive.
O mesmo conceito pode ser aplicado a praticamente qualquer tipo de sistema microprocessado, vale lembrar que em resumo um Mega Drive nada mais é do que um computador impulsionado por um microprocessador Motorola MC68000 (16/32 Bits).
Quando pensamos em computadores devemos ter em mente que basicamente todos eles funcionam de maneira similar, todos tem uma unidade central de processamento e um "Barramento" por onde essa unidade se comunica com os demais periféricos, dependendo da arquitetura pode haver mais de um barramento, mas neste post vamos tratar da arquitetura CISC que tem um barramento apenas.
Esse barramento é importante por que ele é a unica maneira do processador se comunicar com o mundo exterior, vale lembrar também que o processador só consegue conversar com a memoria! Logo não importa que dispositivo você conecte ali, ele sempre vai enxergar como uma posição de memoria!
Sabendo disso temos apenas que condicionar nosso periférico para que ele consiga se comunicar com o processador como uma memoria faria!
Vamos ver como fazer isso:
O Barramento do sistema é composto basicamente de outros 3 Barramentos menores, o Barramento de Dados (Data Bus), o barramento de Endereços (Address Bus) e o Barramento de Sinais de controle (control Bus).
O barramento de endereços indica que posição da memoria estamos acessando, o barramento de controle vai dizer se estamos lendo ou gravando naquela posição e o barramento de dados é por onde vai sair ou entrar a informação referente aquela posição de memoria que estamos acessando.
Essa imagem logo acima é apenas representativa, ela serve mais como fluxograma do que como uma representação real de um sistema computacional, pois na verdade o barramento é único e todos os periféricos estão distribuídos pelo barramento em seções diferentes da memoria, justamente por isso precisamos definir a que altura de endereço cada periférico está posicionado, ou seja, criar um "mapa" da memoria para indicar a posição de cada coisa... Então temos um elemento a mais no sistema, o Memory Mapper (ou mapeador de memoria).
Ele vai realizar o papel mais importante que é gerenciar como todos esses dispositivos se comunicam com o processador, isso é possível analisando qual posição de memoria o processador esta acessando e baseado nisso o Mapper gera um sinal de "Chip Enable" para aquele dispositivo especifico com o qual o processador quer conversar, sendo que todos os demais periféricos do barramento devem manter suas portas de comunicação no que chamamos de Tri-State (terceiro estado).
Para quem não sabe o que é o terceiro estado vou dar uma breve explicação, aprendemos que na eletrônica digital trabalhamos sempre com Zero e Um, porem o valor de 0/1 é representado por um sinal elétrico (ou a ausência dele), quando ligamos vários dispositivo paralelamente num barramento é necessário que os sinais de um não se misturem com os sinais dos outros, pra isso temos o tri-State, esse estado é ativado/desativado por meio do sinal Chip-Select, quando o tri-State estiver ativado os pinos dos dispositivos no barramento assumem um estado de "Alta Impedância", então é como se eles estivessem desconectados do barramento, o que os torna "Invisíveis" para os sinais trafegando ali, dessa maneira eles não atrapalham a comunicação... Sendo que o mapper vai cuidar de ativar ou desativar o tri-State de acordo com o periférico com o qual o processador quer conversar, assim apenas o processador e o periférico ao qual ele esta acessando vão poder "usar" o barramento.
Um diagrama de blocos do sistema inteiro ficaria mais ou menos assim:
Com isso nós já sabemos o que precisamos para integrar um dispositivo ao barramento do sistema.
Precisamos definir a posição de memoria onde ele vai ficar, projetar um mapper que vai gerenciar o acesso dele ao barramento com base nessa posição de memoria definida e por ultimo precisamos torna-lo responsivo aos sinais de controle e de dados do processador, para que assim o processador consiga controlar-lo.
Um port I/O digital se resume basicamente a um circuito que se comporta como um registrador, uma simples posição de memoria que tem cada um de seus bits associados a um pino de saída o que nos permite enviar ou receber sinais elétricos, o próprio barramento de dados faz isso, porem apenas por um curto período de tempo equivalente ao tempo em que o processador esta acessando aquela posição de memoria, assim que o processador passasse para aproxima instrução esse valor se perderia.
Então para construir uma interface I/O precisamos construir um registrador que sirva como Latch, um circuito estável capaz de armazenar a informação até o próximo acesso do processador naquela posição de memoria.
Isso pode ser feito usando Flip-Flops tipo D.
Esse post foi mais como uma introdução, veremos toda a parte da eletrônica no próximo Post. Espero que tenham gostado, qualquer duvida, critica ou sugestão deixem ai nos comentários.
Nenhum comentário:
Postar um comentário