Vinz67

Atari

Projets

Projet "Modernisation du port MicroEmacs"

MicroEmacs est un éditeur de texte qui fonctionne sur de nombreux systèmes d'exploitation. En version 1.8, il était livré avec le compilateur Mark Williams C (MWC), qui faisait partie du kit de développement officiel sur l'Atari ST. Des versions plus récentes, jusqu'à la version 4.00 ont été portées, mais malheureusement elles ne fonctionnent pas parfaitement sur les Atari ST avec clavier français, à cause du fait que la touche ALTERNATE est systématiquement interprétée comme la touche spéciale.

J'ai entrepris d'essayer de rendre MicroEmacs utilisable sur les Atari ST français. J'ai récupéré l'archive de la version 4.00

Le résultat se trouve ici: https://github.com/vinz6751/microemacs-st

J'ai décidé de cross-compiler en utilisant GCC, plutôt que d'utilise le Mark Williams C, car ceci permettra de produire des versions optimisées pour différents types de processeurs, y compris le ColdFire de la FireBee. Comme cross-compilateur, j'utiliserai les outils fournis par Vincent Rivière, c'est à dire GCC 4.6.4, GEMlib pour la librairie GEM et libcmini.

J'ai du adapter le Makefile, et toutes les dépendances aux bibliothèques TOS et GEM, et les définitions qu'elles contiennent. Concernant le passage des paramètres, pas de problème car GCC tout comme le PWC passe les paramètres par la pile.

La version actuelle utilise lese fonctions du BIOS et l'émulateur VT-52 pour l'affichage, et utilise la LineA pour détecter et changer la fonte système (car il permet d'utiliser une fonte plus petite pour avoir 40 lignes au lieu de 25 en haute résolution). Pour gérer la souris, il détourne le vecteur clavier mousevec, mais n'utilise pas la convention XBRA (quelque chose à améliorer). Pour attendre les évènements, il utilise le evnt_multi de l'AES. Donc c'est un joyeux mélange de VT-52, LineA et AES, pour un éditeur qui ressemble à un programme TOS plutôt que GEM :)

Support de PATH dans EmuCON2

EmuCON2 est un petit shell écrit par Roger Burrows, et est tout petit (16Ko) et a donc été intégré à EmuTOS. On peut l'appeler au boot, où depuis le bureau par Control-Z. Il est donc toujours disponible et très pratique, mais il a un défaut qui me génait: il ne trouve pas les programmes ! Il faut définir le répertoire de recherche des programmes à l'aide de la commande PATH, et ce n'est pas mémorisé. C'est donc très peinible.

Le projet consiste à permettre à l'utilisateur de spécifier les répertoires de recherche d'exécutables une bonne fois pour toutes. C'est simple, il suffit de récupérer la chaîne d'environnement passée dans la BASEPAGE du programme lors de son lancement par le GEMDOS, et de simuler une commande "path" avec la valeur de la variable d'environnement PATH qu'on y trouve.

Mais il faut aussi pouvoir spécifier cette fameuse chaîne d'environnement. Ni l'AES ni le desktop ne permettent de la spécifier, malheureusement. Par contre l'AES passe la chaîne d'environnement qu'il reçoit au desktop, qui lui, la passe aux programmes qu'il lance (dont EmuCON2). Donc il faut passer la chaîne environnement à l'AES lors de son lancement.

Cela est possible grâce à la variable système exec_os à l'adresse 4fe. Celle ci pointe vers la BASEPAGE du GEM avant qu'il ne soit lancé. On peut donc y injecter l'adresse d'une chaîne d'environnement que l'on aura préparée avec amour.

Cette chaîne doit donc être préparée avant le lancement de l'AES, c'est à dire par un programme du dossier AUTO. Ce programme devra lire un fichier contenant la chaîne d'environnement, l'injecter dans la BASEPAGE du GEM via la variable exec_os, et bien sur rester résident. Pour rendre la chose intéressante, j'ai décidé de faire le programme le plus économe en mémoire possible. Donc il ne va garder que sa basepage (obligatoire, j'ai essayé sans et ça plante) et le minimum nécessaire à la gestion du fichier contenant l'environnement. On va donc mettre tout ça au début du programme, et la taille résidente sera limitée à cela. C'est à dire qu'une partie du code du programme ne sera pas conservé en mémoire. Evidemment il faut faire ça en assembleur car en C ou pire en GFA on ne peut pas maîtriser ce genre de choses.

Le résultat est ici:

Vinshell

A part EmuCON2 qui est minimaliste, il n'existe pas à ma connaissance de shell open-source dédié à l'Atari ST. J'ai donc décidé d'en écrire un petit pour satisfaire mes besoins personnels, qui se limitent à la gestion des fichiers et l'utilisation d'utilitaires de programmation ou de compression en ligne de commande.

VINSHELL est donc ce projet. Il est fait en C avec Pure C. Ce shell se veut tout à fait classique. A ce jour, la gestion des dossiers fonctionne, et on peut lancer des programmes. Il importe l'environnement et permet de faire des variables mais tout est encore très expérimental.