HP-IL: communication entre 2 pockets HP
Modérateur : Politburo
- Marge
- Fonctionne à 14400 bauds
- Messages : 5776
- Inscription : 01 oct. 2008 14:39
- Localisation : En bas, tout au fond à gauche.
Re: HP-IL: communication entre 2 pockets HP
Trop fort !
3 hommes, 3 demis, un 3a... Magnéto, Serge !
Mes articles dans la Gazette...
♣ ♦ « Boris », c'était juste Maurice enrhumé. ♥ ♠
Mes articles dans la Gazette...
♣ ♦ « Boris », c'était juste Maurice enrhumé. ♥ ♠
- pcscote
- Fonctionne à 300 bauds
- Messages : 109
- Inscription : 11 juil. 2018 01:06
- Localisation : Québec/Canada
Re: HP-IL: communication entre 2 pockets HP
Impressionnant ! Félicitation Danny !
Re: HP-IL: communication entre 2 pockets HP
Je suis bluffé !
Au fait, combien peut on chaîner d'appareils dans une boucle HP-IL ?
Existe t il une limite ?
Au fait, combien peut on chaîner d'appareils dans une boucle HP-IL ?
Existe t il une limite ?
Un jour, mon père m'a offert une TI 57...
- pcscote
- Fonctionne à 300 bauds
- Messages : 109
- Inscription : 11 juil. 2018 01:06
- Localisation : Québec/Canada
Re: HP-IL: communication entre 2 pockets HP
Bien sur.

Le nombre maximal de périphériques en mode d'adressage normal est de 31 et de 960 en mode d'adressage étendu.
Pages 5 et 6 du livre "The HP-IL System".
L'adresse 0 est réservé pour le contrôleur et
l'adresse 31 est utilisé pour indiquer que l'appareil n'a pas encore eu son adresse dans la boucle.
Sylvain
Dernière édition par pcscote le 24 févr. 2022 21:38, édité 1 fois.
Re: HP-IL: communication entre 2 pockets HP
Parfait, merci Sylvain
Plus que 29 à trouver...
Merci pour le lien, je ne connaissais pas cet ouvrage
Plus que 29 à trouver...

Merci pour le lien, je ne connaissais pas cet ouvrage
Un jour, mon père m'a offert une TI 57...
- pcscote
- Fonctionne à 300 bauds
- Messages : 109
- Inscription : 11 juil. 2018 01:06
- Localisation : Québec/Canada
Re: HP-IL: communication entre 2 pockets HP
De rien et en voici d'autre ...
- Autour de la Boucle
- The HP-IL System Book : An Introductory Guide to the Hewlett-Packard Interface Loop
- 82165-90002 82165A HPIL/GPIO Interface Owner's Manual
- 82165-90012 82165A HPIL/GPIO Interface & 82166A HPIL Converter Manual Supplement
- 82166-90002 HPIL Converter Technical Manual
- 82166-90016 The HP-IL Integrated Circuit Users Manual
- 82166-90017 The HP-IL Interface Specification
- 82166-90020 The HP-IL Interface Kit Technical Guide
- 82166-90024 Firmware Design for HP-IL Devices Application Note
J'ai plus de 30 périphériques HP-IL dans ma collection.
Il faudrait un jour que je configure une boucle à pleine capacité.
Malheureusement, la vitesse de communication reliée à cette configuration risque d'être affreusement lente.
Sylvain
Re: HP-IL: communication entre 2 pockets HP
Ah oui, ça serait intéressant de voir combien de temps un message met à faire un tour de la boucle 

♡ Apple, Atari, Canon, Casio, Электро́ника, HP, Psion, Sharp, Tandy... même TI.
Re: HP-IL: communication entre 2 pockets HP
On pourrait se réunir aussi avec 31 périphérique et/ou pockets et essayer de battre un record de boucle. Si chacun en amène deux ou trois, ça pourrait le faire. Reste le problème des câbles. J'ai un vu un tuto quelque part qui expliquait comment en refaire avec plan pour imprimante 3D des connecteurs. Il faut que je le retrouve
Un jour, mon père m'a offert une TI 57...
- pcscote
- Fonctionne à 300 bauds
- Messages : 109
- Inscription : 11 juil. 2018 01:06
- Localisation : Québec/Canada
Re: HP-IL: communication entre 2 pockets HP
Bonne idée, mais un peu loin pour moi, je réside au Québec (Canada).

