El Tiempo en el Nordeste Argentino

sábado, 19 de septiembre de 2009

Retro Adapter (Traducido al castellano)

El Retro Adapter V2 conecta la mayoría de los controles de las consolas al puerto USB. Este funciona con PCs corriendo Windows, Linux y con las Macs de Apple, incluso las consolas Sony Playstation 3. Viene disponible en forma de un kit al estilo "Hazlo tú mismo".
Hechale un vistazo a la página original para mas detalles del Retro Adapter.
Lo siguiente es un video del Retro Adapter y su nuevo prototipo (comienza despues del segmento de PacMan segment, at 1.35):



Después de experimentar con las primeras placas prototipo, se decidió rediseñar el hardware desde cero. El nuevo diseño tiene un conector DB9 y DB15, y utiliza un potente microcontrolador AVR con más memoria flash y soporte de actualizaciones de firmware a traves del puerto USB.
Los detalles del diseño viejo lo encontrarás aquí.

Soporta los siguientes controles, todos testeados y funcionando:

* joysticks digitales de 9 pins con 1 o 2 botones incluyendo:
o Atari 2600
o Atari 400 / 800 / 1200XL / 600XL / 800XL / 65XE / 130XE / 800XE
o Commodore VIC-20 / MAX / C64 / Amiga
o Amstrad CPC464, CPC6128 and CPC6128 Plus Digital Joysticks
* Atari 2600 Driving controller
* Atari 2600 Paddles
* Commodore C16 / C116 / Plus4 Joystick
* Dragon 32 / 64
* MSX Joystick
* NEC PC-Engine gamepad
* Neo Geo joystick / gamepad
* Nintendo Famicom / NES
* Nintendo Gamecube
* Nintendo N64
* Nintendo Super Famicom / SNES
* PC Gameport
* Sega Master System / SG 1000 / SG 1000 II / Mark III
* Sega MegaDrive (Genesis) (3 button and 6 button)
* Sega Saturn standard 6 button pad / arcade stick
* Sega Saturn Analogue (NiGHTS) Controller
* Sinclair ZX Spectrum Plus3 Joystick
* Sony Playstation 1 (PSX) original / Dual Shock / arcade stick / dance mat
* Sony Playstation 2 (PS2) Dual Shock 2 / arcade stick / dance mat
* Tandy TRS-80 CoCo (Colour Computer)
* TurboGrafx-16 gamepad
* X68000 Joystick

No probados pero en teoría funcionan:

* Sinclair ZX Spectrum Kempston Joystick
* TI-99 / 4A Joystick *

Planeados para que funcionen proximamente:

* Apple IIc Analogue Joystick
* Apple IIc Paddles
* Amiga mouse
* Amstrad Analogue Joystick
* Atari 5200 controller
* Atari Enhanced Joystick
* Atari Mouse
* Fairchild Channel F joystick
* Fujitsu FM Towns / FM Towns Marty
* NEC PC-Engine multitap
* NEC PC-FX
* Nintendo 64
* Nintendo Gamecube
* Nintendo Virtual Boy
* Sega Dreamcast
* Sega Saturn multi-tap
* SNK Neo Geo joystick / gamepad
* Sony Playstation train controller
* Vectrex Controller

La decodificación delDreamcast Maple bus funciona ahora, pero necesita ser probado. Hasta donde se sabe este diseñador es la primera persona en lograr esto en un microcontrolador. El software Saleae Logic logic analyser fue invaluable para el desarrollo y la depuración del código. Existe una review en el blog del desarrollador.

Diseño del Hardware
Prototype schematic
Prototype PCB design
Esquemático del prototipo PCB del prototipo
Muchas gracias a Seeed Studio por el excelente trabajo en fabricar los PCBs prototipos. Se los recomienda porque son muy amigables y de mucha ayuda. Producen excelentes placas de calidad.

Mapa de conexiones del microcontrolador AVR:



























ATmega168 9 pin D-sub 15 pin D-sub

