dimanche 24 septembre 2017

Famicom Sharp Twin RGB et autres mods

Cet article est un petit résumé de ce que j'ai appris lors de ma recherche pour la meilleure console NES de Nintendo. Il est connu que Nintendo exerçait un contrôle exigeant sur les jeux publiés, l'entreprise ne voulait pas reproduire un effondrement du jeu vidéo comme avec Atari.  L'entreprise a adapté sa console pour le marché Européen et Américain techniquement et culturellement. La dernière partie montre comment tirer la meilleur qualité vidéo et exploiter les fonctionnalités de la Famicom Sharp Twin (mod RGB, Everdrive et FDS stick).

Le problème de la console française


Il faut garder à l'esprit que la majorité des jeux a été développée en NTSC, de cette majorité nous n'avons qu'un échantillon altéré en Europe en PAL. Plusieurs différences sont à prendre en compte.

La version PAL du système de Nintendo, qui pour s'adapter au 50 Hz des télévisions européennes a été sous cadencé et les jeux conçus pour le 60Hz du NTSC américain n'ont pas forcément été adapté. Le CPU sous cadencé gère le son, la plupart des jeux PAL ont un son et un défilement plus lent.

L'affichage en NTSC n'a pas de bords inutilisés, l'image est bien cadrée sur le téléviseur. Cela est une conséquence du format PAL supportant une image plus grande. Les développeurs ont simplement remplis de manière monochrome les bords comme on peut le voir sur l'image de Probotection dans cet article.

Exemples de sons

Contra (US)
Probotector (EU) l'image est un peu plus grande

Cependant pour des jeux tels que Super Mario Bros 3, Nintendo a adapter le timing le jeu se joue presque à la même vitesse entre PAL et NTSC.

Puce d'expansion audio


En Europe, comme en Amérique, la possibilité d'utiliser une puce intégrée à la cartouche pour générer un son plus complexe n'est pas relié et n'a jamais été exploitée (c'est pourtant l'histoire d'une piste et de quelques résistances de mixage supplémentaires). Ainsi seules les consoles japonaises le permettent.

Un exemple célèbre est celui de Castlevania 3, la qualité audio de la version japonaise est extraordinaire.

Castlevania 3 (US)

Akumajou Densetsu (JAP)


Il y a différents types d'expansion audio plus ou moins élaborés (le Famicom Disk System en intègre un également), En tout une centaine de jeux utilise une puce supplémentaire, autres que Castlevania 3, Super Mario Bros. 2, Zelda, Just Breed et Lagrange Point sont des jeux intéressants à essayer en version japonaise.

Faux RVB

Il a longtemps été pensé que la console NES française été supérieure aux autres modèles, la France a une console adaptée au Péritélivision et fourni un signal RVB, cependant ce signal est généré a partir du composite, donc en théorie le composite est de meilleur qualité.

La prise péritel NES fournie le signal RVB généré mais également le signal composite utilisé. Il n'est du coup pas nécessaire de modifier la NES pour avoir une sortie composite directe, on peut utiliser un câble différent ou dans d'autres cas la télévision nous donne le choix du signal. Ce "faux" signal RVB peux donner de meilleurs résultats sur certains écrans (en fonction de la qualité du décodeur composite du moniteur).

L'avantage du RVB est que l'image est séparé sur 4 signaux d'amplitude 1V : Rouge, Vert, Bleu, et Synchronisation. Ce signal est utilisable quasi-directement par les tubes cathodiques qui sont équipés d'une cathode pour chaque couleur.

