Cherche développeur pour assembleur HP-41

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

Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2929
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Cherche développeur pour assembleur HP-41

Message par zpalm »

Dans la catégorie projet inutile, en voici un sur lequel je travaille épisodiquement depuis quelques années: la reconstitution des fichiers sources du microcode de la HP-41.

A quoi ça sert? Ben à pas grand chose … avoir sous forme de texte de texte les fichiers VASM de la 41C facilite le développement de programmes M-Code, mais bon je crois qu’il n’y a que deux ou trois pékins concernés sur la planète :)

Je fais ça pour le fun .. si, si … mais aussi parce que la 41 est une machine de référence, une des rares pour lesquelles on a les sources de son logiciel.

Bon je vous la fait court : j’ai reconstitué les fichiers sources du module X-function et de la première des trois ROMs de la 41. J’ai aussi développé un script Perl pour transformer les fichiers VASM texte dans un format compatible avec SDK41, ce qui m’a permis de les assembler, linker et de recréer les fichiers ROMs correspondant identiques aux ROMs d’origine! Vous imaginez : pouvoir modifier et générer votre ROM custom !

Le problème que j’ai maintenant c’est que plus j’avance dans dans les fichiers VASM plus mon script Perl devient compliqué. J’aimerai disposer d’un assembleur HP41 compatible avec la chaîne SDK41 mais qui gère directement les fichiers VASM. J’ai pensé le faire moi même mais ça va encore me prendre des années … et comme il y a sur Sili des sorciers du soft je me suis dit que ça pouvait intéresser l’un d’entre vous.

Voila en exemple le premier des douze fichiers VASM HP41 : CN0B.TXT
Le but c’est de faire un assembleur qui génère un fichier OBJ compatible avec SDK41.

EDIT: Le lien ci-dessus donne accès également au script Perl.
Utilisation:
  • vasm2sdk.pl CN0B.txt CN0B.SRC > CN.LST pour créer le fichier source pour SDK41
  • A41 /R /O /L CN0B pour assembler le fichier .SRC avec A41
A noter que A41 génère un message d'erreur chaque fois qu'un label se trouve sur une ligne sans instruction, mais ce devrait un Warning au lieu d'une Error car cela n'a pas d'influence sur le reste du process: le label est bien référencé lors du link.
Modifié en dernier par zpalm le 24 oct. 2012 13:04, modifié 1 fois.
Avatar du membre
wldsvc
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 119
Enregistré le : 15 oct. 2012 13:20
Localisation : Drôme
Contact :

Re: Cherche développeur pour assembleur HP-41

Message par wldsvc »

Le lien marche pô :(

Peux-tu envoyer le script perl aussi ?
dispo : Sony Clié T675C, Psion Series 5mx 16MB, fx-180Pv
recherche : Sharp PC E220, Sharp PC-G850, calculatrices HP programmables
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2143
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Cherche développeur pour assembleur HP-41

Message par cgh »

Oui. Je veux bien te donner un coup de main, dans mes périodes de temps disponibles :)

J'ai repris le simulateur nsim de Eric Smith justement pour ajouter un désassembleur et d'autres fonctions dedans. C'est maintenant nsimII. Il est disponible sur hp41.org. Il est développé pour les plateformes Linux et les *BSD.

Je n'ai plus trop d'idées pour le faire évoluer, mais au début, juste après avoir porté le bank-switching pour émuler le module HEPAX, je comptais intégrer une chaine assembleur/linker. Je m'étais aussi tourné vers sdk41.

Par contre, je ne connais pas très bien perl.
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
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 du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2929
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: Cherche développeur pour assembleur HP-41

Message par zpalm »

wldsvc a écrit :Le lien marche pô :(

Peux-tu envoyer le script perl aussi ?
J'ai mis à jour le lien et j'ai ajouté le script Perl. Voir les commentaires que j'ai ajouté dans mon premier message.
cgh a écrit :Oui. Je veux bien te donner un coup de main, dans mes périodes de temps disponibles :)
Super !
cgh a écrit :Par contre, je ne connais pas très bien perl.
C'est pas grave, le but justement c'est de ne plus l'utiliser :D
Avatar du membre
wldsvc
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 119
Enregistré le : 15 oct. 2012 13:20
Localisation : Drôme
Contact :

