Usando o controle do PS2 ou PSX no MSX - Parte 1

    Bom pessoal, entre uma viagem e um compromisso, organizando meu tempo, sobraram 7 horas livres para fazer alguma coisa. 
    Pensando sobre o MSX que eu troquei recentemente com um amigo do IRC, resolvi aproveitar esse tempinho pra tentar utilizar o controle do Playstation 1 ou 2, para o MSX.
    Veja abaixo a montagem provisória que fiz para os testes.


    O computador MSX, assim como o Atari 2600 e alguns outros equipamentos da época, usavam josticks onde as chaves iam diretamente para o conector do console, porém o PSX tem joysticks um pouco diferentes.
    Eles não tem as chaves conectadas diretamente, mas sim pelo conector é feita uma comunicação serial síncrona para se transferir os comandos do PSX para o joystick.
    Para então usar esse controle no MSX, eu trabalhei nessas horinhas que me sobraram em cima do protocolo desse pad, entendendo o mesmo, e também usando um microcontrolador para se ler os botões nesse controle.
    Inicialmente, usando um kit com microcontrolador AVR ATMEGA16, fiz um programa e consegui a comunicação e decodificação desse protocolo, com ajuda da seguinte página:
http://sophiateam.undrgnd.free.fr/psx/index.html

    Depois de interpretar, concluí que são transferidos dados de 8 bits, com dado válido no edge de subida do clock, onde temos dois dados:
    1-Sinal DATA: Sinal de saída de dados serial do controle
    2-Sinal COMMAND: Sinal de entrada de dados do controle
   Além do já conhecido CLOCK, temos também o sinal ATT, que deve ser levado a nível baixo durante a requisição de comunicação pelo PSX ao controle.
   Com um pouco de bitbang e, interpretando os dados que eram cedidos pelo controle após os comandos 0x01 e 0x42, com a ajuda de algumas funções lógicas no C consegui fazer uma função que faz a leitura do controle, retornando uma variável com os seguintes bits:

   b7 = Botão direção abaixo
   b6 = Botão direção direita
   b5 = Botão direção acima
   b4 = Botão direção esquerda
   b3 = Botão X
   b2 = Botão O
   b1 = Botão Triângulo

   Ou seja, caso o usuário aperte n botões ao mesmo tempo, o resultado final será a operação OU destes valores.
   Abaixo mostro uma screenshot tirada no osciloscópio com o canal 2 sendo o clock gerado pelo AVR já programado e o canal 1 sendo a resposta enviada pelo controle, a rotina envia o clock e comando, lendo o dado e convertendo-o para este formato acima descrito.


      Com a rotina já testada, agora os próximos passos são:
    1-Portar o código em C da arquitetura AVR para um micro 8051 AT89C4051
    2-Fazer o layout da placa
    3-Testar o sistema agora com o micro definitivo
    4-Montar e testar no MSX real

     Estes passos são rápidos, o mais demorado é o frete para a placa chegar aqui em casa.


    No final das contas, as 7 horas foram muito mais que suficientes, gastei 3 horas para fazer essa rotina, entender o protocolo e montar o setup todo desde a conexão do joystick ao kit.
    Agora vou saindo para uma viagem, quando tudo estiver pronto posto o código, placas e demais resultados.
    Um ótimo fim de semana e comentem!!

0 comentários:

Postar um comentário