Les modules de la HP-41C comme vous ne les avez jamais vu !

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Répondre
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1779
Inscription : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Les modules de la HP-41C comme vous ne les avez jamais vu !

Message par cgh » 24 août 2013 12:27

Et bien voila. J'ai profite d'un peu de temps libre pendant mes vacances pour mener a bien un projet qui me trottait dans la tete depuis plusieurs mois. J'ai mis aussi a profit certains ponts du mois de mai pour developper un assembleur immediat que j'ai integre dans mon emulateur nsimII. Puis, en fait, de l'assembleur immediat (1-passe) a l'assembleur standard (2-passes), il n'y a qu'...un pas ;-)
Oui mais avoir un assembleur c'est bien :geek: Oh oui ! Mais un sourceur c'est encore mieux :ugeek:
Profitant de toutes les possibilites offertes par nsimII qui "explose" completement la FAT (la table des instructions, ie, XTOA, ATOX, PRA, ...), j'ai enfin developpe mon sourceur. Integre dans nsimII, il recompose le code assembleur (labels, instructions,...) et produit ainsi un fichier source qui pourra etre reassemble par mon assembleur (et dans certains cas, c'est meme compatible avec A41 :-) )

On passe donc du fichier image binaire .ROM d'une page a un fichier texte .SRC !

Code : Tout sélectionner

image.ROM  -->sourceur nsimII (commande S)-->  texte.SRC --> assembleur 2-passes nsimII (command A) --> image.ROM
Le pire c'est que je viens de sourcer plusieurs images .ROM (HPILDEV, MLROM, PRINTER, XFUNCS) que j'ai pu reassembler a l'identique ! Pour moi qui souhaite me mettre a l'assembleur (on MCODE) sur cette extraordinaire machine, me voile pare :ugeek:

La version de nsimII-0.20.0 integrant ces 2 dernieres commandes est en cours de tests (encore 1 ou 2 nuits blanches ce week-end).

Et voici donc, une partie de l'HPILDEVU-1A source par nsimII:

Code : Tout sélectionner

*
* Local variables
*


*
* Sourced file
*

*
* Orphaned symbols
*

*
* Start of FAT
*

                .OPENFAT        24
                ; AUTOFAT: Found 21 FCNS. Reserved 2C bytes for FAT
                ; XROM  24,4294967295   
                ; XROM  24, 0   ---
                ; XROM  24, 1   AND
                ; XROM  24, 2   ASIZE?
                ; XROM  24, 3   A-XL
                ; XROM  24, 4   A-XR
                ; XROM  24, 5   A-XX
                ; XROM  24, 6   BININ
                ; XROM  24, 7   BINVIEW
                ; XROM  24, 8   BIT?
                ; XROM  24, 9   HEXIN
                ; XROM  24,10   HEXVIEW
                ; XROM  24,11   NOT
                ; XROM  24,12   OR
                ; XROM  24,13   OCTIN
                ; XROM  24,14   OCTVIEW
                ; XROM  24,15   ROMCHKX
                ; XROM  24,16   ROTXY
                ; XROM  24,17   XOR
                ; XROM  24,18   X-AL
                ; XROM  24,19   X-AR
                ; XROM  24,20   Y-AX
