Como funciona um joystick de MegaDrive:
Os controles para MegaDrive/Genesis funcionam de uma forma muito semelhante ao do MSX, o que permite adapta-los muito facilmente e inclusive aproveitar todos os botões sem necessidade de muitos circuitos intermediários.
Esta é a pinagem de um conector de controle MegaDrive:
| | Para cima |
| | Para baixo |
| | Esquerda |
| | Direita |
| | +5V |
| | A/B |
| | Seleciona |
| | Terra |
| | Start/C |
Tal como no MSX, praticamente cada os pinos possui um respectivo um botão que o conecta ao a terra quando pressionado, entretanto no joystick do MegaDrive os botões A e B, e os botões C e Start usam pinos compartilhados. Mediante o uso de um multiplexador seleciona-se o botão que se queira ler. Por exemplo, para ler o estado do botão A deve-se setar para 0 (terra) o pino 7 a partir do console (MSX, no nosso caso) e ler o pino 6. Já para ler o status do botão B deve-se setar o pino 7 para 1 e ler o valor do pino 6. O mesmo vale para os botões Iniciar e C, usando-se o pino 9 em vez do 6. Quando o pino 7, correspondente ao multiplexador é 0 (terra) os pinos 1 e 2 são definidos como 0 e não mostram o estado dos botões direcionais para cima e para baixo.
O joystick de 6 botões é um pouco mais complexo, temos mais 4 botões: X, Y, Z e Mode, ainda no mesmo conector pois deve ser compatÃvel com o joystick 3 botões. Para obter o status dos novos botões de enviar uma sequência de 3 zero-um para o multiplexador, por isso temos de mudar rapidamente o estado do pino 7 desta forma: 010101. Ao fazê-lo ele irá mostrar o status de X, Y, Z e Mode nos pinos 3, 2, 1 e 4, respectivamente. Antes de enviar o último 1, quando o multiplexador contém 0 o joystick retornará os pinos 1, 2, 3 e 4 todos zerados, o que permitirá saber que trata-se de um joystick de 6 botões. Para o joystick mostrar novamente o estado dos botões normais é suficiente setar o multiplexador para 0, embora ele retorne por si mesmo após um determinado tempo (acredito que menos de 1/60s, mas não tenho certeza).
Como funciona a porta de joystick do MSX:
Esta é a pinagem da porta de joystick do MSX:
| | Para cima |
| | Para baixo |
| | Esquerda |
| | Direita |
| | +5V |
| | Trigger 1 |
| | Trigger 2 |
| | OUT |
| | Terra |
Os pinos do conector do joystick estão ligados ao PSG (que não serve apenas para gerar o som) e podem controlar seu estado com os registradores 14 e 15. O PSG é controlado diretamente através de portas e A0h, A1h e A2h do MSX ou através das rotinas especÃficas do BIOS, consulte o MSX Technical Hand Book ou o Livro Vermelho do MSX.
Através dos bits 0 a 5 do registrador 14 controlamos as entradas da porta de joystick, e os bits 6 e 7 cumprem outras funções que não nos interessam e portanto não os usaremos. Normalmente os pinos do conector do joystick não está conectados e portanto seus bits correspondentes no registrador 14 contém 1. Quando pressionamos um botão ou movemos o direcional do joystick os respectivos pinos são ligados à terra e o bit correspondente é setado para a 0.
Esta é a distribuição do registrador 14 do PSG:
| b0 | Estado do pino 1 |
| b1 | Estado do pino 2 |
| b2 | Estado do pino 3 |
| b3 | Estado do pino 4 |
| b4 | Estado do pino 6 |
| B5 | Estado do pino 7 |
| b6 | Modo do Teclado |
| b7 | Entrada da fita K7 |
Com o registrador 15 controlam-se as saÃdas da porta de joystick, seleciona-se a porta que lerá com o registrador 14 e também se controla o LED de status Kana, embora este último não nos interesse. As saÃdas da porta de joystick são o pino 8 e os pinos 6 e 7, mas nos dois últimos tocaremos pois não poderÃamos ler o status dos gatilhos. Embora este registrador controle as saÃdas da porta do joystick também pode ser lido, é claro que leremos mesma coisa que foi escrita, o que servirá para mascarar e assim não alterar os bits que não nos interessam.
Esta é a distribuição do registrador 15 do PSG:
| b0 | Escrita no pino 6 da porta A |
| b1 | Escrita no pino 7 da porta A |
| b2 | Escrita no pino 6 da porta B |
| b3 | Escrita no pino 7 da porta B |
| b4 | Escrita no pino 8 da porta A |
| B5 | Escrita no pino 8 da porta B |
| b6 | Seleção de porta. 0=A/1=B |
| b7 | LED de Status Kana |
O adaptador:
Bem, uma vez que sabemos como funciona o joystick do MegaDrive e
sabemos controlar a porta de joystick do nosso MSX, adaptar um joystick
é bem simples. O primeiro a se fazer é corresponder cada pino ao seu
respectivo, como segue:
| Puerto MSX | Joystick MegaDrive |
| Pino 7 | Pino 9 |
| Pino 8 | Pino 7 |
| Pino 9 | Pino 8 |
Assim utilizaremos o pino 8 da porta de joystick do MSX, que
normalmente não é usado, para controlar o multiplexador do joystick.
Problema: Por padrão o pino 8 contém 0, o que faz com que o joystick
nos mostre o estado dos botões A e Start, mas não o estado das direções
para cima e para baixo, e portanto não poderÃamos usa-lo como um
joystick normal de MSX. Para solucionar, o que podemos fazer (e foi o
que fiz) é passar o sinal do multiplexador por um inversor. O inversor
inverte o sinal que chega, ou seja quando chega um 0 ele irá enviar um
1 e vice-versa, e conseguiremos que o joystick retorne por padrão o
status de todos os botões direcionais e os botões A e C, como trigger 1
e 2. Quando queremos acessar o resto dos botões do joystick bastará
proceder como expliquei acima, mas considerando que temos os pinos 7 a
9 reordenados e a inversão no multiplexador.
Como um inversor utilizei o integrado 74LS04, que é muito simples e barato. Alimentação e o aterramento podem ser obtidos diretamente da própria porta de joystick.
Então, essas são as conexões:
Conclusão:
Depois de tudo pronto teremos um joystick de 6 (na realidade são 8)
botões funcionais a partir do MSX e também compatÃvel com o padrão,
pois os botões B e C são os gatilhos 1 e 2, respectivamente. Como
curiosidade vale dizer que o joystick é utilizável sem adaptador, mas
apenas o botão B estará disponÃvel como trigger 1 apenas pela sorte de
o pino 8 estar por padrão em 0 por estar ligado ao terra uma vez que
este corresponde ao pino de seleção no conector do joystick do MD. Se
não fosse assim nenhum botão funcionaria.
Fiz a
montagem em uma placa-padrão, que coube em uma caixa do tamanho de uma
caixa de fósforos. Não tive nenhum problema com um joystick de 6 botões
AsciiWare, muito bom por sinal. Para testá-lo criei um utilitário JoyMega, que verifica o status de todos os botões.
Quero lembra-lo que tudo o que eu disse sobre o funcionamento do
joystick não leva em conta o adaptador, ou seja para programá-lo no MSX
deve-se levar em conta que o pino de comando do multiplexador esta
invertido.
Veremos se alguém lerá isto e se
animará de fazer um jogo que suporte esses joysticks. Para qualquer
dúvida, escreva para sergio.guerrero@ctv.es.
Saudações,
Sergio Guerrero Miralles.