Re: Cherche développeur pour assembleur HP-41

Message par wldsvc »

Ah, c'est mieux :)

Ce que tu fais pour l'instant, traduire les fichiers VASM en SRC compréhensible par a41 me semble le plus sain. Option 2, reprendre la source de a41 et faire en sorte qu'il supporte le VASM en plus de zencode, etc. C'est toujours moins lourd que de refaire un assembleur from scratch. Quoique... Est-ce que tu as de la doc de référence (i.e. encodage des instructions machine + mnémoniques) ?
dispo : Sony Clié T675C, Psion Series 5mx 16MB, fx-180Pv
recherche : Sharp PC E220, Sharp PC-G850, calculatrices HP programmables
Avatar du membre
wldsvc
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 119
Enregistré le : 15 oct. 2012 13:20
Localisation : Drôme
Contact :

Re: Cherche développeur pour assembleur HP-41

Message par wldsvc »

wldsvc a écrit : Est-ce que tu as de la doc de référence (i.e. encodage des instructions machine + mnémoniques) ?
Oublie, c'est a la fin de la doc de SDK41 :oops:
dispo : Sony Clié T675C, Psion Series 5mx 16MB, fx-180Pv
recherche : Sharp PC E220, Sharp PC-G850, calculatrices HP programmables
Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2929
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: Cherche développeur pour assembleur HP-41

Message par zpalm »

wldsvc a écrit :Ce que tu fais pour l'instant, traduire les fichiers VASM en SRC compréhensible par a41 me semble le plus sain. Option 2, reprendre la source de a41 et faire en sorte qu'il supporte le VASM en plus de zencode, etc. C'est toujours moins lourd que de refaire un assembleur from scratch. Quoique...
Ce que je fais me permet effectivement d'avoir une chaîne complète me permettant in-fine de générer des fichiers ROM et donc de corriger mon fichier source lors de la validation de chaque étape. Par contre d’est de plus en plus lourd à maintenir car le format source SDK41 est assez différent du format VASM: fichiers VASM tabulés vs. non tabulés pour A41, caractères spéciaux dans les labels non supportés dans A41, directive différentes, différence dans les instructions longues GOTO et GSUB …. J’aimerais vraiment avoir un assembleur qui prendrait le format VASM et qui générerait un fichier OBJ compatible SDK41.
J’ai regardé le source de A41 et il me semble plus simple et plus propre de créer un nouvel assembleur from scratch plutôt que de modifier A41. Le script perl + A41 permet d'avoir une référence lors du développement du nouvel assembleur pour valider le résultat.
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2143
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Cherche développeur pour assembleur HP-41

Message par cgh »

zpalm a écrit :
wldsvc a écrit :Ce que tu fais pour l'instant, traduire les fichiers VASM en SRC compréhensible par a41 me semble le plus sain. Option 2, reprendre la source de a41 et faire en sorte qu'il supporte le VASM en plus de zencode, etc. C'est toujours moins lourd que de refaire un assembleur from scratch. Quoique...
Ce que je fais me permet effectivement d'avoir une chaîne complète me permettant in-fine de générer des fichiers ROM et donc de corriger mon fichier source lors de la validation de chaque étape. Par contre d’est de plus en plus lourd à maintenir car le format source SDK41 est assez différent du format VASM: fichiers VASM tabulés vs. non tabulés pour A41, caractères spéciaux dans les labels non supportés dans A41, directive différentes, différence dans les instructions longues GOTO et GSUB …. J’aimerais vraiment avoir un assembleur qui prendrait le format VASM et qui générerait un fichier OBJ compatible SDK41.
J’ai regardé le source de A41 et il me semble plus simple et plus propre de créer un nouvel assembleur from scratch plutôt que de modifier A41. Le script perl + A41 permet d'avoir une référence lors du développement du nouvel assembleur pour valider le résultat.
Et une petite "moulinette" avec shell/sed/awk pour transformer le format VASM en SRC pour A41 ?
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
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 du membre
wldsvc
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 119
Enregistré le : 15 oct. 2012 13:20
Localisation : Drôme
Contact :