*
* End of FAT
*

                .ORG    002C

                NOP
                NOP

                .NAME   "---"    
                .ENTRY   0              ; XROM 24, 0    A6:00

        (x_HPILDEVU-1A_---)
                RTN

                .NAME   "HEXIN"  
                .ENTRY   9              ; XROM 24, 9    A6:09

        (x_HPILDEVU-1A_HEXIN)
                SF      9
                LDI     008
                JNC     (l_HPILDEVU-1A_904B)    ; 904B

                .NAME   "OCTIN"  
                .ENTRY  13              ; XROM 24,13    A6:0D

        (x_HPILDEVU-1A_OCTIN)
                LDI     00F
                JNC     (l_HPILDEVU-1A_904A)    ; 904A

                .NAME   "BININ"  
                .ENTRY   6              ; XROM 24, 6    A6:06

        (x_HPILDEVU-1A_BININ)
                LDI     002

        (l_HPILDEVU-1A_904A)
                CF      9

        (l_HPILDEVU-1A_904B)
                B<>C    X
                C=REGN  14      ; 'd'
                RCR     1
                ST=C
                CF      3
                ?FS     13
                JC      (l_HPILDEVU-1A_9054)    ; 9054
                ?FS     0

          .   .   .

                C=G
                REGN=C  8       ; 'P'
                RTN

                .NAME   "X-AR"   
                .ENTRY  19              ; XROM 24,19    A6:13

        (x_HPILDEVU-1A_X-AR)
                NCXQREL (l_HPILDEVU-1A_9464)    ; 9464
                NCGO    [APNDNW]        ; 2D14
                NOP
                NOP
                NOP
                NOP
                .NOPS   1754    ; NOPs 991A .. 9FF3

                .ORG    0FF4    ; Vectors table
                NOP             ; Pause Loop
                NOP             ; Main Running Loop
                NOP             ; Deep Sleep Wake Up With No Key Down
                NOP             ; Power Off
                NOP             ; I/O Service
                NOP             ; Deep Sleep Wake Up
                NOP             ; Cold Start

                .ROMID  BF-1A

                .CLOSEFAT

                .CHECKSUM       ; #327

                .END

*
* End of file
*
Un petit test sous nsimII:

Code : Tout sélectionner

> I HPILDEV   
MODULE 'HPILDEV' IN PAGE 8/0
FAT XROM 22 FCNS 62 ROM-ID 'PD-1B' CHECKSUM 287 (287) OK [COMPUTED 287]
MODULE 'HPILDEV' IN PAGE 9/0
FAT XROM 24 FCNS 21 ROM-ID 'BF-1A' CHECKSUM 327 (327) OK [COMPUTED 327]
> S 9 +n +autofat 
Sourcing page 9/0 module 'HPILDEV' to file "SRC/HPILDEVU-1A.SRC"
> Z DEVIL DEVL
Create a new RAM page 'DEVL' to 8/0
MODULE 'DEVIL' IN PAGE A/0
Empty FAT assumed
> Z DEVIL DEVU
Create a new RAM page 'DEVU' to 9/0
Wrote page A/0 name 'DEVL@A_0' to file "ROM/DEVL@A_0.ROM"
MODULE 'DEVIL' IN PAGE A/0
Empty FAT assumed
MODULE 'DEVIL' IN PAGE B/0
Empty FAT assumed
> A b HPILDEVU-1A
Reading source page B/0 module 'DEVIL' from file "SRC/HPILDEVU-1A.SRC"
MODULE 'DEVIL' IN PAGE B/0
FAT XROM 24 FCNS 21 ROM-ID 'BF-1A' CHECKSUM 188 (188) OK [COMPUTED 327]

            Assembler completed :-)
                 _END at  BFFB
                 CHECKSUM  327

MODULE 'DEVIL' IN PAGE B/0
FAT XROM 24 FCNS 21 ROM-ID 'BF-1A' CHECKSUM 327 (327) OK [COMPUTED 327]
COMPUTED CKSM 327
Comme on le voit, la checksum #327 est identique.

Bien sur le FOCAL est aussi decompile, mais je n'ai pas encore de "compilateur FOCAL"

