Émission Underscore #192 du 28 juin 2020

Actu

Le backend 68K pour LLVM enfin terminé !

Il reste encore à l’intégrer aux sources officielles. Ça veut dire qu’on va peut-être enfin avoir autre chose que GCC pour compiler vers nos antiquités. Les patches pour GCC sont très compliqué à maintenir, LLVM lui est très modulaire, et on peut ajouter plus facilement des frontends pour d’autres langages, pourquoi pas GFA BASIC ?

Les résultats de l’enquête des utilisateurs de cURL sont publiés

À la question des plateformes utilisées, en plus de la quinzaine choix proposés le champ “autre” a reçu de nombreuses réponses, dont « Illumnos, Haiku, FreeDOS, Junos, WSL, OpenStep, OpenIndiana, IBM i, VenusOS, MorphOS. Genode, game consoles, Nintendo Switch, AmigaOS, SCO OpenServer. »

L’ARCEP publie son rapport sur l’état d’Internet en France

L’occasion pour eux de discuter avec Benjamin Bayart pour tirer les leçons de la crise sanitaire.

FAILs du mois

Chiptune: DMA – Alternative power

Sujet : Coder pour nos antiquités

On avait déjà parlé de rétro-computing dans notre numéro 126, et avec cette news sur LLVM, je me disais que certains pourraient vouloir se mettre à la programmation rétro cet été pour s’occuper…

Par exemple, vous utilisez une application sympa et vous voudriez coder un équivalent pour Atari ou Amiga, ou bien en porter une suffisamment légère, alors pourquoi pas maintenir une application qui n’a pas été corrigée depuis un moment ?
Ou pourquoi pas un pilote pour un nouveau matériel ?

Quel langage ?

Le choix dépendra surtout des plateformes que vous souhaitez supporter. En effet, si vous n’êtes intéressés que par l’Atari, le GFA BASIC ça peut marcher, par contre sur RISC-OS…
La plupart des plateformes ont un ou plusieurs BASIC disponibles, malheureusement il s’agit souvent de dialectes pas forcément compatibles entre eux, donc développer une application portable en BASIC est loin d’être gagné.
Il existe des pré-processeurs pour BASIC cependant, qui pourraient permettre de convertir à la volée vers différents BASIC.

Pareil pour la majorité des langages interprétés, il faut que l’interpréteur soit disponible pour l’OS cible, et le résultat peut être très lent de toute façon.
Donc vous pouvez oublier NodeJS hein.

Des langages comme le C, voire C++ (et encore ce n’est pas toujours activé par défaut si vous téléchargez un compilateur tout prêt), sont les plus largement disponibles, mais si vous débutez il va faloir apprendre un peu avant de se jeter à l’eau.

Il y a bien sûr l’assembleur, moins portable mais plus proche de la machine, mais là il faut vraiment savoir ce qu’on fait, donc pour débuter c’est pas l’idéal. Et ça reste moins portable.

Si vous cherchez l’exotisme, pourquoi pas le Forth ? Il existe une version pour ORIC, et même pour les machines basées sur un 68000.

Con con compilateur ?

On peut parler même de chaîne de compilation (en anglais on dirait toolchain).

En effet, il y a plusieurs étapes avant d’arriver au programme utilisable, et chaque étape nécessite un outil spécifique. En général ces outils sont regroupées dans une “chaîne de compilation” et plus ou moins intégrés, c’est à dire qu’on doit les utiliser ensemble, même si dans beaucoup de cas on peut mixer les outils (et dans certains cas limites on est même obligés pour contourner des bugs).

En gros le pré-processeur remplace toutes les macros par leur #define, puis le compilateur produit un code assembleur, qui est ensuite assemblé donc convertit en binaire, lui-même lié avec les bibliothèques système pour produire l’exécutable final.

Si votre appli est très simple, et qu’un compilateur est disponible directement pour la machine cible (celle qui utilisera le résultat, par exemple un Atari), vous pouvez tenter de compiler dessus, mais ça peut prendre du temps, ou échouer si vous n’avez pas assez de mémoire.

Dans la plupart des cas on va plutôt choisir la compilation croisée ou cross-compilation, qui utilise une machine plus puissance (un PC sous GNU/Linux par exemple), qu’on appelle machine hôte, pour faire tourner le compilateur qui lui va générer un binaire non pas pour la machine hôte, mais pour la machine “cible”, l’Atari par exemple.
On bénéficie ainsi de toute la mémoire et la puissance de calcul du 21ème siècle pour produire des programmes plus optimisés pour nos ordinosaures.

GCC, binutils…

