Hewlett Packard HP 86B

English Version
WikipédiA



Un ordinateur dédié aux calculs scientifiques avec un mode calculatrice!

Je recherche un moniteur composite monochrome!

Caractéristiques Les modules d'extension Le disque dur Les disquettes L'interface HP-IL L'interface RS232 Exemple commenté Plotter/Emul

C'est un ordinateur permettant de piloter des appareils de mesure, de réaliser un traitement scientifique des données et d'un produire des graphiques avec une réelle facilité au niveau de la programmation! Une machine de matheux en sorte...

Caractéristiques: Les modules d'extension

Les modules s'enfichent dans un tiroir à modules, le ROM DRAWER HP 82936A qui, lui même, vient se loger dans l'un des 4 ports d'extension à l'arrière de la machine. Malheureusement, seuls 6 modules peuvent être utilisés à la fois, car un seul tiroir est supporté par le système. Il faut donc faire ses choix. Chacun apporte de nouvelles fonctionnalités logicielles ou matérielles qui viennent étendre le BASIC. Voici ceux dont je dispose...


Extended Mass Storage 00087-15013


Ce module permet la gestion de mémoires de masse utilisant le protocole SS/80. Il était indispensable pour la dernière génération de disques durs produits par HP tels que celui que j'utilise, le 9154A. Voir plus bas!


Assembler 00087-15007


Ce module donne accès au langage assembleur de la machine. Il permet de compiler un fichier source en un fichier Binaire. Ce dernier sera chargé par le Basic et pourra, selon les cas:
  • Ajouter des instructions ou commandes BASIC
  • Produire un programme s'exécutant immédiatement
  • Une combinaison des deux!
Mon premier programme: ASQR

Il crée une nouvelle fonction BASIC ASQR(X) qui renvoit la racine carrée de la valeur absolue de X. Ainsi, même un paramètre négatif ne provoquera pas d'erreur.

Lignes 1000-1050 une table donnant les différents points d'entrée du fichier binaire. Tous les porgrammes sont structurés de la même manière!

Lignes 1100-1110 la routine PARSE lit le reste de la ligne pour récupérer les arguments. Mais pour une fonction on laisse la routine du système s'en charger, donc pas de parse dans notre cas.

Lignes 1200-1290 la table des routines, une seule fonction est présente donc une seule référence.

Lignes 1300-1390 la table des noms, un seul présent ASQR. Et pas de message d'erreur.

Lignes 1400-1410 la routine d'initialisation a éxécuter lors du chargement. Il n'y en a pas.

