Pico : Emulateur de langage PIOasm (RP2040 et RP2350)

Cet espace concerne les composants électroniques, les techniques de réalisation, le soudage, la mesure et ses divers instruments, les programmateurs ou encore votre laboratoire. Recueille également les éventuelles ventes, achat, dons ou recherches.

Modérateurs : Papy.G, fneck, Carl

Avatar de l’utilisateur
Bricox
Messages : 1691
Inscription : 25 janv. 2024 10:28
Localisation : Toul

Pico : Emulateur de langage PIOasm (RP2040 et RP2350)

Message par Bricox »

Nous avons déjà introduit cette notion d'émulateur PIOasm sans vraiment aboutir à un outil pratique et abordable.

Voici un rappel des posts concernés :
  1. Un émulateur en langage Java
  2. Un 1er émulateur en langage Python
  3. Table de référence, des 9 instructions ASM PIO
  4. Les instructions "dynamiques"
  5. Un exemple de conception PIOasm, pour le Sharp MZ-700
Quelles ont été les critères de sélection de cet Emulateur :
  1. Le projet doit être open source.
  2. Le langage de conception de l'émulateur doit être populaire.
  3. Les membres du forum (Hlide, 6502man, ZamZam, x, y, z, et moi) doivent pouvoir le faire évoluer.
  4. Toutes les informations techniques doivent être visibles en permanence.
  5. À chaque pas du programme, la valeur ayant subi un changement doit être colorée.
  6. Dans l'idéal, doit afficher, dans des graphiques temporels, l'évolution des 32 GPIOs.

Hier soir, ZamZam a trouvé ce projet, écrit en Python : Some_RPI-Pico_stuff/tree/main
C'est un grand projet multimodules, dont le module émulateur : State_machine_emulator
Voici l'interface GUI :
emulator_screenshot_annotations_256.png
emulator_screenshot_annotations_256.png (111.47 Kio) Consulté 550 fois
À chaque pas du programme, la valeur ayant subi un changement n'était pas assez colorée.
Pas de graphiques ... :roll:

Ce matin, j'ai déroulé la bobine dans les chemins des Forks pour aboutir vers ce projet tant convoité.
Ce fork a amélioré exactement ce qui manquait : RPI-Pico_PIO_statemachine_emulator
Voici l'interface GUI améliorée, les groupes de quartets sont une super idée :
emulator_screenshot_annotations_extended256.png
emulator_screenshot_annotations_extended256.png (96.04 Kio) Consulté 550 fois

Fonctionnalités :
  • La mesures de durée différentielle (en cycle) est possible à partir de curseurs.
  • 32 voies de GPIOs peuvent être activées, seules 4 sont visibles par action de l'ascenseur de droite.
  • Les valeurs de mots peuvent prendre 2 formats : Decimal ou Hexadécimal, par la case à cocher HEX.
Limitations :
  • Il utilise uniquement des instructions C non bloquantes pour mettre des données dans le TxFIFO et obtenir des données du RxFIFO,
  • Pas d'instruction "dynamique" : OUT exec et MOV exec  ne sont pas implémentés,
  • Pas de mode 8 FIFO, en sorties : FIFO joining.
  • origin n'est pas utilisé : tout le code PIO commence à l'emplacement mémoire 0,
  • Il n'utilise (la plupart du temps) pas les registres (section 3.7 de la fiche technique RP2040).
Il faut évidemment installer Python et son module Matplotlib : pip install matplotlib
Rappel du générateur de code ASM , en ligne : pioasm
Dernière modification par Bricox le 08 févr. 2025 09:12, modifié 4 fois.
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
Bricox
Messages : 1691
Inscription : 25 janv. 2024 10:28
Localisation : Toul

Re: Pico : Emulateur de langage PIOasm (RP2040 et RP2350)

Message par Bricox »

Les contributeurs du projet :

Commits_Some_RPI-Pico_stuff-main_256.png
Commits_Some_RPI-Pico_stuff-main_256.png (34.39 Kio) Consulté 535 fois
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
Bricox
Messages : 1691
Inscription : 25 janv. 2024 10:28
Localisation : Toul

Re: Pico : Emulateur de langage PIOasm (RP2040 et RP2350)

Message par Bricox »

Le lancement de l'émulateur PIOasm, par défaut, est en ligne de commande ... :o
Il suffit de choisir un dossier d'exemple, qui contient les 3 fichiers nécessaires au lancement :
  1. Le fichier source PIOasm, au format header, pas au format *.pio ... :roll: ... pio_program.pio.h
  2. Le fichier texte : c_program
  3. Le fichier texte : pin_program
Voici le lancement de l'émulateur, version avec graphique de ippei8jp, à partir de Windows.
Dans notre cas, le chemin du projet est sur le NAS de notre Freebox.