Re: Cherche développeur pour assembleur HP-41

Message par wldsvc »

cgh a écrit :Et une petite "moulinette" avec shell/sed/awk pour transformer le format VASM en SRC pour A41 ?
Ben c'est ce que j'étais en train de regarder. Les mnémoniques VASM me semblent être les mnémoniques "HP"... Il y a aussi les labels qui doivent être mis entre crochets
dispo : Sony Clié T675C, Psion Series 5mx 16MB, fx-180Pv
recherche : Sharp PC E220, Sharp PC-G850, calculatrices HP programmables
Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2929
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: Cherche développeur pour assembleur HP-41

Message par zpalm »

wldsvc a écrit :
cgh a écrit :Et une petite "moulinette" avec shell/sed/awk pour transformer le format VASM en SRC pour A41 ?
Ben c'est ce que j'étais en train de regarder. Les mnémoniques VASM me semblent être les mnémoniques "HP"... Il y a aussi les labels qui doivent être mis entre crochets
Dans le principe ce n’est pas très différent de mon script perl. Ce que je cherche c’est vraiment un nouvel assembleur pour remplacer A41.
Avatar du membre
wldsvc
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 119
Enregistré le : 15 oct. 2012 13:20
Localisation : Drôme
Contact :

Re: Cherche développeur pour assembleur HP-41

Message par wldsvc »

Si je comprends bien, ton problème est la lourdeur de maintenance du script perl, pas le fait d'avoir une étape supplémentaire dans la phase de compilation ?
dispo : Sony Clié T675C, Psion Series 5mx 16MB, fx-180Pv
recherche : Sharp PC E220, Sharp PC-G850, calculatrices HP programmables
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2143
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Cherche développeur pour assembleur HP-41

Message par cgh »

zpalm a écrit :
wldsvc a écrit :
cgh a écrit :Et une petite "moulinette" avec shell/sed/awk pour transformer le format VASM en SRC pour A41 ?
Ben c'est ce que j'étais en train de regarder. Les mnémoniques VASM me semblent être les mnémoniques "HP"... Il y a aussi les labels qui doivent être mis entre crochets
Dans le principe ce n’est pas très différent de mon script perl. Ce que je cherche c’est vraiment un nouvel assembleur pour remplacer A41.
Oui. Je viens de regarder un petit peu. Effectivement, la conversion n'est pas très simple et il risque d'y avoir plein de cas particuliers.
Je crains que les cas à traiter deviennent vite complexes, et que les awk/perl/tcl soient assez vite dépassés, meme si on peut écrire de très belles choses avec ces langages.
Ré-écrire un assembleur est peut être la meilleure solution, ou bien un programme C pour réaliser une conversion vers a41.

@zpalm : Comment as-tu reconstitué les listings TXT des VASM ?
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
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 du membre
wldsvc
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 119
Enregistré le : 15 oct. 2012 13:20
Localisation : Drôme
Contact :

Re: Cherche développeur pour assembleur HP-41

Message par wldsvc »

cgh a écrit :@zpalm : Comment as-tu reconstitué les listings TXT des VASM ?
J'aimerais savoir aussi ;)

J'ai poussé un peu plus loin les comparaisons aussi et il semble que les mnémoniques sont bien les mnémoniques HP avec quelques exceptions :

Quelques instructions en un deux mots dans VASM -> un mot pour a41 (comme CHK KB et RST KB)
Time Enable Field Instructions : version sans opérande dans VASM (W implicite) -> opérande W explicite pour a41

Ce que je n'arrive pas à piger, c'est la signification des deuxièmes et troisièmes colonnes de chiffres dans le VASM ainsi que la signification certains pseudos mnémoniques comme FILLTO @nnn (du padding ?), ignorés par a41, mais qui peuvent peut-être être utiles si on veut reproduire un ROM à l'identique. J'ai à un moment pensé que la troisième colonne correspondait à la version numérique dl'instruction, mais ça n'a pas l'air de coller.