Le problème avec GCC (et binutils) c’est que c’est complexe à porter, ou pour ajouter une plateforme, et souvent les patches ne sont pas maintenus après une version qui casse tout ce sur quoi le patch se basait. Et parfois quand on tente d’upstreamer (envoyer en amont) les modifications, ben elles sont refusées… Donc on se retrouve avec des forks pas maintenus, et un projet qui ne sait pas qu’une architecture est encore utilisée car ils ne voient pas de patches arriver puisque les gens n’osent pas les envoyer.

Malgré tout ça reste la chaîne la plus utilisée.

Pour Atari il y a le portage de GCC maintenu par Vincent Rivière.
http://vincent.riviere.free.fr/soft/m68k-atari-mint/
De plus il faut aussi des outils spécifiques, souvent pour convertir les programmes générés vers le format binaire officiel un peu bizarre…
Une chaîne pour OSX PPC existe bien que ce ne soit pas encore très rétro, et même pour Mac 68k !

Le projet NetSurf maintient un ensemble de patches pour cross-compiler le navigateur, qui peut vous servir aussi, basé sur certains travaux qu’on a déjà mentionné.

VASM et VBCC

Ces outils malgré quelques bugs supporte de nombreuses plateformes anciennes. Malheureusement ils ne sont pas libres, et même si le code source est publié c’est sous forme d’archives numérotées ce qui rend la contribution plus difficile.

LLVM

Comme on l’a dit, le support 68k arrive dans LLVM, qui lui-même est écrit en C++ et très modulaire.
L’avantage c’est qu’on peut le combiner plus facilement avec d’autres outils.
Par contre il est possible qu’il nécessite un peu plus de ressources pour fonctionner, donc pas sûr qu’une version native existe un jour pour Atari ou Amiga…

Il existe d’autres compilateurs plus spécifiques, comme CC65, et même des kits pour un ordi seulement, comme l’OSDK pour ORIC.

Les plateformes

Suivant l’OS et la machine que vous ciblez, vous aurez plus ou moins d’appels natifs à utiliser.
Pour l’interface graphique malheureusement il faudra probablement coder ça nativement.
Il existe bien quelques toolkits graphiques portables et légers, mais pas forcément assez pour nos plateformes.
IUP serait un candidat, mais je ne crois pas qu’il ait déjà été porté sur GEM ou AmigaOS.

Pour l’Amiga, un guide en français par l’équipe guru-meditation est disponible, qui date de 2003 mais devrait rester valable en grande partie.

Versionnez, licenciez et publiez !!!

Ça ne sert pas à grand chose de faire un truc dans son coin si on ne le partage pas…

Pensez donc à versionner votre code, même du GFA ça peut se versionner avec git (et gfalist pour avoir des diffs propres)

Choisissez une licence, si possible libre, pour permettre à d’autres de vous aider. Vous vous sentirez moins seul, et moins coupable si vous n’avez plus le temps de vous en occuper : d’autres pourront prendre le relais.

Et publiez, même si c’est un zip, mais avec github maintenant c’est assez facile.

Besoin d’idées ?

Si vous manquez d’idées, je peux vous sortir ma liste perso, j’aurais sûrement pas le temps de tout faire donc dites moi si vous voulez vous charger d’un truc hein…

  • des démos bien sûr !!!
  • des outils pour coder directement sur la cible
    • QEmacs : un éditeur façon Emacs mais en C très léger. J’ai déjà ajouté le support du codeset Atari…
    • libgit2 et simplegit pour versionner son code proprement
  • des applications utiles
    • NetSurf s’il n’est pas encore disponible sur votre plateforme (j’ai eu vent d’un portage vers IRIX)
    • un client IRC. Rhapsody peut être suffisamment simple.
    • TestDisk et PhotoRec : le support des formats de partition et de systèmes de fichiers pourrait vous aider un jour à retrouver des données sur un disque qui déconne…
    • une loupe pour l’accessibilité, parce que nos yeux vieillissent autant que nos machines,
    • pour le confort : un équivalent de redshift pour passer le bureau dans le rouge la nuit
    • des clients de synchronisation pour les services de “clouds” privés. Même si le client officiel owncloud/nextcloud est trop lourd (en Qt), peut-être qu’une version plus légère est possible. Ou alors pour d’autres services comme SyncThing ? Un portage de rsync minimal pourrait parfois suffire.
  • des applis amusantes
    • pour commencer pourquoi pas ttyclock ? (déjà porté sur Atari)
    • Un outil pour télécharger un nouveau papier peint par jour depuis un site (comme XKCD, CommitStrip ou les images de la NASA),
    • Un tracker comme OCP
    • GrafX2 (j’ai fait le portage Atari au retour d’une VIP dans la voiture (non c’était pas moi qui conduisait))
    • des jeux ?
  • porter des bibliothèques utiles à d’autres logiciels
    • le support SSL nécessite des bibliothèques à jour, sinon les cyphers ne sont plus reconnus…
    • des toolkits comme IUP
    • SDL : si la version 1.2 supportait de nombreux OS, la version 2.0 par contre reste limitée aux OS des PC, mais en théorie ça reste portable, et la version 2 apporte des trucs sympa comme le multi-fenêtrage.
    • nativefiledialog (ou la version extended) permettent d’avoir d’utiliser les sélecteurs de fichier de l’OS même dans une appli SDL, c’est plus sympa
  • Nettoyer le code de certains projets
  • La gestion des paquets est souvent inexistante sur ces vieilles machines, pourtant ça peut être très pratique, ainsi que pour compiler automatiquement les dépendances. Pour info même FreeDOS a une tentative de gestion de paquets…
    • PkgSrc, le gestionnaire de portages des BSD supporte de nombreux OS déjà…
  • Ajouter le support du GFA BASIC dans LLVM. Il existe déjà un frontend BASIC pour LLVM, et maintenant que le support 68k arrive ça devrait être faisable.
  • Le support d’IPv6 : ça va devenir nécessaire d’ici quelques années pour pouvoir accéder à Internet… Mais c’est pas le plus simple. Il existe des piles réseau légères et portables, mais par contre pour les insérer dans les couches existantes des OS anciens ça risque d’être galère.