Le tuto :
  1. Connecter le chemin réseau du projet PIOasm vers une lettre de volume, pour nous, U:
    ConnNetworkReader.png
    ConnNetworkReader.png (9.73 Kio) Consulté 380 fois
    PathNetworkReader.png
    PathNetworkReader.png (17.41 Kio) Consulté 380 fois
    .
  2. Ouvrir Explorer et aller vers le dossier contenant main.py
    LaunchExplorer.png
    LaunchExplorer.png (39.99 Kio) Consulté 448 fois
    .
  3. Cliquer sur lanceEmul.bat, je vous donne mon Batch de lancement ... :)

    Code : Tout sélectionner

    @echo off
    setlocal
    set "psCommand="(new-object -COM 'Shell.Application')^
    .BrowseForFolder(0,'Please choose a folder.',0,'U:\').self.path""
    for /f "usebackq delims=" %%I in (`powershell %psCommand%`) do set "folder=%%I"
    setlocal enabledelayedexpansion
    ::echo You chose %folder%
    endlocal
    python U:\main.py %folder%
    ::pause
    
  4. La sélection du dossier racine d'exemples s'ouvre, choisir le sous-dossier :
    La racine, choisir le sous-dossier Le sous-dossier, choisir le dossier d'exemple
    rootFolder.png
    rootFolder.png (17.52 Kio) Consulté 444 fois
    subFolder.png
    subFolder.png (13.6 Kio) Consulté 443 fois

    .
  5. Cliquer sur OK, l'émulateur PIOasm s'ouvre avec l'exemple choisi ... :D
Dernière modification par Bricox le 08 févr. 2025 14:01, modifié 1 fois.
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
Bricox
Messages : 1691
Inscription : 25 janv. 2024 10:28
Localisation : Toul

Re: Pico : Emulateur de langage PIOasm (RP2040 et RP2350)

Message par Bricox »

Attention :
  1. L'émulateur est dans une fenêtre Windows de taille variable initialisée à : 1687 x 976.
    Si réduite, les différente frames ne s'adaptent pas.
    Il faut un écran Full HD, à minima ... :roll:
    .
  2. La plupart des commentaires du code source sont en japonais ... :roll:
    .
  3. Certains Widgets ne sont pas totalement visibles, contrairement à la capture d'écran que le développeur a fourni.
    emulPIO-bugDisplay.png
    emulPIO-bugDisplay.png (3.23 Kio) Consulté 314 fois
    .
  4. Les Widgets ne sont pas contigus, horizontalement : Les frames ne s'adaptent pas aux Whidgets, de type Listbox.
    Ceci est dû à : grid_propagate(0)
    .
  5. Il n'y a pas d'explications pour l'utilisation des curseurs graphiques.

Ma capture d'écran en 1740 x 1002 :
emulator_screenshot_annotations_extended128.png
emulator_screenshot_annotations_extended128.png (239.54 Kio) Consulté 313 fois

Je pense que le développeur japonais travaillait sur une configuration graphique non standard.
Dernière modification par Bricox le 08 févr. 2025 21:05, modifié 1 fois.
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
Bricox
Messages : 1691
Inscription : 25 janv. 2024 10:28
Localisation : Toul

Re: Pico : Emulateur de langage PIOasm (RP2040 et RP2350)

Message par Bricox »

J'ai modifier le code Python pour un affichage plus compact et complet, en 1608 x 1021 :

emulator_screenshot_annot256.png
emulator_screenshot_annot256.png (32.05 Kio) Consulté 294 fois
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
Bricox
Messages : 1691
Inscription : 25 janv. 2024 10:28
Localisation : Toul

Re: Pico : Emulateur de langage PIOasm (RP2040 et RP2350)

Message par Bricox »

5. Il n'y a pas d'explications pour l'utilisation des curseurs graphiques.
J'ai traduit les commentaires japonais :

Code : Tout sélectionner

# Ctrl+Gestion des clics
def ctrl_click_handler(self, event) :
    # print(f'ctrl_click_handler : {event.xdata=}')
    if event.xdata is not None :
        # dessiner le curseur A
        self.disp_cursor(int(event.xdata), kind=1)

# ==================================================
# Alt+Gestion des clics
def alt_click_handler(self, event) :
    print(f'alt_click_handler : {event.xdata=}')

# ==================================================
# Shift+Gestion des clics
def shift_click_handler(self, event) :
    # print(f'shift_click_handler : {event.xdata=}')
    if event.xdata is not None :
        # dessiner le curseur B
        self.disp_cursor(int(event.xdata), kind=2)
Pour déplacer les 2 curseurs A et B, il faut cliquer dessus puis faire un drag & drop :
  • Ctrl + clic gauche, pour le curseur A.
  • Shift + clic gauche, pour le curseur B.
L'émulateur devient utilisable pour les 1ers essais de codes personnels ... :D

De plus, je viens de trouver une étude d'émulation PIOasm d'un GateArray, sur nos vieilles machines, fort bien documentée.
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Répondre