Pas de problème pour bâtir la configuration chez moi, j'ai plus de 100 câbles HP-IL.
How to Make Your Own HP-IL Cables
Sylvain
- pcscote
- Fonctionne à 300 bauds
- Messages : 109
- Inscription : 11 juil. 2018 01:06
- Localisation : Québec/Canada
Re: HP-IL: communication entre 2 pockets HP
Quelques dessins HP-IL que j'ai mis en ligne sur le HP Museum ...
HP-IL standard

HP-IL avec PIL-Box et émulateur HP-IL

HP-IL avec HP-IB

HP-IL standard

HP-IL avec PIL-Box et émulateur HP-IL

HP-IL avec HP-IB

Re: HP-IL: communication entre 2 pockets HP
J'ai enfin fait une version pour HP-41 : ici le HP-41 reprend le rôle du controller dans la boucle (il ne peut pas être device de toute façon), et le HP-71B (qui est donc device) utilise le même programme que celui de la page précédente (que je détaille ci-dessous).
On note sur la vidéo que ça va beaucoup moins vite qu'entre 2 HP-71B
Et donc le code sur les 2 HP-71B (j'ai juste mis les n°s de lignes pour celles vers lesquelles on pointe avec un GOTO) :
et le code sur le HP-41 (controller) : (R01 = altitude max, R02 = temps de vol)
On note sur la vidéo que ça va beaucoup moins vite qu'entre 2 HP-71B

Et donc le code sur les 2 HP-71B (j'ai juste mis les n°s de lignes pour celles vers lesquelles on pointe avec un GOTO) :
Code : Tout sélectionner
Calcul de la suite de Syracuse partagée entre deux HP-71B
---------------------------------------------------------
// Sur le HP-71B device ("SYRACUSD") :
N = 0 @ M = 0
INPUT "Debut ? :";V
30 OUTPUT LOOP;V ' envoie le nombre courant à l'autre HP-71B
IF V = 1 THEN N = 2 * N @ GOTO 90
ENTER :LOOP;V ' récupère le nombre suivant
PRINT V;
IF V = 1 THEN N = 2 * N + 1 @ GOTO 90
F = V / 2 @ F = F - INT(F)
IF (F = 0) THEN V = V / 2 @ BEEP 440,.05 ELSE V = 3 * V + 1 @ BEEP 1320,.05
N = N + 1
IF V > M THEN M = V
GOTO 30
90 PRINT "/ Flight time:"; N;
OUTPUT LOOP;M ' envoie l'altitude max à l'autre HP-71B
ENTER :LOOP;M ' récupère l'altitude max finale de l'autre HP-71B
PRINT "/ Max alt.:"; M
// Sur le HP-71B controller ("SYRACUSC") :
N = 0 @ M = 0
RESTORE IO @ CONTROL ON @ REMOTE
A = DEVADDR("HP71") ' récupère l'adresse du device (le 1er HP-71B trouvé sur la boucle)
PRINT "Waiting..."
30 ENTER :A;V ' récupère le nombre suivant
PRINT V;
IF V = 1 THEN N = 2 * N @ GOTO 90
F = V / 2 @ F = F - INT(F)
IF (F = 0) THEN V = V / 2 @ BEEP 440,.05 ELSE V = 3 * V + 1 @ BEEP 1320,.05
N = N + 1
IF V > M THEN M = V
OUTPUT :A;V ' envoie le nombre courant à l'autre HP-71B
IF V = 1 THEN N = 2 * N - 1 @ GOTO 90
GOTO 30
90 PRINT "/ Flight time:"; N;
ENTER :A;N ' récupère l'altitude max de l'autre HP-71B
IF N > M THEN M = N ' conserve l'altitude max de l'autre HP-71B si elle est + grande
OUTPUT :A;M ' envoie l'altitude max finale à l'autre HP-71B
PRINT "/ Max alt.:"; M
et le code sur le HP-41 (controller) : (R01 = altitude max, R02 = temps de vol)
Code : Tout sélectionner
AUTOIO ' nécessaire seulement à la 1ère exécution
1 SELECT ' nécessaire seulement à la 1ère exécution
REMOTE ' nécessaire seulement à la 1ère exécution
0
STO 01
STO 02
LBL 00
CLA
XEQ "IND" ' récupère le nombre suivant depuis la boucle HP-IL
ARCL ST X
AVIEW ' affiche le nombre courant (avec une pause)
1
X!=Y?
GTO 01
RCL 02
2
ST* 02 ' N = N * 2
GTO 05 ' si altitude = 1, c'est fini
LBL 01
RDN
ENTER
ENTER
2
MOD
X=0?
GTO 02
RDN ' cas V = 3 * V + 1
3
*
1
+
TONE 6
GTO 03
LBL 02
RDN ' cas V = V / 2
2
/
TONE 3
LBL 03
ENTER
ENTER
RCL 01 ' vérifie si nouvelle altitude max
X>Y?
GTO 04
RDN
STO 01
LBL 04
1
ST+ 02 ' incrémente le temps de vol
RDN
RDN
CLA
ARCL ST X
XEQ "OUTA" ' envoie le nombre courant au HP-71B
1
X!=Y?
GTO 00 ' si altitude <> 1, on continue
RCL 02
2
*
1
-
STO 02 ' N = N * 2 - 1
LBL 05 ' vol terminé
"FL. TIME: "
ARCL 02
AVIEW
RCL 01
XEQ "IND" ' récupère l'altitude max venant du HP-71B
X>Y?
STO 01 ' conserve l'altitude max du HP-71B si elle est + grande
CLA
ARCL 01
XEQ "OUTA" ' envoie l'altitude max finale au HP-71B
"MAX. ALT: "
ARCL 01
AVIEW
♡ Apple, Atari, Canon, Casio, Электро́ника, HP, Psion, Sharp, Tandy... même TI.
- Hobiecat
- Fonctionne à 9600 bauds
- Messages : 3521
- Inscription : 06 sept. 2011 14:57
- Localisation : Normandie
Re: HP-IL: communication entre 2 pockets HP
Sympa ! Merci Danny pour ces essais !
Re: HP-IL: communication entre 2 pockets HP
Syracuse HP-IL is back !
Cette fois entre un HP-75C (qui est controller, comme le HP-41 il ne peut pas être device) et un HP-71B :

La vidéo est ici.
Pour une prochaine fois, j'essaierai de trouver un truc sympa à faire à 3 (je parle de pockets HP dans une boucle HP-IL bien sûr
).

Cette fois entre un HP-75C (qui est controller, comme le HP-41 il ne peut pas être device) et un HP-71B :

La vidéo est ici.
Pour une prochaine fois, j'essaierai de trouver un truc sympa à faire à 3 (je parle de pockets HP dans une boucle HP-IL bien sûr

♡ Apple, Atari, Canon, Casio, Электро́ника, HP, Psion, Sharp, Tandy... même TI.
- Hobiecat
- Fonctionne à 9600 bauds
- Messages : 3521
- Inscription : 06 sept. 2011 14:57
- Localisation : Normandie
Re: HP-IL: communication entre 2 pockets HP
Merci Danny, c'est toujours amusant de faire fonctionner la boucle HP-IL !
- pcscote
- Fonctionne à 300 bauds
- Messages : 109
- Inscription : 11 juil. 2018 01:06
- Localisation : Québec/Canada
Re: HP-IL: communication entre 2 pockets HP
Lors de ma préparation de la présentation sur la communication HP-IL donnée à Allschwil en novembre 2022,
j'ai bâti une boucle avec huit HP-71B effectuant une communication asynchrone.

Allschwil 2022 - Advanced HP-IL Communication
Advanced communication between HP-71B handheld computers over Hewlett-Packard Interface Loop. Programme 71B esclave qui roule sur toute les machines sauf le contrôleur.
Code : Tout sélectionner
5 ! BC3D Bidirectional comm. prog. 3, device side
10 DELAY 0,0 Set display as fast as possible
@ RANDOMIZE Random number generator
@ A=MYADDR Save my loop address
@ CFLAG 0,1 Flag 0 (waiting for DDL 0) & flag 1 (waiting)
15 N=READINTR Clear interrupt
@ ON INTR GOSUB 50 Set interrupt handler
@ ENABLE INTR 1 Enable interrupt on device dependent message
20 FOR V=1 TO 4 Loop to set or clear flags 1 to 4
25 DISP "D="&STR$(A)&" S="&STR$(V) Ex.: "D=3 S=2" (Device & Status)
30 SFLAG 0 Activate wait for DDL 0 message flag
@ REQUEST 64+V Raise SRQ bit while passing flag value
35 IF FLAG(0)=1 THEN DDL 0 received ?
SLEEP No: go to sleep
@ GOTO 35 Infinite DDL 0 wait loop
40 SFLAG 1 Activate wait flag
@ WAIT IP(RND*10+1)/10 Wait 100 ms to 1 sec, asynchronous simulation
@ CFLAG 1 Deactivate wait flag
45 NEXT V EndLoop
@ GOTO 20 Infinite loop
50 N=READINTR Enter interrupt handler, clear interrupt
@ C=READDDC [00..31: DDT 0..31] & [32..63: DDL 0..31]
55 IF C=32 THEN If DDL 0 received then
CFLAG 0 Clear DDL 0 wait flag
@ REQUEST V Clear SRQ bit
60 ENABLE INTR 1 Re-enable device dependent interrupt
@ RETURN Leave interrupt handler
Code : Tout sélectionner
5 ! BC5C Bidirectional comm. prog. 5, controller side
10 OPTION BASE 0 Make array index start at zero
@ DELAY 0,0 Set display as fast as possible
@ DIM D$[60] Space for 8 devices (6 chr/device + some room)
15 CONTROL ON Reconfigure loop
@ N=NLOOP() Get the number of devices in the loop
20 DESTROY A1, A2 Delete devices address & devices status arrays
@ SHORT A1(N) Create an address array for all devices
@ A1(0)=0 Initialize 71B found counter
25 FOR I=1 TO N Scan loop for 71Bs
30 IF DEVAID(I)=3 THEN Is device a 71B ?
A1(0)=A1(0)+1 Yes, increment 71B found counter
@ A1(A1(0))=I Save 71b address in devices address array
35 NEXT I EndLoop
40 IF A1(0)=0 THEN Quit if no 71B has been found
DISP "No 71B found" Display message
@ DESTROY A1, A2 Exit: delete arrays
@ END End of execution ...
45 SHORT A1(A1(0)),A2(A1(0)) Resize/create arrays to match 71Bs found
@ S=0
50 GOSUB 85 Display what we have
55 SEND CMD 21 UNL Parallel poll unconfigure (PPU, 15h, 21d)
@ FOR I=1 TO A1(0) For all 71Bs
@ SEND LISTEN A1(I) CMD 128+8+I-1 UNL Enable parallel polling
@ NEXT I PPE 1:7..0 → 128 (PPE) + 8 (1:) + I-1 (7..0)
60 S=PPOLL() Poll the loop to see If we have a service request
@ IF S#0 THEN Do we have a service request ?
GOSUB 70 Yes: call SRQ handler
65 WAIT .15 Slowing polling loop to see multiple SRQs
@ GOTO 60 Infinite loop polling
70 FOR I=1 TO A1(0) Enter SRQ handler, for each 71B found
75 IF BIT(S,I-1)=1 THEN Is the SRQ bit set for this device ?
A2(I)=SPOLL(A1(I)) Get 71B status and save it in status array
@ SEND UNT UNL LISTEN A1(I) DDL 0 UNL Yes, notify device → SRQ handled
80 NEXT I EndLoop
85 D$=STR$(A1(0))&":"&DTH$(S)[5,5] 71B found & SRQ received
90 FOR I=A1(0) TO 1 STEP -1 In reversed order to match PP bits pattern
@ D$=D$&CHR$(92)&STR$(A1(I))&":"&DTH$(A2(I))[4,5] Add 71B address then add 71B status
@ NEXT I EndLoop
95 DISP D$ Ex.: 3:5\4:41\3:00\2:43
@ RETURN Leave SRQ handler or end sub for line 50 and 60