Code : Tout sélectionner

                .UCODE
                .ORG    0036
                #04D    ; .END. AT +538 6250
                #260
                #1C8    ; 0001  LBL "PRPLOT"
                #000    
                #0F7    
                #000    
                #050    
                #052    
                #050    
                #04C    
                #04F    
                #054    
                #18C    ; 0002  AON
                #1F6    ; 0003  "NAME ?"
                #04E    
                #041    
                #04D    
                #045    
                #020    
                #03F    
                #18E    ; 0004  PROMPT
                #18B    ; 0005  AOFF
                #19A    ; 0006  ASTO 11
                #00B    
                #10C    ; 0007  LBL 11
                #1F7    ; 0008  "Y MIN ?"
                #059    
                #020    
                #04D    
                #049    
                #04E    
                #020    
                #03F    
                #18E    ; 0009  PROMPT
                #130    ; 0010  STO 00
                #1F7    ; 0011  "Y MAX ?"
                #059    
                #020    
                #04D    
                #041    
                #058    
                #020    
                #03F    
                #18E    ; 0012  PROMPT
                #131    ; 0013  STO 01
                #146    ; 0014  X<=Y?
                #1BC    ; 0015  GTO 11
                #018    
A bientot pour de nouvelles aventures ;-)
Dernière édition par cgh le 13 juin 2016 21:56, édité 1 fois.
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque

Avatar de l’utilisateur
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2693
Inscription : 06 sept. 2011 14:57
Localisation : Normandie / Antwerpen

Re: Les modules de la HP-41C comme vous ne les avez jamais v

Message par Hobiecat » 24 août 2013 13:11

Bravo Cgh !

Si je comprends bien, ton développement peut désassembler n'importe quel module et peut aussi permettre a l'inverse de créer un module avec une nouvelle application ? Tout cela couplé avec la PILBox et les modules programmables offre des possibilités "infinies" !!! 8O

cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1779
Inscription : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Les modules de la HP-41C comme vous ne les avez jamais v

Message par cgh » 24 août 2013 15:15

Oui, Hobiecat, c'est ca ! Mon but c'est de pouvoir reassembler des parties de differentes ROM ensemble.

La HP-41C possede une pletore de modules. Mais beaucoup de modules ont en fait des fonctions en commun. Cela permet a un module d'etre autonome et donc de ne pas dependre d'un autre (sauf pour ceux qui accedent a des peripheriques: HP-IL, imprimante...). C'est une bonne resolution.
Mais bon. Si on desire faire de la programmation avancee avec l'HP-IL, par exemple (mais il en est de meme avec les Maths, la programmation synthetique...), les 2 modules incontournables sont l'EXT-IO et l'HP-ILDEV. Ces 2 modules ont en commun les instructions de manipulation de caracteres dans le registre ALPHA (les memes en plus riches que celles du X-Funtions). Ces 2 modules necessitent 3 pages: 1 pour le EXT-IO, 2 pour le HP-ILDEV. C'est bete car une partie non negligeable du code est utilise par ces instructions; sans compter les numeros de XROMs qui peuvent se retrouver identiques. Bon, la 2eme page du HP-ILDEV contient ces instructions. On peut dire, je n'ai pas besoin de cette 2eme page, donc je ne la prends pas. Oui, mais dans cette deuxieme, se trouvent les instructions de changement de base et d'operations logiques: BINVIEW, BININ, AND... C'est bete car ces instructions sont bien utiles. Ce sont les memes que celles de l'ADVANTAGE, mais la, on insere un monstre de 3 pages. Quant a supprimer ces instructions de l'EXT-IO, ce n'est pas forcement tres facile, a moins que toutes ces fonctions soient regroupees au meme endroit, ce qui n'est pas forcement le cas.

Le but de mon sourceur est de fournir un source assembleur, avec une recomposition des symboles et des directives d'assemblage. A partir de plusieurs sources, par copier-coller successifs, on devrait etre capable de developper sa propre ROM avec que les instructions qui nous sont utiles, et surtout sans redondance multiple de la meme instruction.

Comme j'ai pousse le vice a developper une directive d'inclusion, on peut imaginer une "librairie" de sources pour chaque fonction. Un source de haut niveau ne se chargerait, quant a lui, que des inclusions et des directives de description generale 8)

Code : Tout sélectionner

* Ma ROM
*
.OPENFAT 14 * mon numero XROM

.ORG 082 * laissons de la place pour la FAT

.NAME "-ALPHA X"
* une petite entete pour que ce soit joli
.ENTRY 0
      rtn