Chiptune: Aethernaut – The Moon (Ducktales mix)

Agenda

Rappelons que l’agenda est celui de la semaine passée lors des rediffusions le samedi.

Bépo ! Quesako ?

“Vous êtes nombreux à me parler de mon clavier atypique alors je vais tout vous expliquer.
Je vais vous parler de dactylographie, d’histoire, d’ergonomie… et de la toute nouvelle norme AFNOR NF Z71‐300.
Si vous voulez savoir s’il faut investir dans un clavier bépo, c’est le moment de poser vos questions.
Si certain veulent essayer mon clavier, ce sera le moment !”
Nathanaël vous expliquera tout sur ce clavier bizarre 🙂

Mercredi 1er juillet, 12h30 – 13h30 ;
La Forge Collective, 8 rue Baudin, 26000 Valence.

Futur Maker

4 demi-journées pour devenir un as de la fabrication numérique et pouvoir fabriquer ses propres objets toute l’année. Dessin 2D, modélisation 3D, impression 3D, découpe laser et vinyle n’auront plus de secrets pour vos ados.
En plus pour la session de juillet : initiation Arduino
En plus pour la session d’août : circuit-bending

de 11 à 16 ans
4 demi-journées – 8 participants max, 150€
au 8fablab, 8 rue Courre-Commère, 26400 Crest ;
du 6 au 9 juillet – 9h > 12h
du 24 au 27 aout – 9h > 12h

Passeport Plotter

Apprendre à utiliser un plotter de découpe vinyle.

Sur inscription, 20€ – 5 participants max ;
Mardi 7 juillet, 17h – 18h ;
8fablab, 8 rue Courre-Commère, 26400 Crest.

Passeport Imprimante 3D

Apprendre à utiliser une imprimante 3D.

Sur inscription, 30€ – 5 participants max ;
Mardi 7 juillet, 18h30 – 20h30 ;
8fablab, 8 rue Courre-Commère, 26400 Crest.

Du lien et des liens

La chaîne youtube d’Yves Rougy, avec des formats très courts mais intéressant, sur les premiers processeurs et d’autres histoires informatiques.

L’explication de pourquoi Python s’appelle Python.

L’épisode 13 de Hackstock parle de sécurité numérique et de manifestations.

Un long article invitant à revenir à la disquette…

Une autre chaîne youtube sur l’électronique, celle d’Andreas Spiess, “The guy with a swiss accent”.
Et encore une autre : Tech Time Traveller.

Quand Rick Astley se fait rick-roller

Terminus, un jeu pour découvrir la ligne de commande.

Björk a mis en ligne toute sa discographie sur Bandcamp.

Un classique pour finir, si vous êtes perdu sur Internet

Astrologeek

  • sysadmin : “Terminal ! Tout le monde descend !”
  • macounet : il faut s’ARMer de patience, mais faire preuve d’Intel-igence. (merci Sergio)
  • nolife : la seule fenêtre vue est celle du nuage
  • amigaïste : Quand j’ai vu la démo je suis devenu aga ga
  • musicien : T’as samplé ? 100 plaies !?? J’espère que tu cicatrise rapidement !
  • télétravailleur : (chanson) Y a des micros ouverts… webcam, regards de travers… qu’est-ce que j’fais dans cette galère…