Controles de MegaDrive no MSX (JoyMega)

Sabia que você pode usar um joystick MegaDrive de 3 ou 6 botões em um MSX? Pois é verdade! Mas para quê, se os jogos de MSX só reconhecem dois botões nos joysticks? Eis a resposta: existe uma comunidade fortemente dedicada ap melhoramento de jogos antigos, assim como desenvolvimento de jogos inéditos, que já está dando suporte à este tipo de controle. Veja a versão “Enhanced HDD” do Firehawk -Thexder 2, por exemplo 😉

Então confira só esse tutorial para fazer um adaptador para usar controles de MegaDrive no MSX, reconhecendo os 6 seis botões (na verdade 8, contando MODE e o Start):

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:

1     Para cima
2     Para baixo
3     Esquerda
4     Direita
5     +5V
6     A/B
7     Seleciona
8     Terra
9     Start/C

No MSX, praticamente cada um dos pinos possui um botão respectivo 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. Através do uso de um multiplexador pode-se selecionar o botão que deseja 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:

1     Para cima
2     Para baixo
3     Esquerda
4     Direita
5     +5V
6     Trigger 1
7     Trigger 2
8     OUT
9     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 ao  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:

Porta 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 oito) 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 lembrá-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.

Fonte: Sergio Guerrero Miralles, publicado no FRS’ MSX Page.

5 comentários sobre “Controles de MegaDrive no MSX (JoyMega)

  1. amigo obrigado pela explicação você poderia me ajudar? tenho um mega drive 3 e no sonic 3 o start pula e pausa o A e B não funcionam pode me ajudar?

  2. por favor me ajude ja verifiquei oconector do controle e ta ok sempre qndo vou jogar aperto o start e o sonic no mesmo tempo so o C funciana normal me ajudem!!!

  3. Amigo, isso pode ser problema no controle ou na porta do console. Se você manja de eletrônica, abra eles e confira se todos os pinos estão ok, ou se há algum curto. Senão, só comprando um controle novo 😛

    1. é verdade tem um certo mau contato com um pino mas eu ja consertei agora todos os pinos ta ok mas o problema ainda continua

Deixe um comentário