.INCLUDE src/xtoa.src

.INCLUDE src/atox.src

.NAME "-BASE/LOGIC"
* un peu de l'ADVANTAGE
.ENTRY +
      rtn

.INCLUDE src/hexview.src
.INCLUDE src/hexin.src
.INCLUDE src/and.src
      . . . etc

.NAME "-MES FNS"
* ca c'est de moi
.ENTRY +

.INCLUDE src/mafonc1.src
      . . . etc

.CLOSEFAT
.CHECKSUM * comme ca ROMCHKX sera content ;-)
.END
* That'all
Grace au sourceur, il faut maintenant creer les differents fichiers src/xxxx.src. Mais c'est juste du decoupage. Il faudra faire aussi attention aux sous-programmes eventuels. Mais ma directive d'inclusion ne marche qu'une fois. Si A1 inclus B et A2 inclus B, ce sera A1 qui va effectuer l'inclusion reelle, A2 "reutilsant" le sous-programme. Apres ce sera le boulot de l'assembleur !

Bon, c'est encore a l'etat de project, et il y a beaucoup de boulot 8O Mais il y a une maxime que j'affectionne particulierement:
Certains voient le monde comme il est et disent pourquoi ?
D'autres revent le monde comme il pourrait etre et disent pourquoi pas ?
:geek: :-D
Dernière édition par cgh le 24 août 2013 15:35, édité 3 fois.
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque

Avatar de l’utilisateur
pir2
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3982
Inscription : 31 oct. 2006 16:08
Localisation : 67310 Westhoffen
Contact :

Re: Les modules de la HP-41C comme vous ne les avez jamais v

Message par pir2 » 24 août 2013 15:16

Whaou :!: 8) Génial, Bravo cgh :geek:
Image
Image

Avatar de l’utilisateur
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2693
Inscription : 06 sept. 2011 14:57
Localisation : Normandie / Antwerpen

Re: Les modules de la HP-41C comme vous ne les avez jamais v

Message par Hobiecat » 24 août 2013 15:26

Merci Cgh pour les explications : pouvoir se faire son propre module "custom", ce serait effectivement un grand pas pour les possesseurs de HP-41 !!!

cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1779
Inscription : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Les modules de la HP-41C comme vous ne les avez jamais v

Message par cgh » 24 août 2013 15:27

Il faudrait aussi que j'integre dans nsimII le petit utilitaire vasm2a41 que nous avions developpe avec zpalm :!:
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque

Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6343
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: Les modules de la HP-41C comme vous ne les avez jamais v

Message par gege » 24 août 2013 16:18

Superbe (je ne comprends pas tout),
ça ressemble à l'idée des linkers qui incluent seulement les routines appellées (ou demandées).
Si tu peux formaliser les dépendances entre fonctions, on n'aurait plus qu'à sélectionner les fonctions pour créer un module les regroupant...
G.E.

Avatar de l’utilisateur
Paul Tergeist
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2417
Inscription : 15 oct. 2007 15:50
Localisation : 3ème planète après le soleil

Re: Les modules de la HP-41C comme vous ne les avez jamais v

Message par Paul Tergeist » 25 août 2013 20:01

Ca m'a l'air assez fantastique ce que tu as créé là Cgh... Bravo !!!

Avatar de l’utilisateur
bernouilli92
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2459
Inscription : 21 nov. 2012 14:03
Localisation : Ile de France

Re: Les modules de la HP-41C comme vous ne les avez jamais v

Message par bernouilli92 » 25 août 2013 20:27

Effectivement, c'est génial comme idée.
Par contre comment remettre le module ainsi "fabriqué" dans le hp41 si on ne dispose pas d'un module de type clonix?
HP, Casio, Sharp, Psion, quelques TI et divers autres

Avatar de l’utilisateur
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2693
Inscription : 06 sept. 2011 14:57
Localisation : Normandie / Antwerpen

Re: Les modules de la HP-41C comme vous ne les avez jamais v