Effectivement, tâche un poil trop ardue pour shell/awk, mais quoi qu'il en soit, faire un assembleur qui prenne du VASM en entrée reviendra au même que le script perl (ou toute forme de preprocessing) : sans référence des mnémoniques VASM, il faudra le modifier/améliorer à chaque nouvelle instruction découverte.
dispo : Sony Clié T675C, Psion Series 5mx 16MB, fx-180Pv
recherche : Sharp PC E220, Sharp PC-G850, calculatrices HP programmables
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2143
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Cherche développeur pour assembleur HP-41

Message par cgh »

Bon. J'ai commencé. En quelques lignes de C, voila ce que j'arrive à faire:

Code : Tout sélectionner

            LEGAL        
            GOLNC  LSWKUP
                         
            GOLONG DSWKUP
                         
;*************************************************
;THE FOLLOWING ROUTINE TAKES A BINARY REGISTER
;NUMBER FROM STATUS AND RETURNS THAT REGISTER
;IN C, ITS ADDRESS IN N, AND X IN M. IT SENDS 
;ILLEGAL ADDRESSES TO ERROR "NONEXISTENT."
;IT ALSO HANDLES INDIRECT ADDRESS, CYCLE TIMES 
;AVERAGE ABOUT 30 FOR DIRECT AND 60 FOR INDIRECT
; USES: A,B,C,M,N,ACTIVE POINTER, S9,S8,S7, DADD, + 2 SUB LEVELS
; MAY EXIT TO ERRNE 
; IN: ADDR IN S7:0 (MAY BE INDIRECT) 
;     NO PERIPHERAL ENABLED
; OUT: C = C(EFFECTIVE ADDR) 
;     N = EFFECTIVE ADDDR 
;     DADD = EFFECTIVE ADDR
;     M = X REGISTER CONTENTS 
;     S7 = 0
;*************************************************
[ADRFCH]    C=0                 ;GETX
            DADD=C       
            C=REGN 3     
            M=C                 ;X IS STORED IN M
            C=ST                ;GET ADDRESS FROM STATUS
            C=0    XS           ;CLEAR 9 FROM XS
            S7=    0            ;KILL INDIRECT FLAG
            CST EX              ;PUT ORIG STATUS BACK
            ?S6=1               ;STACK RCL?
            GONC   OVRSTK (  30);NO
            ?S5=1        
            GONC   OVRSTK (  30);NO
            ?S4=1        
            GONC   OVRSTK (  30);NO
            PT=    1            ;SET TO CLEAR HIGH BITS
            C=0    PT           ;CLEAR HIGH BITS
            DADD=C              ;PUT OUT ADDRESS
            N=C                 ;SAVE ADDRESS IN N
            C=DATA              ;GET REGISTER
            GOTO   FCHRTN (  40) DONE
[OVRSTK]    AC EX               ;SAVE RELATIVE ADDRESS
            C=REGN 13           ;GET STATUS REG
            RCR    3            ;MOVE REG0 TO POSITION
            C=C+A  X            ;COMPUTE ADR OF REG
            N=C                 ;SAV ADR FOR CALNG ROUT
            GOSUB  CHKADR       ;CHECK ADR, VAL RTNS IN B
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
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 du membre
wldsvc
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 119
Enregistré le : 15 oct. 2012 13:20
Localisation : Drôme
Contact :

Re: Cherche développeur pour assembleur HP-41

Message par wldsvc »

Joli ! Oublie pas les Time Enable Field Instructions sans opérande. Par exemple, le "C=0" doit devenir un "C=0 W". Doc ici, p46. A moins que a41 ne les avale sans.
dispo : Sony Clié T675C, Psion Series 5mx 16MB, fx-180Pv
recherche : Sharp PC E220, Sharp PC-G850, calculatrices HP programmables
Répondre

Retourner vers « Tous les Pockets »