APL 68000

English Version



J'ai obtenu l'autorisation de diffuser cette ancienne version de APL 68000 6.05c pour Atari ST avec mon PATCH directement par l'éditeur de ce langage: MicroAPL.
(Voir en bas de page pour le téléchargement).

Le directeur, Richard Nabavi, précise que: Par ailleurs, cette société poursuit son travail de développement avec plusieurs outils intéressants que vous trouverez sur le site de MicroAPL. En particulier, si ce langage vous intéresse, visitez la page de leur nouveau produit APLX qui tourne sous Windows, MacOSX et Linux.
Un grand merci à eux!



Un langage de programmation concis et puissant!


Je dispose de la version 6.05c de cet interpréteur qui tourne sur un Atari ST(e). Etant un programme sous GEM, j'ai imaginé qu'il serait exécutable sans problème sur une machine plus récente.
  • Tourne t-il sur un Atari TT?
  • Tourne t-il sur un Falcon/CT060 ?

Après quelques tests, force est de constater que NON...

Je me suis attelé à la tâche pour résoudre divers problèmes venant de:
  • l'utilisation de la TT Ram
  • l'utilisation de nouveaux processeurs 030/060
  • l'utilisation de nouveaux TOS (en particulier le 4.xx)
  • l'utilisation chez moi d'un clavier AZERTY au lieu du QWERTY

J'ai écrit un programme APLPATCH.PRG (en Forth) qui vous permet de régler toutes ces options selon la machine sur laquelle tournera le programme.

Temps de calcul du programme PI en 32 puis en 48MHz
sur le TT équipé d'une CaTTamaran.


Présentation du langage


Approximation de PI par une somme


Voici le programme très concis de calcul de PI. Les deux lignes autour de la formule sont là pour calculer le temps d'exécution.
On utilise la somme des inverses des carrés qui tend vers PI au carré sur 6.
"N" est le nombre d'entiers à utiliser.
  • la partie ιN crée un tableau des entiers de 1 à N.
  • *2 les met tous au carré
  • le signe divisé devant demande les inverses de tout le tableau
  • le groupe +/ calcule la somme des termes du tableau
  • et le résultat est multiplié par 6
  • au final, on prend la racine carrée de l'ensemble avec la puissance 0.5
  • ce résultat, proche de PI, est simplement affiché


Calcul de la durée d'exécution


Voici le programme très concis de calcul de la durée.
On utilise la variable quadTS qui renvoit un tableau avec l'heure actuelle sous la forme (AN MOIS JOUR HEURE MIN SEC 1/1000).
"T" est la variable qui a stocké l'heure de début d'exécution. L'appel de DUREE se faisant en fin d'exécution.
Imaginons que le programme à tester ait débuté à 10h 59mn 45,240s et se finisse à 11h 01mn 50,000s le même jour:
  • la partie -4↑T ne conserve que les 4 derniers éléments de T, c'est à dire (10 59 45 240).
  • de même -4↑quadTS ne conserve que les 4 derniers éléments de l'heure de fin (11 01 50 0).
  • ces deux tableaux sont soustraits (1 -58 5 -760)
  • puis multiplié par les valeurs en seconde (3600 60 1 0.001) ce qui donne (3600 -3480 5 -0.760)
  • pour finir +/ demande la somme des éléments 3600-3480+5-0.760 = 124.24 sec
  • ce résultat est simplement affiché


Un peu de statistiques, cahier des charges de la fonction STAT