Lignes 3000-3040 la routine de ma fonction ASQR. Les octets 20 et 55 signalent une fonction numérique à un seul argument. Ensuite se trouvent les appels à ABS et SQR (le BASIC travaille sur une pile en interne, on est comme sur une HP41. Puis un RTN pour terminer.

Lignes 3050-9999 définition des adresses ROM et fin du programme. Remarquez le mot FIN en français... Etrange!
On utilise
ASSEMBLE "ASQR_B"
pour générer le fichier binaire et on rebascule sous le Basic.

Voyez le chargement et l'utilisation immédiate de la nouvelle fonction!


Plotter 00087-15002


Ce module permet de piloter des traceurs. Le langage des traceurs HP, le HP-GL, ressemble un peu au LOGO. On monte ou on descend le crayon, on peut choisir la couleur (pour les traceurs disposant de plusieurs crayons), on place le crayon de manière relative ou absolue.

Les instructions du traceur sont reprises pour l'affichage graphique, de ce fait on peut utiliser presque le même programme pour un affichage écran ou papier.

Allez voir mon Plotter Emulator!


Input/Output 00087-15003


Ce module donne accès aux entrées sorties en conjonction avec les cartes HP-IL ou RS232. Il donne toute une série d'instructions pour envoyer et recevoir des données ou régler le système de transmission.

Voir l'exemple THERMO utilisant une liaison HP-IL vers une unité d'acquisition de mesures.


Advanced Programming 00087-15005


Ceci est un module double! Deux logements sont nécessaires pour faire fonctionner les routines mises à disposition. Il apporte:
  • Des facilités dans la gestion des chaines de caractères
  • Un accès au curseur et un placement plus aisé sur la page
  • Des fonctions étendues pour la date et l'heure
  • Mais surtout, l'écriture de SUBROUTINES. Ce sont des librairies indépendantes contenant des procédures ou fonctions avec passage de paramètres par valeur ou adresse et qui sont chargées dynamiquement lors de l'exécution. Des DLL avant l'heure!


Le disque dur HP 9154A

Il s'agit d'un disque utilisant le jeu de commandes SS/80 (donc nécessite le module Extended Mass Storage) et amenant la quatité phénoménale de 10Mo de données.

Il se connecte sur le port HP-IB et a, par défaut, l'adresse de périphérique ":D700".

Le système de fichiers est archaïque:
  • Un seul répertoire, tout est listé dedans
  • Pas de fragmentation, les fichiers effacés laissent donc des espaces vides. La commande PACK permet de ramener tous les fichiers les uns à la suite des autres
  • Un fichier, lorsqu'il est créé, a une taille fixe qui ne pourra pas être modifiée. Pour ajouter des données à un fichier, par exemple, on doit en créer un autre plus grand, recopier les données déjà présentes, puis compléter avec les nouvelles.


Le double lecteur de disquettes HP 9122D

Voici l'unité de disquettes. Je l'ai réglée sur le numéro de périphérique "1" de la chaine GP-IB "7". De ce fait, le premier lecteur est référencé ":D710" et le second ":D711".
Chaque unité permet de stocker 620Ko à peu près. C'est à dire 52 copies graphiques d'écran!


Quelques commandes:
INITIALIZE "mydisk",":D711"
STORE "myprog:D710"
MASS STORAGE IS ":D710"
COPY "myprog" TO "myprog:D711"
  1. Le première commande permet de formater un disque dans l'unité n°2.
  2. La seconde enregistre le programme courant dans l'unité n°1
  3. La troisième fixe par défaut le lecteur n°1
  4. La quatrième copie "myprog" de l'unité par défaut vers l'unité n°2


Il a fallu démonter les lecteurs pour réparer le système d'éjection. En effet une grande pièce de métal a tendance à se figer, collée par la graisse et la poussière, au fil du temps. Cette pièce doit être vers l'arrière lorsque la disquette est sortie (Figure 1, on voit l'espace entre le métal et le bouton d'éjection). Cette même pièce doit être vers l'avant lorsque la disquette est insérée (Figure 2, pas d'espace entre le métal et le bouton). Si tel n'est pas le cas, déposez quelques gouttes d'alcool aux endroits indiqués et manoeuvrez la pièce. En peu de temps elle se décolle et le lecteur est à nouveau prêt à fonctionner!

Figure 1: disquette sortie!

Figure 2: disquette insérée.


Comment récupérer les images de disques de HPMUSEUM.NET ?

Ce site offre en téléchargement libre plusieurs images de disques contenant des applications diverses (jeux, présentations graphiques...). Il se pose un problème pour recréer les images: souvent elles correspondent à des disquettes 5"1/4 et là, notre 9122 propose des disquettes 3"1/2 de plus grande capacité.

Grâce à l'aide de Ansgar Kueckes voici ce que j'ai pu faire: Ensuite, on télécharge une image au format TD0, faisons le test avec GALAXY PATROL dont le fichier s'appelle GALPATRL.TD0.
INITIALIZE "GAME",":D710"

TD2HPI GALPATRL
DIR *.HPI
Fdio -dup GALPATRL.HPI a:

CAT ":D710"