Message par Hobiecat » 25 août 2013 22:01

Ce n'est pas possible si on n'a pas de module récent programmable, sauf erreur...

cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1779
Inscription : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Les modules de la HP-41C comme vous ne les avez jamais v

Message par cgh » 26 août 2013 00:00

bernouilli92 a écrit :Effectivement, c'est génial comme idée.
Par contre comment remettre le module ainsi "fabriqué" dans le hp41 si on ne dispose pas d'un module de type clonix?
Hobiecat a écrit :Ce n'est pas possible si on n'a pas de module récent programmable, sauf erreur...
Oui. Effectivement. La programmation en MCODE sur HP-41C necessite des modules speciaux. Car la RAM dans laquelle sont stockes la pile, les registres R00..Rnnn et les programmes est en fait... un peripherique.
On a besoin d'un Clonix ou d'un NoVRAM/NoV* pour les plus accessibles aujourd'hui. Ces modules sont un plus absolu.
A l'epoque de la programmation MCODE (1985~1989), on trouvait des modules RAM-speciaux comme le fabuleux HEPAX. Mais aussi les RAMBOX de W&W dont une de 64-Ko (vous savez la mythique 41CY). Et tous les autres systemes a base d'EPPROM.
Recemment, le 41CL le permet bien evidemment aussi, mais il faut avoir une machine FullNut avec un chip ecran donne, sinon ce ne marche pas, et avant, le MLDL2000 de Meindert Kuipers.
Mais ici, je suis sur l'emulateur nsimII.
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque

cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1779
Inscription : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Les modules de la HP-41C comme vous ne les avez jamais v

Message par cgh » 28 août 2013 22:03

Pour ceux que ca interesse, la derniere version de nsimII (0.20.2) est disponible sur le site de Warren Furlow 8)
Cette version integre un assembleur immediat, un assembleur 2-passes, un assembleur "standalone" et le sourceur decrit dans ce fil.
C'est du code pour Unix/Linux. Il faut X11/ncurses/readline pour compiler.

N'hesitez pas a me faire vos retours :-D
Dernière édition par cgh le 31 août 2013 19:46, édité 1 fois.
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque

Avatar de l’utilisateur
Marge
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4029
Inscription : 01 oct. 2008 14:39
Localisation : En bas à gauche.

Re: Les modules de la HP-41C comme vous ne les avez jamais v

Message par Marge » 28 août 2013 22:20

Pour hyper-phraser gege :

"C'est sublime (je ne comprends presque rien)."

Chapeau bas, CGH.
3 hommes, 3 demis, un 3a... Magnéto, Serge !

aut nunquam tentes _________
_________________ aut perfice

cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1779
Inscription : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Les modules de la HP-41C comme vous ne les avez jamais v

Message par cgh » 30 août 2013 23:04

J'ai trouve une ROM tres rigolote que je ne connaissais pas du tout: ICODE avec sa documentation. A jouer un peu avec, c'est tres-tres puissant. A mi chemin entre la programmation synthetique et le MCODE. Pour les utilisateurs de Clonix et 41CL :geek:
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque

cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1779
Inscription : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Les modules de la HP-41C comme vous ne les avez jamais v

Message par cgh » 31 août 2013 19:45

cgh a écrit :Pour ceux que ca interesse, la derniere version de nsimII (0.20.1) est disponible sur le site de Warren Furlow 8)
Cette version integre un assembleur immediat, un assembleur 2-passes, un assembleur "standalone" et le sourceur decrit dans ce fil.
C'est du code pour Unix/Linux. Il faut X11/ncurses/readline pour compiler.

N'hesitez pas a me faire vos retours :-D
Une mise-a-jour a été effectuee pour nsimII-(0.20.2). J'ai decouvert sur une corruption mémoire avec le module ADVANTAGE et les autres modules bank-switches. C'était du a une optimisation dans la construction de la FAT; optimisation un peu rapide et mal testee.
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque

Répondre

Revenir vers « Tous les Pockets »