Le source étant disponible sous GNU[1], il ne restait plus qu'à étudier quoi faire…
- Première chose, éditer le Makefile, pour remplacer atmega8 par atmega88
De là, tenter une compilation miracle, par la commande :
make
Qui renvoie ceci :
avr-gcc -Wall -Os -Iusbdrv -I. -mmcu=atmega88 -DF_CPU=12000000L -c usbdrv/usbdrv.c -o usbdrv/usbdrv.o
avr-gcc -Wall -Os -Iusbdrv -I. -mmcu=atmega88 -DF_CPU=12000000L -x assembler-with-cpp -c usbdrv/usbdrvasm.S -o usbdrv/usbdrvasm.o
avr-gcc -Wall -Os -Iusbdrv -I. -mmcu=atmega88 -DF_CPU=12000000L -c usbdrv/oddebug.c -o usbdrv/oddebug.o
avr-gcc -Wall -Os -Iusbdrv -I. -mmcu=atmega88 -DF_CPU=12000000L -c main.c -o main.o main.c: In function ‘hardwareInit’:
main.c:137: erreur: ‘TCCR0’ undeclared (first use in this function)
main.c:137: erreur: (Each undeclared identifier is reported only once
main.c:137: erreur: for each function it appears in.)
main.c:139: erreur: ‘TCCR2’ undeclared (first use in this function)
main.c:140: erreur: ‘OCR2’ undeclared (first use in this function)
main.c: In function ‘main’:
main.c:343: erreur: ‘TIFR’ undeclared (first use in this function)
main.c:363: erreur: ‘OCF2’ undeclared (first use in this function)
make: *** [main.o] Erreur 1
Ces erreurs sont en fait ciblées sur des registres qui ont été dédoublés dans l'ATmega88.
Dans le fichier main.c, j'ai donc remplacé les choses suivantes :
- TCCR0 devient TCCR0B.
- TCCR2 devient TCCR2A et TCCR2B, ce qui dédouble sa ligne comme ceci :
TCCR2A = (1<<WGM21);
TCCR2B = (1<<CS22)|(1<<CS21)|(1<<CS20);
- OCR2 devient OCR2A.
- TIFR devient TIFR2.
et donc TOV0 devient TOV2.
et aussi OCF2 devient OCF2B.
Maintenant la compilation se passe bien !
Sources et hex modifiés disponibles en annexes[2]
Programmation du µC :
- Avec le programmateur maison STK200 :
Le Programme :
sudo avrdude -p atmega88 -P /dev/parport0 -c stk200 -Uflash:w:/chemin vers le fichier/nes_snes_db9_usb-1.8_ATMEGA88.hex
Les Fusibles :
sudo avrdude -p atmega88 -P /dev/parport0 -c stk200 -U lfuse:w:0xdf:m -U hfuse:w:0xdd:m
Si besoin, pour effacer le µC
sudo avrdude -p atmega88 -P /dev/parport0 -c stk200 -e
- Avec le programmateur AVRISP mkII :
Le Programme :
avrdude -p m88 -P /dev/ttyUSB0 -c avrispmkII -Uflash:w:/chemin vers le fichier/nes_snes_db9_usb-1.8_ATMEGA88.hex -B 1.0
Les Fusibles :
avrdude -p m88 -P /dev/ttyUSB0 -c avrispmkII -U lfuse:w:0xdf:m -U hfuse:w:0xdd:m
Si besoin, pour effacer le µC
avrdude -p m88 -P /dev/ttyUSB0 -c avrispmkII -e
- Avec le programmateur USBASP :
Le Programme :
sudo avrdude -p atmega88 -P /dev/ttyUSB0 -c usbasp -Uflash:w:/chemin vers le fichier/nes_snes_db9_usb-1.8_ATMEGA88.hex -B 1.0
Les Fusibles :
sudo avrdude -p atmega88 -P /dev/ttyUSB0 -c usbasp -U lfuse:w:0xdf:m -U hfuse:w:0xdd:m -B 1.0
Si besoin, pour effacer le µC
sudo avrdude -p atmega88 -P /dev/ttyUSB0 -c usbasp -e

Les tests sur la maquette étant concluants, restait plus qu'à bidouiller un montage pour insérer le petit montage dans la manette.
Le montage :
Ici, pas question de réaliser une plaquette d'essais et encore moins de tirer une plaque d'epoxy pour construire le montage, ça ne rentrerait jamais dans le boitier de la manette, alors il faut tout souder sur place !
Tout de même, par soucis liés à des d'interventions futures pour de la maintenance ou une évolution du programme, j'ai préféré souder les composants sur un support tulipe dont j'ai coupé une partie des pattes.
J'ai aussi remplacé le Quartz et les deux condensateurs par un résonateur… Hop, deux composants en moins.
Ainsi l'ensemble sera suffisamment fin pour se loger dans de boitier.


Avant de monter tout ça dans le boitier, j'ai redonné un coup de jeune aux contacteurs des boutons en effritant et tamponnant le graphite d'une mine de crayon sur ceux-ci.
Remplacés les fils violet qui ont servit durant la phase de test, par des fils vert très fins, qui conviennent mieux dans notre cas.
Une fois le montage raccordé au circuit de la manette et au câble USB, je l'ai collé au fond du boitier avec de l'adhésif double-face.
Ensuite je l'ai recouvert d'adhésif papier pour l'isoler du reste…

Reste donc à mettre le câble USB en place, à refermer et visser le boitier !

Et voila !

1 De Niko -
Merci, grâce à ton site, je vais pouvoir sortir du placard ma mb miniITX pour faire de l'émulation !!! yeahh
2 De Toons -
Cool tu t'améliore ;)
Prochaine étape je te file mes prog a faire :p