COPY ":D710" TO "D711"
  1. On commence sur le HP en formatant une disquette dans l'unité 710.
  2. Ensuite, côté PC, l'outil TD2HPI va convertir le TD0 en HPI
  3. La commande DIR vous permet de vous assurer que GALPATRL.HPI a bien été créé
  4. Insérez ensuite la disquette dans le PC et lancez FDIO. Un avertissement de tailles incompatibles s'affiche, mais on laisse faire! (280Ko au lieu de 616Ko)
  5. Pour finir, remettez la disquette dans le HP, la commande CAT vous donne la liste des fichiers!
  6. En général, je formate une seconde disquette de 616Ko et je transfère tous ces fichiers dessus avec la commande COPY sinon on garderait une disquette limitée à 280Ko


L'interface HP-IL 82938A

Elle permet la connexion de l'ordinateur à toute une série de périphériques pour des transferts en mode texte.
  • Un multimètre digital HP 3468B
  • Une unité d'acquisition numérique/analogique 3421A
  • La calculatrice HP 41CX !
Pour fonctionner, il faut disposer du module Input/Output (voir plus haut).
Il faut malheureusement l'ouvrir pour accéder aux switches de configuration. 3 sont réservés à l'adresse de la carte, 9 par défaut. Ainsi, le premier appareil de la boucle sera adressé "901", le second "902", etc.

Le dernier switch indique si le HP86 est le controleur de la boucle ou non. Normalement OUI! Mais ceci peut entraîner des conflits lorsqu'une HP41 est également présente. Pour l'instant, je n'ai pas vu de conflit.


L'interface RS232 HP 82939A

L'interface série permet une connexion RS-232 avec une imprimante, un modem ou un autre ordinateur. Elle est limitée à 9600 bauds, ce qui est bien suffisant au vu de la vitesse de traitement de l'ordinateur lui-même.

Elle existe en deux options:
  • 000 avec une fiche DB25 femelle (celle dont je dispose)
  • 001 avec une fiche DB25 mâle


Pour les réglages, deux séries de switchs sont disponilbles. Ils permettent de fixer le fonctionnement par défaut. Ensuite, certains réglages peuvent être modifiés par programme.

Le premier petit bloc fixe le numéro de l'interface série, 10 par dafaut.
Le deuxième bloc règles la parité, le nombre de bits STOP, le nombre de bits par byte ainsi que la vitesse de transfert.

J'ai choisi 9600 bauds, pas de parité, 1 bit stop et 8 bits par byte.


Test de l'interface

J'ai relié le HP à un PC sous Windows XP.

Dans la console DOS je tape:
MODE COM1: BAUD=9600 PARITY=N DATA=8 STOP=1 [ENTER]
COPY CON: COM1: [ENTER]
	   
Côté HP, je tape ce petit programme:
10 DIM A$[128]
20 ENTER 10;A$
30 DISP A$
40 GOTO 20
Puis touche RUN pour l'exécuter!
Maintenant, tout ce que je tape sous Windows apparaît sur le HP86 à chaque ligne (finie par ENTER). (pour quitter sous DOS, on tape Ctrl+Z puis ENTER, et sous HP86 SHIFT+RESET).

Envoi d'un fichier TEXTE vers le HP86

On peut envoyer un source BASIC ou ASSEMBLEUR, ou tout simplement un fichier texte vers le HP86 à l'aide ce petit utilitaire en deux parties:
Téléchargez moi!


Côté HP86, on lance le programme SERIE (ici à droite) qui se met en attente de la réception des informations de transfert.

Côté WINDOWS, on lance le programme COPIE SERIE.EXE (ci-dessous) qui vous ouvre un sélecteur de fichier dans lequel vous choisissez le TEXTE à envoyer.

Il est analysé en taille et nombre de lignes. On vous demande le nom à utiliser côté HP pour l'enregistrer.

Pour finir, les données (nom, nombre de blocs, nombre de lignes) sont envoyées suivies des lignes de texte elles-mêmes.

Côté HP, vous voyez les données reçues ainsi que l'affichage de toutes les lignes de texte à mesure qu'elles arrivent.


Appuyez bien sur K1 quand on vous le demande!

Le programme de réception sur le HP86


