Éditeur Windows de programmes pour calculatrices SwissMicros DM42, HP-42S, les émulateurs Free42 / Plus42, et pour la C47 / R47.
- Édition RPN avec coloration (fonctions, nombres, chaînes, tests, commentaires), numéros de ligne, repères, rechercher / remplacer, impression, thème clair ou sombre.
- Encodage / décodage des fichiers
.rawde la DM42, avec un visualiseur octet par octet (ligne, code RPN, commentaire, octets, erreur). - Logigramme à la manière des feuilles de programmation HP-41C : losanges pour les tests (O / N), blocs d'instructions, appels
XEQà double barre, entrées / sorties en parallélogramme, colonne de commentaires. Mis à jour pendant la saisie. Il dessine aussi le code C47 (Ctrl+L sur un onglet C47) : structuresIF/ELSE/ENDIF,DO/WHILE/ENDDO,REPEAT/UNTIL,FOR/NEXT(test en bas ou en tête de boucle), tests C47, sauts relatifsSKIP/BACK,FINISH. - Simulateur sous l'éditeur RPN (F5, voir Simulateur du programme) : simulateur DM42 avec pas à pas et points d'arrêt sur un onglet DM42, vrai simulateur C47 avec l'écran de la calculatrice sur un onglet C47.
- Conversion HP-41C → DM42 de la syntaxe (registres de pile, arguments à deux chiffres, etc.).
- Python → RPN (Py42) : écrire le programme en Python, obtenir le listing HP-42S et le simuler avant de l'envoyer.
Avec la cible C47 / R47 (liste « Cible » de la fenêtre Python), le programme est produit pour la C47 :
structures
IF/DO/FORᵀᴼᴾau lieu desGTO, variables locales dans les registresLocR(récursivité permise), noms HP-42S convertis (42α,42ARCL,42AVIEW,42KEY…). F5 l'exécute dans le simulateur C47, F6 l'ouvre dans un onglet C47, F8 l'enregistre en .p47, F7 l'envoie à l'émulateur C47. Exemples C47 / R47 → Programmes de la distribution C47 : douze programmes du dossierPROGRAMSdu simulateur (BMI, NQueens, PAYCALC, FreeF, Bairsto, STRUCT…) réécrits en Python. - RPN C47 : des onglets C47 dans le même éditeur (Fichier > Nouveau programme C47, ou ouverture d'un
.p47/.p47u) ; coloration, erreurs signalées pendant la saisie, liste des instructions par domaine (aussi dans Aide > Instructions C47), « Encoder et enregistrer en .p47 » et visualisation des octets (voir C47/README.md). - Aide à la saisie : infobulle sur le mot survolé (instruction, registre
R07, indicateurF01, nombre, remarque…), autocomplétion dès deux lettres avec une courte description, et recherche par nom ou description au-dessus de la liste des fonctions. Pour la C47 : barre de symboles (→ ⇄ ≤ ≥ ≠ × ÷ ² ˣ √ π…), remplacement pendant la frappe (->→→,<>→⇄,<=→≤,^2→², sauf dans les textes et commentaires), et écritures au clavier acceptées (x<>y,abs,STO*). - Envoi vers l'émulateur Free42 / Plus42 (F7), dont le chemin se règle dans les paramètres.
- Aide intégrée : liste des fonctions HP-42S et documentation PDF dans une visionneuse WebView2.
| Logigramme | Python → RPN |
|---|---|
![]() |
![]() |
Fichier → Simulateur du programme (Ctrl+F5) affiche ou masque, sous l'éditeur, le même simulateur que la fenêtre Python ;
F5 (Fichier → Lancer la simulation) l'ouvre et lance le programme. On choisit le label global à lancer, les valeurs
mises sur la pile (la dernière va dans X) et les réponses du champ INPUT, dans l'ordre : INPUT / PROMPT,
une valeur par variable d'un VARMENU, le numéro de touche d'un MENU (1 à 6, 0 = EXIT), le code de touche de
GETKEY et KEY?. En changeant d'onglet, le simulateur reprend les labels et le type (DM42 ou C47) du nouvel onglet.
Le listing (numéros de pas, en-tête { … } et commentaires ignorés) est exécuté par le simulateur de Py42, en double
précision (16 chiffres, au lieu de 34 sur la DM42). Il connaît, en plus du code produit par Py42 :
- la pile (
ENTER,R↑,X<>Y…), les registres numérotés (RCL 05,STO+ 12),ISG/DSE,GTO "NOM",XEQlocal ; - l'adressage indirect
IND(RCL IND 05,STO IND "N",GTO IND 00,XEQ IND "F",ISG IND 00,FIX IND ST X…) et les registres de pileST XàST T(RCL ST Y,STO+ ST Z,X<> ST T,VIEW ST Y) ; - le solveur
PGMSLV/SOLVE: estimations dans la variable et dans X, comme sur la calculatrice ; X = racine, Y = estimation précédente, Z = f(racine), T = code (0 racine, 1 changement de signe, 2 extremum, 3 mauvaises estimations, 4 constante) ; sans racine, la ligne suivante est sautée ; - l'intégration
PGMINT/INTEGdeLLIMàULIMavec la précisionACC: X = intégrale, Y = incertitude.
Une erreur place le curseur sur sa ligne. ST L (LASTX) n'est pas simulé.
Pas à pas (touches de Visual Studio, aussi dans Fichier → Pas à pas et dans la barre du simulateur) :
| Touche | Action |
|---|---|
| F9 | Pose ou retire un point d'arrêt sur la ligne du curseur (pastille rouge dans la marge) ; Ctrl+Maj+F9 les efface tous |
| F5 | Lance le programme jusqu'au premier point d'arrêt ; pendant le pas à pas, continue jusqu'au suivant ou à la fin |
| F11 | Pas détaillé : instruction suivante, en entrant dans les XEQ et dans la fonction de SOLVE / INTEG |
| F10 | Pas principal : un XEQ, SOLVE ou INTEG est exécuté d'un coup |
| Maj+F11 | Sortir : jusqu'au retour (RTN) du sous-programme en cours |
| Ctrl+F10 | Pas précédent : revient d'une instruction |
| Maj+F5 | Quitte le pas à pas |
La prochaine instruction est surlignée dans l'éditeur, avec une flèche dans la marge ; le simulateur montre la pile T Z Y X, ALPHA, les variables, les registres, les messages déjà affichés et le niveau d'appel. Le programme est exécuté une fois en enregistrant l'état avant chaque instruction : les saisies étant données à l'avance, c'est la même chose qu'une exécution instruction par instruction, et l'on peut revenir en arrière. L'enregistrement s'arrête après 200 000 pas ; un programme modifié est relancé depuis le début. Les matrices y sont montrées par leurs dimensions.
Le programme est encodé puis exécuté par le vrai simulateur C47, sans fenêtre (c47.exe --headless), sur 34 chiffres.
Le simulateur montre les messages affichés, la pile de 8 niveaux (exposants lisibles : TEXTE², ×10⁻³) et
l'écran de la calculatrice (un clic l'agrandit). Pendant la simulation, la fenêtre reste utilisable ; F5, Maj+F5 ou le
bouton Arrêter l'interrompent, et elle s'arrête d'elle-même après 30 s.
Le programme enregistré ou envoyé n'est pas modifié : c'est une copie qui est simulée, préparée pour ce simulateur sans
clavier (C47/C47.Core/SimCopy.cs) :
- les messages de
42AVIEW,42PRMPTetVIEWsont gardés dans un journal, relu à la fin ; - un
MENUsuivi deSTOPdemande le numéro de touche, unVARMENUune valeur par variable ; - l'attente d'une touche (
KEY? r,GETKEY) capture l'écran dessiné par le programme, puis lit le code de touche dans le champ INPUT ; sans réponse, le programme s'arrête là au lieu d'attendre sans fin (MOON47) ; - une
PAUSEjuste avant la fin (PAUSE 99, « regardez l'écran ») capture l'écran (GRFNTS) ; les autresPAUSEsont retirées.
Le pas à pas n'existe que pour la DM42 : le simulateur C47 s'exécute d'un bloc. Seule la première capture d'écran est gardée.
Prérequis : Windows, SDK .NET 10, runtime WebView2 (fourni avec Windows 11).
Le projet s'appuie sur deux dépôts voisins, attendus dans le même dossier parent :
dm42_editor/
├── dm42editor/ ← ce dépôt
├── Py42/ ← compilateur Python → RPN (Py42.Core)
└── dm42dll/ ← encodeur / décodeur .raw (.NET Framework 4.7.2)
-
Cloner les trois dépôts côte à côte (
Py42avec une majuscule, nom attendu par le projet) :mkdir dm42_editor && cd dm42_editor git clone https://github.com/philgerm57/DM42Editor.git dm42editor git clone https://github.com/philgerm57/py42.git Py42 git clone https://github.com/philgerm57/dm42dll.git dm42dll
-
Compiler d'abord dm42dll : dm42editor utilise
..\dm42dll\bin\Debug\dm42dll.dll. Il faut le pack de développement .NET Framework 4.7.2 (ou Visual Studio avec la charge de travail .NET desktop).dotnet build dm42dll/dm42dll.csproj -c Debug
-
Compiler l'éditeur (Py42.Core est compilé au passage) :
dotnet build dm42editor/dm42editor.slnx -c Release
Les manuels PDF (DM42, HP-42S) ne sont pas fournis : téléchargez-les sur les sites de SwissMicros et de HP,
puis placez-les dans dm42editor/data/ (dm42_user_manual.pdf, 42s manuel utilisation.pdf, Quick Reference Guide.pdf).
Un profil de publication en fichier unique est fourni : dotnet publish -p:PublishProfile=FolderProfile.
L'interface existe en français et en anglais : Fichier → Paramètres → Langue (par défaut, la langue de Windows). Le changement s'applique au démarrage suivant. Les traductions sont dans resources/lang_en.txt, sous la forme français TAB anglais.
GNU GPLv3. L'encodeur / décodeur dm42dll est une adaptation en C# du code TypeScript de J. Heilingbrunner
(vscode-hp42s-Free42), sous licence MIT (voir LICENCE.txt de dm42dll).
HP-42S est une marque de HP Inc. ; DM42 est un produit SwissMicros. Ce projet n'est affilié à aucune de ces sociétés.