Le signal composite (d'amplitude 1,073V) lui est l’agrégation de ces 4 signaux, on perd forcément en qualité.

Allure d'un signal composite

Les 3 couleurs sont traitées sur une plage plus petite (0,661V) ce qui nuit à la qualité et netteté du signal.

Composite versus RVB sur écran cathodique
Composite versus RVB avec le framemeister (convertisseur HDMI)
Notre exception française (utilisation extensive des péritels) nous à tout de même permis d'avoir les Super NES, N64 et Game Cube en RVB les hobbyistes américains nous envient.

Le catalogue des jeux

Le catalogue NTSC est plus complet : il comprend des jeux japonais et américains jamais publiés en Europe.
Lorsque des jeux ont été adaptés au marché européen, en plus des modifications techniques pour le standard PAL d'autres culturelles ont été faites.

Aux états-unis il y a censure de tout ce qui était érotique et religieuse.

Croix chrétienne remplacé
Les éléments féminins sont cachés/remplacés

En Europe c'est la violence qui a été censurée comme dans le cas de Contra, qui est devenu Probotector, où ce sont des machines qui peuvent s’entre-tuer.

Un cas intéressant est celui de Super Mario Bros 2 (qui est plus une extension du premier opus), il n'a jamais été produit pour la NES occidentale, le jeux n'a été accessible que lors de la sortie de Super Mario All Stars sur NES, sous le nom de Mario's Lost levels. Le Super Mario Bros 2 que l'on connaît est une adaptation de Doki Doki Panic.

Super Mario Bros 2 et Doki Doki Panic

Les expansions matérielles japonaises

Les consoles japonaises ont des ports d’extension permettant l'ajout de plusieurs accessoires.

Quelques exemples:
  • FDS: Le Famicom Disk System. Cette extension est composée d'un lecteur de disquettes dans un format propriétaire et d'un adaptateur mémoire vive sous forme de cartouche. Le jeu est extrait de la disquette et chargé en mémoire, . Ce système a été développé pour palier au problème du coût et des ruptures de stocks des mémoires mortes. Les disquettes sont réinscriptibles, elles peuvent contenir des sauvegardent, il y avait même des kiosques pour y écrire des nouveaux jeux à moindre coût.
  • Lunettes 3D
  • Clavier+enregistrement de sauvegardes sur cassettes
  • Autre information intéressante: un micro est présent sur la deuxième manette.

Famicom Sharp Twin

Alors pourquoi choisir la Famicom Twin ? C'est la seule console qui intègre le Famicom Disk System ce qui permet d'accéder à la totalité de la médiathèque NTSC. Le FDS n'est pas seulement une RAM qui permet de charger et jouer des jeux sur disques, sa puce 2c33 est également équipée d'une génération de son plus sophistiquée. À noter que la console n'a pas de puce de zonage.

Famicom Sharp Twin avec des boutons turbo


Hélas seulement une console NES grand public supporte nativement le RVB: le Sharp Famicom Titler dont le prix atteint des sommets (utilisé pour mettre des sous titres/dessins afin de créer des démos).

La solution est donc de modder sa console, il existe deux kits:
  • NES RGB de Tim : permet de générer un signal RVB presque parfait.
  • HDMI de Kevtris : officiellement non compatible avec la Twin, il doit y avoir possibilité d'utiliser un câble d'extension HDMI mais il faut modifier la coque. Ce "Pixel Perfect" kit est impressionnant, plein d'options et de réglages sont présents.

J'ai opté pour le mod NES RGB, celui-ci est le moins invasif et moins complexe à installer, on peut utiliser la sortie RF de la console et y brancher un câble type Neo Geo : le mod est invisible.

Le mod installé
Image de mauvaise qualité mais je vous jure ça claque

Si vous ne voulez pas vous encombrer du FDS il est possible d'utiliser l'Everdrive N8 de krikzz, cette cartouche permet de charger des jeux à partir d'une carte SD. Elle est celle supportant le plus de jeux. Elle peut même simuler les expansions audio. Cependant l'émulation du son n'est pas parfaite.

L'Everdrive supporte les fichier FDS, étant le format des ROM des disquettes Nintendo, cependant la encore le son n'est pas au rendez vous, et son développeur n'a pas prévu de régler le problème. Peut être un jour Kevtris développera son propre Everdrive/Powerpack (son émulation matérielle de la NES par FPGA est excellente).

Si la qualité sonore vous importe le mieux est d'utiliser l'adaptateur FDS RAM Nintendo originale, et vous pouvez vous procurer un FDS stick de (256 Mio ce qui est suffisant pour l'ensemble des ROMS ~180 Mio et des traductions). Il permet de remplacer le lecteur disquette, et il est possible de le brancher sur le port C (caché) de la Famicom Twin.


lundi 26 juin 2017

Créer son propre fichier de disposition clavier sous Linux

Comment créer son propre keymap

Quand on travaille dans un environnement international où les ordinateurs sont équipés de claviers qwerty, il nous faut souvent faire l'impasse sur les caractères spéciaux et par exemple utiliser un correcteur d'orthographe une fois le texte tapé.

Cependant, il existe une disposition clavier déjà intégré à Windows et Linux : le keymap US international. Cette disposition permet à partir du clavier qwerty le plus simple d'écrire les caractères spéciaux les plus utilisés. Elle est, par exemple, utilisée aux Pays-Bas où tous les claviers sont configurés en US-international même si la plupart des gens l'ignorent et apprennent les codes Windows tel que Alt+132=ä. Pourtant, le clavier international est assez intuitif et rapide.
Clavier US AltGr International

Clavier US International

C'est un hasard qui m'a amené à utiliser cette disposition : l'achat d'un thinkpad à clavier qwerty. J'ai lontemps chercher une configuration qwerty française (keymap "cf" sous linux) comme on le trouve au Canada, mais celui-ci a un agencement de touches différent pas forcement compatible avec un qwerty basique. Je me suis retrouvé à utiliser la configuration English (intl., with dead keys) (plus complète que la version US intl) sous X (et par extension wayland car les fichiers xkb sont compatibles).

Voici quelques exemples d'utilisation du clavier us-intl sous X :
Alt+e é
Alt+' puis e é
Alt+` puis e è
Alt+6 puis e ê
Alt+, ç
Alt+5 €
Alt+[ «
Alt+] »
Alt+z æ
Alt+6 puis 9 ⁹
J'ai toutefois eu un problème quand j'ai voulu utiliser le clavier dans une console Linux (en dehors de X). Je n'ai trouvé aucun keymap (/usr/share/kbd/keymap) us-intl.

Un keymap proche est us-acentos qui est une disposition qui a tenté de rajouter les lettres de l'encodage latin1 sur les claviers US. Cela n'a pas marché à cause de l'encodage ISO8859 (latin1) (latin9) qui a donné naissance a us-intl.iso15.map.gz et us-intl.iso1.map.gz. Cependant, j'ai pu le trouver : us-intl.iso15.kmap.gz mais il ne fonctionne pas de la même manière que sous X : il n'utilise pas Alt-Gr comme touche de modification, mais Ctrl+. ; pas pratique..

Il a donc fallu que je le fasse, vous trouverez deux versions à la fin de mes notes.

Un peu de théorie

Une touche de modification, modificatrice ou plus simplement un modificateur est une touche de clavier d'ordinateur qui permet de modifier le comportement d'une ou plusieurs autres touches auxiliaires lorsqu'elles sont enfoncées simultanément.

Plus spécifiquement, on a :

  • Les touches mortes (dead key) étant une touche qui n'affiche rien lorsqu'elle est activée. Utilisé avec une autre touche, elle modifie le symbole de cette autre touche (utilisé pour les accents par exemple).
  • Les touches de combinaison (Compose en anglais) permettant d'associer deux autres touches afin de créer un nouveau caractère (touche combinaison a+e donne æ).
  • Les touches métas ou méta-modificateurs permettant d'accéder a des fonctions, par exemple la touche windows ou alt (alt+tab, alt+F4, alt+4, windows).

Exemple de keymap

keymaps 0-2,4-6,8-9,12
keycode   1 = Escape           Escape         
    alt    keycode   1 = Meta_Escape
keycode   7 = six              circumflex
    altgr keycode  7 = dead_circumflex
keycode  15 = Tab              Tab            
    alt    keycode  15 = Meta_Tab       
    shift    keycode  15 = Meta_Tab
keycode  38 = l
    #control keycode 38 = Control_l #déjà définit ligne précédente
    altgr keycode  38 = +oslash
    shift altgr keycode  38 = +Oslash
keycode  45 = x
keycode  52 = period           greater          guillemotright
    control    keycode  52 = Compose 
À chaque touche de modification est attribué un poids suivant cette table.
 Shift               1
AltGr                2
Control              4
Alt                  8
ShiftL              16
ShiftR              32
CtrlL               64
CtrlR              128
CapsShift          256
CapsShift fonctionne par défaut comme shift - comme son nom l'indique, il verrouille simplement "Maj".

Pour chaque touche on peut donc définir 2⁸ = 256 combinaisons. Cependant nous n'avons pas à tous les préciser. On peut par exemple définir la gamme des combinaisons utilisée dans le fichier.
keymaps 0-2,4-5,8,12
Ici, seules les combinaisons plain, Shift, AltGr, Control, Control+Shift, Alt et Control+Alt sont définissables par des symboles. Le reste sera rempli par le symbole vide : la touche n'aura aucun effet.

Le comportement de chaque touche est définissable de plusieurs manières :

keycode keynumber = keysym keysym keysym...

Ou comme dans l'exemple
keycode 1 = Escape Escape 
Tout les keysyms sont arrangés comme prévu à la ligne keymaps. Ceux non définis sont automatiquement remplacé par VoidSymbol.

Un autre comportement intéressant est automatiquement complété lorsqu'on définit des touches de l'alphabet.
keycode  45 = x 
Est équivalent à ce comportement.
Plain                 x
Shift                   X
AltGr                 x
Shift+AltGr             X
Control                 Control_x
Shift+Control           Control_x
AltGr+Control           Control_x
Shift+AltGr+Control     Control_x
Alt                     Meta_x
Shift+Alt               Meta_X
AltGr+Alt               Meta_x
Shift+AltGr+Alt         Meta_X
Control+Alt             Meta_Control_x
Shift+Control+Alt       Meta_Control_x
AltGr+Control+Alt       Meta_Control_x
Shift+AltGr+Control+Alt Meta_Control_x
Chaque combinaison peut être écrasée en la redefinissant comme montré ici:
keycode  38 = l
    #control keycode 38 = Control_l #déjà définit ligne précédente
    altgr keycode  38 = +oslash
    shift altgr keycode  38 = +Oslash
Les symboles utilisables sont soit des lettres, soit des chiffres, des diacritiques, des chaînes de caractères, codes de contrôle (Ctrl+C... voir les contrôles codes standards ici https://en.wikipedia.org/wiki/C0_and_C1_control_codes), et d'autres symboles métas ou non. Ils peuvent être écrits directement, en décimal, octal, hexadécimal, unicode ou encore symboliquement (voir http://wiki.linuxquestions.org/wiki/List_of_keysyms).

Pour ajouter des glyphes aux lettres, on peut définir les diacritiques sur des touches mortes (ou touche de composition).
keycode 7 = six circumflex
      altgr keycode 7 = dead_circumflex
AltGr+6 a le même comportement que le ^ sur le clavier français. Il faut tout de même attribuer un comportement pour chaque combinaison.

compose '^' 'a' to acircumflex

Majuscule et Verrouillage :
keycode 44 = +z Z
Maj n'inverse pas le verrouillage.
keycode 44 = +z +Z
      altgr keycode 44 = ae
      shift altgr keycode 44 = AE
Le verrouillage n'a pas d'effet sur les combinaisons altgr + touche 44.
keycode 44 = +z +Z
      altgr keycode 44 = +ae
      shift altgr keycode 44 = +AE
Le verrouillage change la casse de altgr + touche 44.

À propos de ma version us-intl pour le tty

À télécharger ici :

https://github.com/z3bu/us-intl

Sur la version us-altgrintl-deadkeys AltGr est un modificateur, il permet d'acceder aux niveaux 3 et 4 qui touches soient des caractères spéciaux, soient des touches mortes.

Sur la version us-intl-deadkeys les touches mortes sont actives par défaut (donc au niveau 1 et 2), les versions "vivantes" des symboles sont aux niveaux 3 et 4 (touche AltGr enfoncée).

Le verrouillage n'a d'effet que sur les lettres.
Certaines touches mortes ne sont pas implémentées (Alt Maj / et alt Maj -)

Rajouté le symbole ± sur la touche -

Rajouté la possibilité de rentrer des caractères avec leur unicode avec AltGr et le clavier numérique (4 chiffres hexadécimaux).

Je conseille pour configuration /etc/vconsole.conf
KEYMAP=us-altgrintl-deadkeys
FONT="unifont"
UNICODE=1
GNU unifont peut être téléchargé ici : http://unifoundry.com/unifont.html

Apprenez à mieux utiliser le terminal sous Linux ici :
http://wiki.linuxquestions.org/wiki/Control_keys

Il manque encore : la cédille morte, le point (supérieur et inférieur) mort. Quelques caractères complexes.

Conclusion

Le résultat est limité par le terminal offert par le kernel. GNU unifont est conseillé - il a un meilleur support pour l'unicode.

Plus qu'a essayer kmscon et fb (ou encore wayland avec le bon compositeur) - dommage que le développement soit arrêté - de telles solutions gèrent directement les dispositions claviers xkb et support entièrement unicode.

jeudi 4 mai 2017

Configuration d'un thinkpad sous linux

Quelques notes d'instalation pour un thinpad t450s - elles doivent être valable pour d'autres modèles.

Mise à jour du microcode Intel

Intel-ucode permet de mettre à jour le microcode des processeurs intel afin de corriger des potentiels bugs et problèmes de sécurité. De telles mises à jour sont possible via le bios cependant mais peuvent être automatiques via le kernel.

Pour cela installez intel-ucode et regénérez le fichier de configuration de votre bootloader.
grub-mkconfig -o /boot/grub/grub.cfg

Gestion de l'énergie

Paquets de base: acpi_call.
Si vous utilisez un thinkpad récent qui a un processeur Ivybridge (les modèles *30, 840, *50, 60*) installez tpacpi-bat sinon utilisez tp_smapi

Afin d'avoir une durée de batterie optimale il est judicieux de combiner TLP et powertop.

Powertop

Aprés installation il faut effectuer une suite de test pour permettre à powertop de mieux estimer la consomation du thinkpad.
powertop --calibrate
Il faut créer le fichier service pour systemd. Dans /etc/systemd/system/powertop Copiez/Collez la configuration :
[Unit]
Description=Powertop tunings

[Service]
Type=idle
ExecStart=/usr/bin/powertop --auto-tune

[Install]
WantedBy=multi-user.target

Sauvegardez et activez le service :
sudo systemctl enable --now powertop
Vérifiez que tout les paramètres "tunables" lorsque vous lancez powertop son sur "good".

TLP

TLP a presque les mêmes fonctions que powertop il faut donc se débarasser de la majorité des fonctionalitées de TLP

Le fichier /etc/default/tlp:
# ------------------------------------------------------------------------------
# tlp - Parameters for power save

# Hint: some features are disabled by default, remove the leading # to enable
# them.

# Set to 0 to disable, 1 to enable TLP.
TLP_ENABLE=1

# Dirty page values (timeouts in secs).
MAX_LOST_WORK_SECS_ON_BAT=15

# Battery charge thresholds (ThinkPad only, tp-smapi or acpi-call kernel module
# required). Charging starts when the remaining capacity falls below the
# START_CHARGE_TRESH value and stops when exceeding the STOP_CHARGE_TRESH value.
# Main / Internal battery (values in %)
START_CHARGE_THRESH_BAT0=75
STOP_CHARGE_THRESH_BAT0=90
# Ultrabay / Slice / Replaceable battery (values in %)
START_CHARGE_THRESH_BAT1=75
STOP_CHARGE_THRESH_BAT1=90
Si votre ordinateur est la plupart du temps branché, afin d'augmenter le nombre de cycle recharge/décharge de votre batterie (et donc augmenter leur vie) paramétrez les seuils de charge
START_CHARGE_THRESH_BAT0=50 STOP_CHARGE_THRESH_BAT0=60 START_CHARGE_THRESH_BAT1=50 STOP_CHARGE_THRESH_BAT1=60 Plus qu'à activer le service tlp
sudo systemctl enable --now tlp.service  
sudo systemctl enable --now tlp-sleep.service

SSD : FStrim

Soyez sur d'installer le paquet linux-util. FStrim n'a pas d'effets significatif sur les performances des disques SSD. Il a un effet sur le long terme en supprimant les blocs non utilisés sur le disque.

Vérifier que le disque support le triming
hdparm -I /dev/sda | grep TRIM
Activer le trimmer.
systemctl enable fstrim.timer

Lecteur d'empreintes

Installez fprintd et libfprint
fprintd-enroll

GDM gère automatiquement le lecteur d'empreinte.

jeudi 14 juillet 2016

Mod sans interrupteur pour la console Sega Saturn

Cette article présente en premier le principe du choix de zone puis le fonctionnement du mod sans interrupteur.

NB: l'encodage sécurité de la console à récemment était craqué, il va bientôt être possible de charger des jeux par USB/ clef USB en rajoutant simplement une carte sur le port extension d'origine de la console !

Zonage 

Le zonage de chaque console est défini par le PCB par le biais de 4 broches.

JP6/JP7
JP8/JP9
JP10/JP11
JP12/JP13
bit0
bit1
bit2
bit3
 315-5744, broche 5
 
315-5
744, broche 6
 
315-5
744, broche 7
 
315-5
744, broche 8
 
L'état de chaque broche (+5V/0V) défini le code pays comme affiché sur ce tableau:

bit3
JP12/JP13
bit2
JP10/JP11
bit1
JP8/JP9
bit0
JP6/JP7
Zone Valeur
Hexa
0 0 0 0 non utilisé 0
0 0 0 1 Japon 1
0 0 1 0 Taiwan, Philipines 2
0 0 1 1 inconnu 3
0 1 0 0 USA, Canada 4
0 1 0 1 Brésil 5
0 1 1 0 inconnu 6
0 1 1 1 inconnu 7
1 0 0 0 inconnu 8
1 0 0 1 inconnu 9
1 0 1 0 inconnu A
1 0 1 1 inconnu B
1 1 0 0 Europe C
1 1 0 1 inconnu D
1 1 1 0 inconnu E
1 1 1 1 inconnu F

Ici JP8/9 ne nous intéressent pas à moins que vous n'ayez des jeux/ou une console provenant de Taïwan/ des Philippines.

Pour le format de vidéo NTSC (60 Hz) ou PAL (50 Hz) c'est sur une autre broche qu'il faut agir (état bas pour le PAL) :

PALJP1/JP2f315-5690, broche 79

Il nous faut donc changer l'état à chaque broche par le biais des jumpers.

Mod sans interrupteur

J'ai modifié le "saturnswitchless" mod pour travailler avec un compileur plus récent (XC8) que le projet original par Sebastian Kienzl. J'ai également choisi un PIC qui me revenait moins cher sur ebay, le PIC16f628a, me disant qu'il ne serait pas difficile d'adapter le code.

Le code se trouve ici avec le fichier .hex à charger sur le PIC (avec le pickit).

Une fois installé, il fonctionne ainsi : en fonction de l'appui sur le bouton reset on a :

  • pour un appui court - Reset classique de la console
  • pour un appui mi-long - changement 50/60 Hz (clignotement de la DEL de mise sous tension plus rapide et plus long une fois en en 60 Hz)
  • pour un appui long - Changement de la zone : Europe/Japon/USA. Un appui maintenu fera défiler les différentes zones en boucle.
Le voyant de mise sous tension est remplacé par une diode bicolore ce qui donne directement un code couleur pour la zone sélectionée.

Dès que vous changer les paramètres, ceux-ci sont sauvegradé dans l'EEPROM du PIC.

Guide d'installation

Voici un petit guide pour la console saturn modèle 1, plus précisèment le PCB version 837-11892-01:PAL, pour les autres modèles vous pouvez vous baser sur cet article qui vous permetra d'identifier le routage de chaque jumper.

J'ai défini le brochage du PIC16f628a ainsi :

RB0 (entrèe) utilisé comme une interruption externe, relié RESET BUTTON
RB1 (sortie) mode vidéo PAL si 0 NTSC si 1 (JP1)
RB2 (sortie) le reset de la console
RB4 (sortie) DEL verte
RB5 (sortie) DEL rouge
RA0 (sortie) JP6 (bit 0 du zonage)
RA1 (sortie) JP10 (bit 2 du zonage)
RA2 (sortie) JP12 (bit 3 du zonage)

Chaque broche de zone/mode vidéo des puces de la console peut être reliée à la masse ou au +5V pour être activé.  J'ai reproduit ici le routage des jumpers du modèle que j'ai.


mode vidéo


bit 0


bits 2 et 3

Voici donc ce qu'il faut faire en photo : chaque point rouge est l'endroit où connecter une broche du PIC.

Carte mère coté verso :

Enlever R29 et relier RB1
Une piste à couper (JP7), RA0 à relier
Carte mère coté recto :

RA1 et RA2 à relier au PIC (chacun ont deux points où il peuvent être souder), deux pistes à couper (JP10 et JP12)

Carte fille :
Carte fille, une piste à couper, deux points à souder RB0 et RB2

Il y faut également mettre la diode bicolore à anode commune, dont les deux cathodes sont reliées à RA4 et RA5 en série avec des resistances de 200 ohms.

Il ne faut pas oublier de mettre un condensateur céramique de 100 nF au plus proche du +5V et la masse du PIC.

Profitez des jeux japonais à bas prix !
Fréquence :

dimanche 27 mars 2016

Utilisation du STM32 VL/L discovery sous Linux

C'est possible et on peut se faciliter la vie avec un bon makefile. Auparavant ils vous faut installer l'ensemble des outils : le compilateur et l'outil de flashage/déboggage.

Cross compiler pour ARM

Installation du compilateur gcc-arm-none-eabi

Il devrait être fourni par la majorité des distributions :

#Debian/Ubuntu
sudo apt-get install gcc-arm-none-eabi
#Archlinux
yaourt gcc-arm-none-eabi

Sinon vous trouverez ici les sources et binaires.

https://github.com/esden/summon-arm-toolchain

Le tarball :

https://launchpad.net/gcc-arm-embedded/+download

Example de compilation

Compilation d'un fichier main.c

/usr/bin/arm-none-eabi-gcc -O1 -c -mcpu=cortex-m3 -mthumb \
-msoft-float -gdwarf-2 -mno-sched-prolog -fno-hosted -mtune=cortex-m3 -march=armv7-m -mfix-cortex-m3-ldrd \
-DSTM32F10X_MD_VL -DUSE_STDPERIPH_DRIVER -I"/home/toto/ROM_READER/cmsis" -I"/home/toto/ROM_READER/device"\
-I"/home/toto/ROM_READER/inc" -I"/home/toto/ROM_READER/stm32lib/inc" /home/toto/ROM_READER/src/main.c

Édition des liens (connection des fichiers compilés)

/usr/bin/arm-none-eabi-gcc -o Demo.elf -O1  -g -Wall \
-Werror  -fno-exceptions -ffunction-sections -fdata-sections -nostartfiles -Wl,--gc-sections,\
-T/home/toto/ROM_READER/device/linker/STM32F100RB_FLASH.ld  core_cm3.o system_stm32f10x.o \
stm32f10x_gpio.o stm32f10x_rcc.o main.o startup_stm32f10x_md_vl.o 

Convertion du binaire au format elf en binaire exécutable par le systême.

/usr/bin/arm-none-eabi-objcopy -O binary Demo.elf Demo.bin

Liste de la taille des sections et la taille totale.

/usr/bin/arm-none-eabi-size -B Demo.hex

Flasher le STM-32

Installation de st-link

Si vous n'avez pas de "flasheur" JTAG comme le bus pirate, les kit de développment ont une puce (un autre stm32) qui convertie la liaison série en JTAG. Cela parmet de programmer directement votre STM32 par USB.

Pour communiquer avec cette puce vous avez besoin de st-link (https://github.com/texane/stlink). St-link foruni une bibliothèque de communication (libstlink), un serveur de déboggage GDB (st-util), et un outil de flashage (st-flash). Les dépendances requises sont libusb, pkg-config et autotools.

git clone stlink
cd stlink
./autogen.sh
./configure
make

Exemple pour charger un fichier

Il vous faudra utiliser l'option v1 pour votre vl discovery et v2 pour votre l discovery (v2 l'est par défaut). Stlink vous permet de lire et d'écrire la rom flash du stm32.

# Lecture de 4096 addresses d'un VL et transfert dans out.bin
./st-flash read v1 out.bin 0x8000000 4096
# De même avec un v2
./st-flash read out.bin 0x8000000 4096
# Écriture du binaire in.bin dans la rom
./st-flash write v1 in.bin 0x8000000 

Pour lancer le programme, n'oubliez pas de resetter votre stm32 après le chargement du binaire.

Si vous n'aimez pas la ligne de commande, reportez vous sur l'interface graphique stlink-gui:



Un makefile

Pour vous faciliter la vie voici un Makefile et les sources fournies par STM pour le VL-Discovery (https://github.com/z3bu/STM32VL-Discovery).

git clone https://github.com/z3bu/STM32VL-Discovery
cd STM32VL-Discovery
#Compilation de la démo
make
#Écriture de la flash
make load

Les bibliothèques fournies par STM sont dans le dossier stm32lib. Les fichiers core sont dans cmsis, l'éditeure de lien, le fichier assembleur de startup, et d'autres définitions pour le STM32 sont dans le dossier device.

Décommentez ou ajoutez dans le Makefile et inc/stm32f10x_conf.h lorsque vous voulez utiliser de nouvelles bibliothèques dans votre programme.

samedi 26 mars 2016

Utiliser votre vieux modem club internet comme routeur/point d'accés et plus si affinité.

Si vous avez un modem AH4222 à l'interface SFR inexploitable (il ne permet pas de changer son adresse ip et d'autres paramètres), voici comment rétablir sont firmware d'origine, voir le modifier.

Le routeur à par défaut l'adresse IP 192.168.1.1. Cadencé à 256 MHz, 16 MB de ram, il a une petite ROM de 4 Mio Il a heureusement un utilitaire CFE (Common Firmware Environment) qui permet de flasher le bcm6348.

Méthode simple

Si vous voulez simplement remettre le firmware d'origine, la méthode la plus simple est de télécharger le firmware que j'ai pu recompilé ici (la méthode de recompilation se trouve après). Le CFE est accessible par liaison série et également par l'interface web après avoir maintenu le bouton reset pendant 30 secondes. accédez par la suite à l'interface sur l'adresse de la box.

Méthode avancée

Vous povez utiliser la liaison série. Les paramètres de liaison sont 115200bps, 8 bits, pas de parité, 1 bit de stop. Les niveaux sont à 3.3V.

Donc si vous voulez vous amuser: achetez un convertisseur USB-Série.

Le brochage est, en numérotant les broches du haut vers le bas :
  1. Vcc (3.3V)
  2. Rx
  3. Tx
  4. GND
Pour connecter un terminal depuis linux a votre box:
#Avec putty
putty -serial /dev/ttyUSB0 -sercfg 11520
#Avec screen
screen /dev/ttyUSB0 115200

Si vous utilisez le port série de votre PC, remplacez ttyUSB0 par ttyS0.

Vous devriez être en mesure de voir les logs de boot de la box. Au début du boot un compteur vous laissera le temps d'accéder au CFE, c'est ce qui nous intéressera pour flasher le modem.
CFE version 1.0.37-0.7 for BCM96348 (32bit,SP,BE)
Build Date: Thu Mar  2 16:45:45 CST 2006 (root@hp)
Copyright (C) 2000,2001,2002,2003 Broadcom Corporation.

Initializing Arena.
Initializing Devices.
Flash device ID:22f6
AMD FLASH FAMILY
Auto-negotiation timed-out
10 MB Half-Duplex (assumed)
CPU type 0x29107: 256MHz, Bus: 128MHz, Ref: 32MHz

Total memory used by CFE:  0x80401000 - 0x805232F0 (1188592)
Initialized Data:          0x8041B390 - 0x8041CC60 (6352)
BSS Area:                  0x8041CC60 - 0x804212F0 (18064)
Local Heap:                0x804212F0 - 0x805212F0 (1048576)
Stack Area:                0x805212F0 - 0x805232F0 (8192)
Text (code) segment:       0x80401000 - 0x8041B388 (107400)
Boot area (physical):      0x00524000 - 0x00564000
Relocation Factor:         I:00000000 - D:00000000

Board IP address                : 192.168.1.1:ffffff00  
Host IP address                 : 192.168.1.100  
Gateway IP address              :   
Run from flash/host (f/h)       : f  
Default host run file name      : vmlinux  
Default host flash file name    : bcm963xx_fs_kernel  
Boot delay (0-9 seconds)        : 1  
Board Id Name                   : 96348GW  
Psi size in KB                  : 24
Number of MAC Addresses (1-32)  : 12  
Base MAC Address                : 00:16:38:de:de:de  
Ethernet PHY Type               : Internal
Memory size in MB               : 16

*** Press any key to stop auto run (1 seconds) ***
Auto run second count down: 

Voici les logs du CFE, vous pouvez y accédez si vous appuyez sur une touche (par votre terminal série) dans le temps qui vous est imparti.

Par la suite il est possible de changer le "boot delay" et l'addresse IP utilisé par le CFE.

Compilation du firmware

Avant d'essayer de tout recompiler j'ai tenté de récupérer le firmware image d'origine sur une box qui n'avait pas subi de mise à jour lors du passage à SFR.
cat /dev/mtdblock > /dev/ttySO

Du coté de mon linux j'ai utilisé dd pour récupérer l'image. Cependant cette méthode ne semble pas marcher.

Installation de la toolchain (debian 8)

Téléchargez au choix les .rpm ou .deb ici et installez les.

dpkg -i *.ded

Le tout est installé dans /opt/toolchain.

Maintenant vous pouvez récupérer les sources publiées par Club Internet (v44) dans le même répertoire (vous aurez des problèmes avec cmplzma et mksquashfs qui nécessitent libfstc++.so.5, les sources en elles mêmes nécessitent des modifications)

Sinon vous pouvez clonez le git https://github.com/z3bu/AH4222/ auquel j'ai apporté des modifications sur les binaires permettant la compression de l'image finale (cmplzma et squashfs version 2.0 compilés pour Debian 8), mais également quelquse mini patch sur le code source. Pour cmplzma j'ai utilisé le paquet officiel (sinon prenez le ici), pour squashfs j'ai du retrouver la bonne version et la recompiler. Quelqu'un a fais un dépot avec pleins d'utilitaires de ce genre : https://github.com/z3bu/firmware-mod-kit.

Placez vous dans le dossier des sources et compilez le tout ainsi :

make PROFILE=96348GWV

Désormais pour le transférer, référez vous à l'interface web du CFE. Si vous voulez le faire par le port série il vous faut :

Installer tftp-hpa, modifier/identifier le répertoire du serveur (par défaut /srv/tftp) dans le fichier /etc/conf.d/tftpd.

Copiez-y le firmware qui se situe dans

Lancer le service

systemctl start tftpd 

Maintenant il est temps de revenir au CFE par le port série, à l'aide d'un terminal entrez :

flashimage 192.168.1.41:bcm96348GWV_fs_kernel_AH4222...

J'ai eu quelques problème de conflit d'adresse ip lors du flashage, il est possible de changer l'addresse ip du routeur à l'aide du CFE, mais il faudra redémarrer la box par la suite. Ce problème de conflit rendait le chargement de l'image par tftp impossible.

Une fois flashé vous pouvez vous connecter à l'aide de telnet sur la box ! Les identifiants par défaut sont :

id: root
mdp : clubadmin

Par contre j'aurais aimé retrouver retrouver le brochage du port JTAG, si quelqu'un a des sources.

lundi 29 février 2016

Playing around with the Chipkit Max32


Here is a little review of the chipkit Max 32 and how to use it under linux.

During a project I had to adapt a sainsmart screen to the 3.3V Max 32.
Here is how I modified the board and the UTFT library to use the SD card and the screen.

Be careful my english is awful in this document.