Dans les années ‘90 j’ai acheté un IBM PC-XT à un camarade de BTS. 200 Francs pour une machine plutôt en bon état avec son écran monochrome et son clavier 102 touches d’origine. Je ne savais pas trop quoi en faire et je l’allumais une fois tous les 10 ans en me disant qu’il allait bien me servir à quelque-chose un jour.

Bon le PC est toujours soigneusement stocké sur une étagère, mais le clavier… il me sert à ce moment même à écrire ce texte.

J’ai toujours eu des claviers un peu bas de gamme, des achats bon marchés et de la récupération (vous vous souvenez de l’horrible frappe clavier de l’Atari 520ST ? Pour moi le pire c’était le bout de caoutchouc livré avec l’EXL 100 !). J’avais bien lorgné sur le Das Keyboard lorsqu’il était sorti mais ce n’était pas allé plus loin. Mais récemment je me suis dit qu’investir dans un bon clavier serait probablement source de satisfation (supplémentaire) dans l’usage de mes ordinateurs. Et en traînant sur les forums et les sites spécialisés je me suis bien rendu compte que le IBM Model M avait toujours une bonne cote. Ça tombe bien j’en ai un !

Quand j’ai récupéré le clavier depuis son stockage je me suis aperçu qu’il grelottait un peu, et comme j’ai eu la flemme de sortir le PC-XT en entier je ne savais pas si il fonctionnait vraiment. En fait il avait juste la maladie de ce modèle: la plaque de plastique incurvée était fendue à plusieurs endroit et les espèces de pseudo-rivets cassés se baladaient dans le boitier d’où le bruit. Démontage, nettoyage, et bolt-moddage en suivant cette vidéo: Model M Bolt Mod Tutorial.

Détail sur le bolt-mod de mon IBM Model M

Détail sur le bolt-mod de mon IBM Model M

Il y a deux façons de brancher un vieux clavier sur un système moderne: utiliser un convertisseur (généralement faisant tourner le firmware Soarer) ou remplacer la carte interne du clavier et j’ai choisi la deuxième solution. Mais là encore il y a le choix. J’ai choisi de partir du projet sje-mse/yacobo parce qu’il utilise un micro-contrôleur vraiment très bon marché (on est en 2021-2022 tmtc), et que la carte électronique est réduite au minimum, je me suis dit que je pouvais me passer de PCB et utiliser une breadboard générique. Au final je me suis fendu d’une commande chez JLCPCB parce que je n’avais jamais essayé la fabrication de PCB à la demande, et franchement ça vaut le coup, c’est très agréable d’avoir un circuit fait sur mesure, je l’ai néanmoins un peu souillé avec mes brasures moches. Mon clavier n’a pas de voyants indiquant l’état des touches de verouillage donc je n’ai pas pris la peine de souder le connecteur correspondant.

Par chance le micro-contrôleur STM32F103C8T6 que j’ai commandé pour ~ 3€ n’avait pas les problèmes potentiels mentionnés par l’auteur du projet (difficulté à installer un bootloader USB et résistances non adaptées) donc le flashage du firmware QMK a été très facile.

J’ai quand même eu un problème étrange, tout fonctionnait bien sauf quelques touches qui avaient un comportement erratique, par exemple la flèche vers le haut et le point du pavé numérique. Bizarrement tout fonctionnait correctement lorsque je tenais la carte contrôleur à pleine main alors j’ai pensé à un problème électrique et j’ai fait une liaison entre le 3.3V de la carte et le chassis du clavier (le fil noir spiralé), et plus de problème depuis !

Carte YaCoBo pour IBM Model M avec STM32F103C8T6

Carte YaCoBo pour IBM Model M avec STM32F103C8T6

Ce projet m’a permis de mettre le nez dans QMK qui est assez facile d’accès, et j’ai personnalisé quelques trucs:

  • les deux touches Ctrl appuyées isolément servent à régler le volume audio (MT(MOD_LCTL,KC_AUDIO_VOL_DOWN) & MT(MOD_RCTL,KC_AUDIO_VOL_UP)), et shiftées elles permettent de régler la luminosité de mon écran mais c’est réglé au niveau de KDE,
  • Verr num que je n’utilise pas sert à passer au layer Quantum (bootloader, reset, etc.) et a appeler la calculatrice (LT(1, KC_CALC)),
  • Double-tap sur shift gauche simule la touche Windows/Command ([TD_LSFT_LGUI] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT,KC_LGUI)),
  • Double-tap sur shift droite simule la touche Menu ([TD_RSFT_APP] = ACTION_TAP_DANCE_DOUBLE(KC_RSFT,KC_APP),),
  • Pause sert à mettre en pause la lecture multimédia (KC_MEDIA_PLAY_PAUSE),
  • AltGr + les touches de fonction F1 à F12 deviennent F13 à F24 (const key_override_t f13_key_override = ko_make_basic(MOD_BIT(KC_RALT), KC_F1, KC_F13), etc.),
  • j’ai ajouté un bout de code pour que le verrouillage numérique soit forcé, parce que sans voyant je ne peux pas savoir visuellement si le keypad est en mode numérique ou navigation (et comme la touche Verr num a été redéfinie, le problème est définitivement réglé: jamais de navigation).

Je n’ai pas trouvé le moyen de remplacer CapsLock par Compose mais comme pour la luminosité c’est fait au niveau de X/Wayland/KDE.