O adaptador USB para controles de Nintendo 64 foi desenvolvido como projeto final da disciplina de Laboratório de Microprocessadores no semetre 2009/1 na Universidade Federal de Santa Catarina.
O projeto consiste na criação de uma interface de comunicação USB com capacidade para até 4 controles do console Nintendo 64.
O microcontrolador utilizado no projeto é o Atmel AVR Atmega8. Ele foi escolhido por ter baixo custo e um bom suporte de ferramentas de projeto.
O driver USB utilizado no projeto do adaptador é o V-USB. O V-USB é uma implementação compatível com USB 1.1 para microcontroladores AVR da Atmel, que tenham no mínimo 2 kB de memória flash, 128 bytes de RAM e operem em uma frequência mínima de 12 MHz. O driver suporta taxas de chaveamento de clock de 12 MHz, 15 MHz, 16 MHz, 16.5 MHz e 20 MHz. O adaptador desenvolvido opera em uma frequência de 16 MHz
USB é mais complexo do que uma interface serial, por exemplo. O padrão não só define como os bits são transferidos mas também como o dispositivo deve se apresentar ao hospedeiro. O elemento desenvolvido identifica-se perante ao hospedeiro como 4 dispositivos HID (Human Interface Device), que são os 4 controles conectados ao adaptador. Nenhum driver além dos padrões para dispositivos HID são necessários para que os controles se comuniquem de maneira adequada com o hospedeiro.
O envio de informações sobre o botão pressionado é feito através de um relatório de 32 bits enviado pelo controle toda vez em que lhe é enviada uma requisição (0x01). O formato do relatório é especificado na tabela a seguir:
Bit | Botão |
---|---|
0 | A |
1 | B |
2 | Z |
3 | Start |
4 | Direcional Cima |
5 | Direcional Baixo |
6 | Direcional Esquerda |
7 | Direcional Direita |
8 | Desconhecido (sempre 0) |
9 | Desconhecido (sempre 0) |
10 | L |
11 | R |
12 | C Cima |
13 | C Baixo |
14 | C Esquerda |
15 | C Direita |
Os 16 bits restantes são informações do joystick analógico, sendo 8 bits para informação sobre o eixo X e os outros 8 bits para informação sobre o eixo Y.