Voici le résultat escompté.
On appelle la fonction STAT avec un vecteur de données qui représentent les effectifs à traiter. On attent en retour l'affichage:
  • des effectifs pour rappel
  • des effectifs cumulés croissants
  • des effectifs cumulés décroissants
  • des fréquences (valeurs de l'intervalle [0;1])
  • des pourcentages
  • des valeurs d'angles pour un éventuel diagramme circulaire (360°)


Examinons en détail la fonction STAT


Code source en utilisant Open Fn dans le menu.
Dans STAT V, la variable locale V reçoit le vecteur des effectifs.
  • N reçoit la valeur ρV, c'est à dire la dimension du vecteur (N=4 dans mon exemple).
  • FREQ reçoit la valeur de V divisé par la somme de ses éléments, c'est la définition de la fréquence.
  • Ensuite, on crée un grand vecteur en concaténant différents éléments (avec la virgule)
    • 1er élément V: les effectifs eux-mêmes
    • 2è élément +\V qui répercute l'addition dans V: les effectifs cumulés!
    • 3è élément, on utilise le signe circlestile pour inverser la liste afin d'avoir les effectifs cumulés décroissants!
    • 4è élement: le vecteur des fréquences.
    • 5è élément: les fréquences fois 100 donnent les pourcentages
    • 6è élément: les fréquences fois 360 donnent les angles
  • le tout, avec (6,N) ρ est réorganisé en un tableau de 6 lignes à N éléments et stocké dans TAB.
  • Pour finir, on affiche les titres en réorganisant la chaine de caractères en 6 lignes de 6 lettres
  • Titres auxquels on ajoute le tableau des valeurs convertit en chaines de 8 caractères avec 2 décimales (symbole α pour le formatage)


Suite des statistiques, cahier des charges de la fonction GRAPH


Voici le graphique escompté.
On appelle la fonction GRAPH après avoir appelé la fonction STAT. Elle utilise le tableau FREQ des fréquences et permet de les afficher sous forme d'une ligne brisée.
  • Graduations verticales pour 0%, 25%, 50%, 75% et 100%.
  • Graduations horizontales pour chaque élément du vecteur.
  • En plus de la ligne brisée, chaque point sera renforcé par une marque.
  • la taille du graphique sera de 300 par 200 avec 10 pixels de marge à gauche et en haut


Examinons en détail la fonction GRAPH


Code source en utilisant Open Fn dans le menu.
Dans GRAPH, les paramètres implicites sont le tableau FREQ et la valeur N calculés par la fonction STAT précédente.
  • Les trois premières lignes permettent de régler la sortie dans la fenêtre APL, d'effacer son contenu et de choisir le + comme marque pour les graduations.
  • XTAB est un vecteur qui recevra les abscisses des points du graphique. Voyons en détail:
    • ιN crée un tableau de 1 à N, donc (1 2 3 4) dans mon exemple.
    • ce tableau est divisé par N, donc par 4, ce qui donne: (0.25 0.5 0.75 1) dans l'exemple.
    • ensuite il est multiplié par 300: (75 150 225 300)
    • on ajoute 10 pour la marge et donc XTAB = (85 160 235 310), les abscisses des 4 points!
  • On construit ensuite un grand vecteur qui contiendra toutes les abscisses et les ordonnées des points correspondants aux axes graduées.
    • d'abord (5ρ10),XTAB qui donnera (10 10 10 10 10 85 160 235 310), c'est à dire les abscisses des 5 marques verticales puis des 4 marques horizontales.
    • ensuite 10 60 110 160 210,(Nρ210) qui donnera (10 60 110 160 210 210 210 210 210), c'est à dire les ordonnées des 5 marques verticales et des 4 marques horizontales.
    • au final, (2,(N+5))ρ réorganise ce vecteur en une matrice de 2 lignes et N+5 colonnes, chaque colonne est le couple de coordonnées d'un point, cette matrice est stockée dans PIXEL.
  • On fournit cette matrice à POLYLINE pour tracer les axes et à POLYMARKER pour marquer les graduations avec des +
  • On change ensuite de marque avec le ◊
  • on crée une nouvelle matrice PIXEL avec XTAB pour les abscisses et les fréquences FREQ pour les ordonnées converties dans l'intervalle [210;10]
  • de nouveau, POLYLINE et POLYMARKER permettent de tracer le ligne et de marquer les points
Note: au lieu de représenter les fréquences avec 100% comme valeur maximale dans le graphique, on peut s'arranger pour avoir la plus haute fréquence comme maximum. Pour cela on changera la séquence
(210-FREQ×200)
par
(210-(FREQ÷Γ/FREQ)×200)


Programme de PATCH pour TT/Falcon


Voici le programme permettant d'adapter l'APL68000 à votre configuration. Ci dessous, l'explication des différentes options:
Use alternate Fast RAM
si votre machine dispose d'une Fast Ram, vous pourrez exécuter plus rapidement le programme.
Sur un STE ou Mega STE cela permet simplement un chargement plus rapide de l'APL.


French AZERTY keyboard
pour adapter le programme au clavier Français


MC68030/68060 stack format
Si vous utilisez un processeur à partir du 68030, cette option est essentielle car le format d'utilisation de la pile lors d'un TRAP n'est plus le même qu'avec un 68000, ce qui provoquait une erreur du programme.


16MB ram limit if more present
l'APL68000 ne sait gérer que 16Mo de mémoire. Si votre machine dispose de plus de mémoire libre, cette option est nécessaire car cela entraine une erreur du programme.


APL font patch (for TOS 4)
Une fonction non documentée de la VDI est utilisée pour charger la fonte APL et ses caractères spécifiques. Ceci ne fonctionne plus avec le TOS 4 du Falcon. Malheureusement, mon patch ne fonctionne pas encore... Voir "APLFONT.PRG" en dessous comme solution temporaire.


Missing \ in FileSelector
Si vous travaillez avec l'APL dans un dossier, le chemin proposé par défaut dans le sélecteur de fichier nécessite un slash supplémentaire. Cette option n'est pas nécessaire si vous travaillez à la racine d'un lecteur (Disquette par exemple).


Voici mes réglages sur le TT avec 64Mo de TT Ram.
Réglages typiques

Un ST(E) ou Mega ST(e)
la Fast RAM permet le "fast load" sur les TOS plus récents. Eventuellement l'adaptation au clavier AZERTY.


Un TT030
  • l'option FAST RAM si vous avez de la TT Ram
  • l'option MC68030 obligatoire!
  • l'option 16MB Limit si vous avez plus de 16Mo de TT Ram libre (extension 32Mo ou plus)


Un Falcon CT060
tout cocher !!


Programme APLFONT pour Falcon


Tant que mon PATCH ne permet pas d'installer la fonte APL directement depuis l'interpréteur, il faudra, sur le TOS 4.xx, utiliser le programme suivant: APLFONT.PRG.



Espace de travail MESTESTS.AWS


En lançant APL, vous pouvez charger, via le menu )LOAD, mon espace de travail MESTESTS.AWS. Il contient les trois programmes présentés plus haut, à savoir DUREE, PI et le couple STAT/GRAPH. Cet espace de travail contient également les routines STGRAPH pour accéder aux primitives de la VDI.