PD0 1 Up 15 Up
PD3 2 Down
PD4 3 Left 14 Left
PD5 4 Right
PD6 6 Button 1
PD7 7 Select

PB0 9 Button 2
PB1
7 Down
PB2
6 Right
PB3
5 B
PB4
4 D
PB5
3 Select

PC0
13 A
PC1
12 C
PC2
11 Start
PC3
10 NC
PC4
9 D (NC*)
PC5
2 NC

Vcc 5 +5V 8 +5V
GND 8 GND 1 GND



* Pin 9 y pin 4 están conectados al boton D en los controles de Neo Geo, pero la Neo Geo solamente checkea el pin 4.


Mapa de conecciones por conector:













DB9 Atari/C=/Sega Famicom NES SNES N64†Gamecube Atari Driving C16 & Plus/4

1 1 Up (0) (0) (0) (0) (0) 1 Grey 1 1 JOY1
2 2 Down (0) (0) (0) (0) (0)
2 JOY2
3 3 Left (0) (0) (0) (1) (1) 2 Grey 2 3 JOY3
4 4 Right 11 Data 4 Data 4 Data


4 JOY4
5 5 +5V * 9 +5V 5 +5V 1 +5V 1 +5V†1 +5V†5 +5V 5 +5V
6 6 Button 1 ¶




6 Button 6 Button 1
7 7 [Select] * 12 Latch 3 Latch 3 Latch



8 8 GND 1 GND 1 GND 7 GND 3 GND 3+4 GND 8 GND 7 GND
9 9 Button 2 10 Clock 2 Clock 2 Clock 2 Data 2 Data
8 DATA



















DB15 Neo Geo Saturn Playstation PC-Engine PC-FX

1 1 GND 9 GND 4 GND 8 GND 7+5 GND
2 2 NC (0) (0) (0) (0)
3 3 Select 2 D1 (Down) 1 Data 2 Up / I 2 Data
4 4 D 3 D0 (up) 2 Command 3 Right / II 3 DDR
5 5 B 4 D6 (TH) 6 Attention 4 Down / Select 4 Latch
6 6 Right 5 D5 (TR) 7 Clock 5 Left / Run 6 Clock
7 7 Down 6 D4 (TL) 9 Acknowledge 6 Data Select
8 8 +5V 1 +5V 5 +5V 1 +5V 1 +5V
9 9 D (NC) (0) (0) (0) (0)
10 10 NC (0) (0) (0) (0)
11 11 Start (0) (0) (1) (1)
12 12 C (0) (1) (1) (0)
13 13 A ¶



14 14 Left 7 D3 (Right)
7 Enable
15 14 Up 8 D2 (Left)



Key: (0) - usado para identificación del conector, conectar a GND
(1) - usado para identificación del conector, no conectar
* Pin 5 es +5V en el Retro Adapter. En Amiga y otras computadoras Commodore, el pin 5 es el tercer boton y el pin 7 es +5V. No conectar joysticks de 3 botones o mouse. El Pin 7 se mantiene alto la mayoría del tiempo, el cual permite el operar el circuito "auto-fire".
† Los controles de N64 y Gamecube requieren 3.3V, el cual puede ser facilmente generado por un regulador de voltaje 3.3V. En el N64 el pin 1 es 3.3V, en el Gamecube el pin 6 es 3.3V. el pin 5 de Gamecube no está conectado.
¶ Usado para arrancar el bootloader.
Conexiones preliminares del control:Google Spreadsheet
Diagrama de conectores
(vista desde la consola, indicación del pin 1):
Sega Saturn
Playstation
Super Famicom
PC-EngineTurboGrafx
N64
Sega Saturn
Playstation
Super Famicom
SNES

PC-Engine
TurboGrafx

N64

Famicom
Gamecube
Famicom
NES

Gamecube

