# \[Ada\]\[Adressage du port paralelle\]

**URL:** <https://www.debian-fr.org/t/ada-adressage-du-port-paralelle/89975>\
**Category:** Programmation\
**Created:** [Mai 15, 2024, 8:24 UTC](https://www.debian-fr.org/t/ada-adressage-du-port-paralelle/89975 "2024-05-15T08:24:59Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Mai 15, 2024, 8:24 UTC](https://www.debian-fr.org/t/ada-adressage-du-port-paralelle/89975/1 "2024-05-15T08:24:59Z")

</div>

Bonjour,

J’ai longtemps eu à l’abandon un projet de pilotage d’afficheur LCD parce que je me suis eurté à l’initialisation de mon type de donnée avec une valeur qui sensiblement est la bonne mais l’expression litérale n’est pas accepter.

J’ai donc récemment, par besoin peut-être, rpris le projet et ai découvert l’expression permettant de décrire le type correctement.  
Ici, le code donné est celui que j’ai trouvé à la lecture de Grady Booch dans Ingenierie du Logiciel avec Ada.

Déclaration du type de donnée :

```auto
 type Io_Port is
      record
         Data : Integer range 0..255;
         Busy : Boolean;
         Interrupt_Validity : Boolean;
      end record;
```

```auto
 Mot : constant := 1*8;

   for Io_Port use
      record at mod 2;
      Data at 0*Mot range 0..7;
      Busy at 1*Mot range 3..3;
      Interrupt_Validity at 1*Mot range 7..7;
      end record;
```

Déclaration des variables :

```auto
 LPT1_Data : Io_Port;
   LPT1_Ctrl : Io_Port;
   for LPT1_Data use at 16#378#;
   for LPT1_Ctrl use at 16#37A#;
```

Alors dans cette déclaration le code convenant sur mon système GNU/Linux est :

```auto
 LPT1_Data : Io_Port;
   LPT1_Ctrl : Io_Port;
   for LPT1_Data use at System'To_address(16#378#);
   for LPT1_Ctrl use at System'To_address(16#37A#);
```

Ce code nécessite la déclaration de la clause with System;

J’en suis resté là avec ce code qui devrait à présent me permettre d’écrire sur le port lpt1 de mon Comptatible IBM PC mais ne sachant pas du tout comment m’y prendre, je viens ici pour demander de l’aide.

S’il vous plait, merci.

Merci pour votre lecture.

---

<div class="post-metadata">

**Author:** ![vbreton](https://www.debian-fr.org/user_avatar/www.debian-fr.org/vbreton/32/11400_2.png) [@vbreton](https://www.debian-fr.org/u/vbreton)\
**Post date:** [Mai 17, 2024, 12:18 UTC](https://www.debian-fr.org/t/ada-adressage-du-port-paralelle/89975/2 "2024-05-17T00:18:41Z")

</div>

Bonsoir @anon2873143  
En considérant que l’afficheur soit relié au port parallèle /dev/lp0:

```
with Ada.Text_IO; use Ada.Text_IO;

procedure Print_Line is
   Printer : File_Type;
begin
   begin
      Open (Printer, Mode => Out_File, Name => "/dev/lp0");
   exception
      when others =>
         Put_Line ("Unable to open printer.");
         return;
   end;

   Set_Output (Printer);
   Put_Line ("Hello World!");
   Close (Printer);
end Print_Line;

```

D’après [https://rosettagit.org/drafts/hello-world-line-printer/](https://rosettagit.org/drafts/hello-world-line-printer/)

---

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Mai 17, 2024, 12:11 UTC](https://www.debian-fr.org/t/ada-adressage-du-port-paralelle/89975/3 "2024-05-17T12:11:36Z")

</div>

Bonjour vbreton !

Si ça fonctionne, c’est excellent de simplicité.

Comme j’ai plu /dev/lp0, est il possible de donner ici le nom de fichier avec les détails pour une création éventuel du fichier qui remplace /dev/lp0 ?

---

<div class="post-metadata">

**Author:** ![vbreton](https://www.debian-fr.org/user_avatar/www.debian-fr.org/vbreton/32/11400_2.png) [@vbreton](https://www.debian-fr.org/u/vbreton)\
**Post date:** [Mai 17, 2024, 10:25 UTC](https://www.debian-fr.org/t/ada-adressage-du-port-paralelle/89975/4 "2024-05-17T22:25:54Z")

</div>

Bonsoir @anon2873143 ,

Un `mknod /dev/lp0 b 6 0` suivi d’un `chmod 660 /dev/lp0` devrait faire l’affaire.  
Le c indique un fonctionnement en mode caractère par caractère (non bufferisé). Pour le mode bufferisé, c’est la lettre b. Le 6 indique le numéro majeur du périphérique (6 pour le port lp) et 0 le numéro mineur du périphérique.

Il y a longtemps que je n’ai pas travaillé sur le port //. De mémoire la lettre b (bufferisé) correspondrait au mode latch des sorties, bien connu des électroniciens (données non fugitives sur le port parallèle ce qui veut dire que tant qu’une nouvelle écriture n’est pas effectuée sur le port // ses sorties sont maintenues. Le mode b ne présenterait ses datas que quelques micro ou milli secondes sur le port // et n’est donc pas approprié par exemple pour commander directement des LED .

---

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Mai 18, 2024, 5:37 UTC](https://www.debian-fr.org/t/ada-adressage-du-port-paralelle/89975/5 "2024-05-18T05:37:01Z")

</div>

Merci Vincent.