Pour le tester, tapez simplement PI 100 et vous devriez obtenir une approximation de PI suivie du temps de calcul. Voici quelques résultats:

machine Atari ST(e) 4mo TT 64mo/48mhz Falcon CT060/95mhz
résultat du test PI 100000 3.141583104
280.56 sec
3.141583104
47.32 sec
3.141583104
3.5 sec


Vous voyez facilement l'intérêt du Patch avec le gain de puissance approté par les nouveaux processeurs!!
Le TT va 6 fois plus vite que le STE
Le Falcon va 80 fois plus vite que le STE


Contenu du téléchargement


Contenu:
  • APL.PRG et APL.RSC
    • le programme original tournant sur un ST(e) ou Mega ST(e)
  • APLWORK.PRG
    • programme de travail sur lequel appliquer vos patchs
  • *.AWS
    • espaces de travail amenant des facilités pour les accès GEM, fichiers, etc...
  • Dossier RUNTIME
    • tout pour diffuser vos programmes sans diffuser l'interpréteur complet
  • APLPATCH.PRG et APLPATCH.RSC
    • mon programme de patch pour l'utilisation sur une machine plus récente
  • APLFONT.PRG
    • installation de la fonte APL sur un TOS 4.xx Falcon
Téléchargez le fichier
APL.ZIP.


15 décembre 2007