Finalisation (en supposant que le fichier TEXTE s'appelle HUB):


Pour un programme BASIC :
  • SCRATCH (pour effacer mon programme de réception)
  • GET "HUB" (charge le fichier TEXTE en zone programme)
  • PURGE "HUB" (efface le fichier TEXTE devenu inutile)
  • STORE "nomfichier" (l'enregistre en programme BASIC)
  • RUN pour l'exécuter!
Pour un source ASSEMBLEUR :
  • ASSEMBLER (passe en mode ASM)
  • GET "HUB" (charge le fichier TEXTE en zone programme)
  • PURGE "HUB" (efface le fichier TEXTE devenu inutile)
  • ASTORE "nomfichier" (l'enregistre en source ASM)
  • ASSEMBLE "nomfichierbinaire" (pour créer le binaire)


Réception d'un fichier TEXTE du HP86

J'utilise simplement le TERMINAL.EXE de Windows que je règle en VT52 sur le COM1: avec 9600 bauds, 8 bits, pas de parité, 1 bit stop sans contrôle de flux.

Sur le HP86 je tape:

CRT IS 10
LIST


Ce qui envoie enièrement le listing vers le TERMINAL dans lequel je peux capturer le texte.
Puis:

CRT IS 1

Pour revenir au mode normal sur le HP.


Envoi d'une IMAGE vers le HP86

Toujours avec mon programme (Téléchargez moi!) , on peut envoyer une image vers le HP86. J'ai choisi le format BMP monochrome, sans compression, avec la taille 400x240 correspondant au mode GRAPH du HP.

Etape 1: D'abord choisir une image ayant des proportions à peu près carrées. Etape 2: Ensuite, la redimensionner en 400x240. Etape 3: Puis appliquer un filtre monochrome (ici un Stucki). On enregistre ensuite au format BMP.
Pour finir on l'envoit vers le HP. D'abord lancer le programme "COPIE SERIE.EXE", choisir le mode 2 pour envoyer une image, et sélectionner le fichier puis valider. "Sending lines..." s'affiche.

Côté HP, lancer le programme "SERIE", touche K2 pour recevoir une image et ENTREE pour lancer le transfert.


Appuyez bien sur K2 quand on vous le demande!


Ci-dessus, l'image reçu sur l'écran du HP !!


Reception d'une image venant du HP

Pour envoyer l'écran GRAPH vers le PC, il faut qu'il soit déjà prêt!
  • Soit l'image est déjà présente en page graphique
  • Soit vous tapez GLOAD "nomimage" pour la charger
Ensuite, il suffit d'utiliser l'entrée "3" du programme (Téléchargez moi!) pour charger l'image.
On vous demande le nom du BMP (n'oubliez pas l'extension BMP) et le transfert commence!

Voici un exemple d'image reçue:

J'ai choisi la couleur verte sur fond noir!

Appuyez bien sur K3 quand on vous le demande!


Exemple commenté THERMO

Ce programme de monitoring capture une température intérieure et extérieure ainsi que l'ensoleillement à intervalles réguliers programmables et en produit un graphique à la demande.

Voici l'installation ci-contre:


Voici ce qu'on peut obtenir. Ce graphique est le résultat d' 1h40 d'observations avec une capture par minute. C'était une matinée avec soleil et passages nuageux (regardez la courbe de la photorésistance qui signale des variations de luminosité). La températeur extérieure varie presque instantanément suivant le soleil alors que la température intérieure augmente plus régulièrement.



Lignes 10-30: la fonction qui transforme la résistance en température, les valeurs extrêmes (empiriques) pour la photorésistance et le tableau de données T(0,i) températures IN, T(1,i) OUT et T(2,i) la luminosité.

Lignes 100-230: Les initialisations, lance le timer #1 pour une mesure régulière, fixe les actions de 3 touches.

Ligne 500: boucle d'attente d'un événement Timer ou Key.

Lignes 1000-1090 (Timer #1): commandes par le HP-IL, demande la lecture des 3 résistances sur les canaux 2,3 et 4. Récupère les données dans B, C et A. Valeurs transformées, affichées, stockées dans les tabeaux puis on met à jour les minima et maxima.

Lignes 2000-2010 (Appui sur F2): passe en mode graphique, efface l'écran. LOCATE limite la zone de sortie pour laisser de la place aux axes et graduations. Ligne type continu, et trace le cadre autour.

Lignes 2020-2040: I et X sont les limites entières des températures. SCALE va définir les plages des valeurs pour les tracés. LAXES trace les axes avec les valeurs (labels).

Lignes 2050-2100: La double boucle trace les deux courbes de température en utilisant directement les valeurs en température et en temps. Le système s'occupe de la conversion en pixels grace à la fonction SCALE précédente.

Lignes 2110-2125: un nouveau SCALE pour s'adapter aux valeurs de la luminosité. (on remarquera que BLANC
Lignes 2030-2060: tracé de la courbe de luminosité.

Lignes 3000-3020 (Appui sur F1): sort de la page graphique pour revenir à l'affichage des valeurs sous forme de liste.

Lignes 4000-4050: Initialisation, affiche le titre et demande l'intervalle des mesures en heures-minutes et secondes.

Lignes 4060-4075: calcule l'intervalle IT en secondes et MS en millisecondes (pour le Timer), initialise ensuite les limites hautes et basses des températures et éclairages.

Lignes 4080-4090: si les secondes sont nulles, alors la graduation sera en minutes. Si de plus les minutes sont nulles alors la graduation se fera en heures.

Lignes 4100-4110: le GOSUB lance la première lecture puis retour.

Ligne 5000 (Appui sur F7) : sort brutalement du programme!
Voici la page de texte avec les relevés de mesure.

On notera les boutons en bas que le système prépare automatiquement avec les renseignements donnés par "ON KEY" qui forment un menu très facile à mettre en oeuvre.

La page texte et la page graphique sont indépendantes et on n'efface pas l'une quand on affiche l'autre (on peut faire des allers retours avec la touche A/G (Alpha/Graphics).


Plotter Emul

Voici un petit utilitaire qui permet d'émuler une table traçante couleur à travers l'interface série RS232.

Côté HP86, il faut une interface série réglèée en 9600 bauds, 1 bit stop, pas de parité, et 7 bits de donnée. On redirige le plotter vers l'interface série.
CONTROL 10,4;4  -> pour 7 bits
CONTROL 10,3;15 -> pour 9600 bauds
PLOTTER IS 10   -> à insérer dans votre programme
On lance l'émulateur de Plotter

Le télécharger!
Le choix de "1" met votre plotter en ligne, il attend les instructions.

C'est à ce moment qu'on lance le programme côté HP86 (il faut en effet être en ligne pour répondre aux demandes d'informations de la commande "PLOTTER IS 10").
Une fois que le programme ne reçoit plus de données, il affiche un petit menu permettant de sauver l'image reçue (elle s'affiche aussi dans une fenêtre séparée).

Le nom sera PLOTTER_00000.PNG et le numéro augmente en séquence feuille après feuille.


Voici le résultat de l'impression.

J'ai utilisé l'exemple donné dans le manuel du module "PLOTTER", remarquez que l'impression se fait en couleurs en insérant des commandes PEN n pour changer de crayon.

Note: en plus de l'image, un fichier PLOTTER.TXT résume l'ensemble des instructions reçues, les sauvegardes d'images, les changements de page.


Plotter HP 7550A

J'ai acquis un HP 7550A, plotter 8 crayons, qui permet d'écrire sur du A4 et même sur du A3.

J'ai écrit un petit programme qui permet de préparer le fond de mes arbres généalogiques sur 8 générations. Pour l'instant, les noms sont à remplir à la main mais cela pourrait être ajouté par la suite pour qu'une base de noms soit sauvegardée et automatiquement affichée dans les cases.


Depuis le 15 décembre 2007