El PDF contiene todos los conectores tanto de la consola como los controles: connectors.pdf
El PCB encaja dentro de una carcaza DB9-DB25, y contiene un DB9 en un extremo y un DB15 en el otro. El DB9 puede aceptar la mayoria de los controles con DB9, como los joysticks Atari/Commodore style joysticks, y también los gamepads de Sega Master System y Megadrive (Gensis). Con los conectores correctos de pueden conectar los gamepads de Nintendo NES/SNES/N64/Gamecube, como también los controles de manejo de ATARI y unos cuantos otros.
El DB15 en el otro extremo puede aceptar directamente los joysticks y gamepads de Neo Geo. Con conectores extra puede soportar todos los demas controles, y hasta tiene lugar a una expansion futura. Conectando a gnd ciertos pines, el AVR reconoce automáticamente cual conector está conectado asi que todo es tan simple como "conectar y jugar."
La carcaza conversora DB9-DB25 es barato y práctico, listo para alojar la placa. Se necesita un agujero en un lateral para conectar el cable USB. La conexión USB solo requiere de un cable común, y no es critica la ubicación del agujero.
El microcontrolador ATmega168 contiene suficientes puertos I/O para cubrir todos los pines de cada conector, solo 2 son compartidos. La memoria flash de 16K es mas que suficiente y tiene espacio para una expansión, incluso soporta "bootloading" para actualizaciones de firmware por USB.
El mejor acierto que tiene es su facilidad para el diseño y producción de kits de armado, el cual es extendible para nuevos controles. El AVR es el unico componente de montaje superficial, todos los demás son en la forma convencional. La programación inicial se realiza mediante el DB15 y tiene un punto especial de reset, despues de que el firmware es actualizado por USB. El empaquetado del AVR's TQFP no es muy difícil de soldar, pero se puede proveer kit pre-soldados y programados para armar.

Diseño del Firmware
El firmware hace uso del V-USB, un software gratis y open-source solamente para microcontroladores AVR USB framework. En los tests de compatibilidad estuvo excelente y con una latencia extremadamente baja. El tamaño del código es pequeño y el diseño es flexible. Mientras el lenguaje preferido a usar sería el assembler, como fue hecha en la implementación original, el lenguaje C sería el mas práctico y el que da más posibilidades para crear una comunidad que ofrezca soporte. El Assembler será usado para algunas rutinas criticas de tiempo (se usaría para controles N64/Gamecube y Dreamcast).
Se continúa trabajando para actualizaciones del bootloader y firmware. Existen un par de implementaciones disponibles, las cuales tienen que ser evaluadas todavía.
El mapeado de botones fue originalmente diseñado usando la logica de ubicacion de los mismos. La idea era en tener ciertos botones en común, como el start/select y los botones del "lomo" de los controles (L y R) que siempre serán mapeados como los mismos botones. De esta manera cuando se configuren los botones para un juego en particular o un emulador, la mayoria de los controles funcionarían de la misma manera y los botones en su misma ubicación sin necesidad de remapearlos.
Ese era el plan, hasta que Sony frustró todo :( La Playstation 3 tiene su propio esquema de mapeo de botones, y a la hora de tener un pad de Playstation mapeado correctamente se tiene que cambiar el esquema completamente. Todo lo demas sigue siendo consistente.

Producto terminado
PCB rev. 3 top
PCB rev. 3 bottom
PCB rev. 3 top
PCB rev. 3 bottom

Assembled
Assembled
Assembled
Assembled

El producto final fue fabricado por Seeed Studio. Después de 3 revisiones todo quedó perfecto.
El AVR fue movido a la parte de abajo de la placa para facilitar el diseño de las pistas del PCB. Fue preocupante que algunas partes de la placa quedaron sobre limite de la tolerancia, el programa Seeed Studio informó que podría haber problemas de calidad, pero después de verificar 25 placas se constató que no tuvieron errores.
El diseño del PCB está disponible en formato Cadsoft Eagle en el archivo de abajo.

Descargas
Latest firmware, source code, schematic and PCB:
RetroAdapterV2_1.0.lzh / RetroAdapterV2_1.0.zip

Versiones anteriores:
RetroAdapterV2_0.9.lzh / RetroAdapterV2_0.9.zip
RetroAdapterV2_0.8.lzh / RetroAdapterV2_0.8.zip

0 comentarios: