LhTools - Cross-Assembler/Desassembleur pour PC-1500

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

cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2142
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: LhTools - Cross-Assembler/Desassembleur pour PC-1500

Message par cgh »

En fait, j'ai toujours developpe sous XMON, depuis l'automne 1984. XMON propose de remplacer les SBR &xx codes sur 1 octet (&C0..&FE) par une "pseudo instruction" pour faciliter le developpement.
Et c'est vrai. Il est bien plus facile de se rappeler que le retour au BASIC d'une instruction est RST plutot que SBR (&E2), etc...
Ces macros sont repertoriees dans la documentation. De plus lhasm et lhdump assemblent et desassemblent ces pseudo-instructions avec leurs pseudo-parametres eventuels:
SBR (&DE) lit l'octet suivant et l'utilise comme un deplacement en cas d'erreur. Ainsi sous lhasm et lhdump, SBR (&DE) est en fait EVAL +d. On peut aussi ecrire SBR (&DE),+d pour les refractaires...
A savoir que ceci est valable pour toutes les pseudo-instructions (&00..&FE) y compris le SBR (&34),&n,c0,+d0,c1,+d1,...cn,+dn.
Ces pseudo-instructions sont decrites entre autres dans les SHARPENTIER n'5 et ou n'6. On les trouve aussi de maniere exhaustive et discutees avec plus ou moins de succes dans les manuels des logiciels assembleur, par ex., celui de XMON.

Ci dessous un extrait de mon manuel:

Code : Tout sélectionner

  These mnemonics are aliases and provided as a standalone instruction to
  help in coding.
        LDW             := SBR (&C0)
        LJNE    k,d     := SBR (&C2)
        JNE     k,d     := SBR (&C4)
        BKW             := SBR (&C6)
        LJNES   d       := SBR (&C8)
        STS     (n)     := SBR (&CA)
        LDS     (n)     := SBR (&CC)
        VAR     n,d     := SBR (&CE)
        INTG    n,d     := SBR (&D0)
        ARG     d,n     := SBR (&D2)
        STB     n       := SBR (&D4)
        LDB     n       := SBR (&D6)
        IFC             := SBR (&D8)
        STVP            := SBR (&DA)
        LDPT            := SBR (&DC)
        EVAL    d       := SBR (&DE)
        ERRH            := SBR (&E0)
        RST             := SBR (&E2)
        ERR1            := SBR (&E4)
        LYX             := SBR (&E6)
        NORM            := SBR (&E8)
        SLX             := SBR (&EA)
        CLX             := SBR (&EC)
        ADN             := SBR (&EE)
        SXY             := SBR (&F0)
        CLS             := SBR (&F2)
        LDU     (mn)    := SBR (&F4)
        STU     (mn)    := SBR (&F6)
D'ailleurs je me rends compte que j'ai oublie de lister la syntaxe de tous les SBR (&nn). Ce sera ajoute dans le zip de la prochaine version...

Quand j'ai developpe les lhTools, j'ai tout fait pour etre comme XMON: Meme mnemoniques et meme pseudo-instructions. Encore que lhasm apporte des petits plus. Cela a l'avantage que je peux passer des lhTools/Linux a XMON/PC1500 sans effort.
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
remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2218
Enregistré le : 13 mars 2006 15:39
Localisation : Issy
Contact :

Re: LhTools - Cross-Assembler/Desassembleur pour PC-1500

Message par remy »

Je reconnais que je m'y perds un peu entre les deux syntaxes...
Une petite remarque sur LHdump. Je m’attendais à ce qu'il génère automatiquement les symboles lors de l'utilisation de l'option -s.
Cela ferai un source relogeable.
PockEmul, Emulateur de pocket Sharp, Canon, Casio, HP, TI, NEC, Panasonic, Sanco, Seiko, General, National, ....
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2142
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: LhTools - Cross-Assembler/Desassembleur pour PC-1500

Message par cgh »

remy a écrit :Je reconnais que je m'y perds un peu entre les deux syntaxes...
Une petite remarque sur LHdump. Je m’attendais à ce qu'il génère automatiquement les symboles lors de l'utilisation de l'option -s.
Cela ferai un source relogeable.
C'est sur que la cohabitation entre les mnemoniques SHARP et les simili-Z80 de XMON n'est pas des plus aisees. Ceci, dit il n'y a jamais eu de logiciel utilisant les mnemoniques officielles SHARP de diffuse...

Pour lhdump, l'option -s fourni un "format" source, c'est a dire sans adresse ni code hexa. Si on veut les symboles, il faut que lhdump passe du stade de "desassembleur" a celui de "sourceur". C'est un dire d'un mode mono-passe (je desassemble a la volee) et a un mode bi-passes (creation des symboles, puis desassemblage), voire tri-passes comme le sourceur de nsimII. Ceci dit, on peut specifier un fichier de symboles avec l'option -S <fichier.sym>
Ceci dit, c'est prevu. Cela fait des parti des ameliorations que je souhaite effectuer. Je vais essayer de faire quelque chose la dessus ce week-end.
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
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2142
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: LhTools - Cross-Assembler/Desassembleur pour PC-1500

Message par cgh »

remy a écrit :Une petite remarque sur LHdump. Je m’attendais à ce qu'il génère automatiquement les symboles lors de l'utilisation de l'option -s.
Cela ferai un source relogeable.
Corrige. Version rc6 (test) disponible, avant diffusion publique le week-end prochain, si pas de gros problemes.
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
remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2218
Enregistré le : 13 mars 2006 15:39
Localisation : Issy
Contact :

Re: LhTools - Cross-Assembler/Desassembleur pour PC-1500

Message par remy »

Que de réactivité :-)
je suis en train de tester sur mon NAS.
J'avais détecté un problème sous windows pour lhdump mais je n'ai pas encore investigué.
Cela va nous permettre de reprendre tel quel le source de la CE-158 ou de la CE-162E si nous décidons d'intégrer les interfaces série et // avec un LH5811.
De même pour toute la gestion K7, qui peut être reprise à l'identique (à voir si on conserve deux RMT ou un seul)
PockEmul, Emulateur de pocket Sharp, Canon, Casio, HP, TI, NEC, Panasonic, Sanco, Seiko, General, National, ....
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2142
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: LhTools - Cross-Assembler/Desassembleur pour PC-1500

Message par cgh »

remy a écrit :J'avais détecté un problème sous windows pour lhdump mais je n'ai pas encore investigué.
stat() ? lhdump l'utilise aussi ... Et je pense aussi aux fopen() des fichiers binaires...
Sous Windows, il faut verifier que stat() retourne bien la taille dans le champ st.st_size ! Sinon, il faudra trouver un equivalent.

La rc7 est dispo avec fopen( ..., "rb" ) pour le fichier binaire d'entree. A voir si c'est OK. Sinon faudra voir du cote de stat()...
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
remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2218
Enregistré le : 13 mars 2006 15:39
Localisation : Issy
Contact :

Re: LhTools - Cross-Assembler/Desassembleur pour PC-1500

Message par remy »

Salut Christophe,
Je ne comprends pas trop l'utilisation de .KEYWORD
Je pense que les 4bits définissant le type de fonction/procédure devraient être dans le .DEFINE
Le .KEYWORD se bornerai à prendre la liste des instructions et à générer la table alphabétique et la table de saut.
PockEmul, Emulateur de pocket Sharp, Canon, Casio, HP, TI, NEC, Panasonic, Sanco, Seiko, General, National, ....
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2142
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: LhTools - Cross-Assembler/Desassembleur pour PC-1500

Message par cgh »

remy a écrit :Salut Christophe,
Je ne comprends pas trop l'utilisation de .KEYWORD
Je pense que les 4bits définissant le type de fonction/procédure devraient être dans le .DEFINE
Le .KEYWORD se bornerai à prendre la liste des instructions et à générer la table alphabétique et la table de saut.
Oui. Cela fait des evolutions que je souhaite faire. J'avais commence, mais j'ai du tout interrompre ce week-end. Ce sera pour la prochaine version.
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
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2142
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: LhTools - Cross-Assembler/Desassembleur pour PC-1500

Message par cgh »

Les lhTools-0.5.0 sont disponibles sur le site de repaire.
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
remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2218
Enregistré le : 13 mars 2006 15:39
Localisation : Issy
Contact :

Re: LhTools - Cross-Assembler/Desassembleur pour PC-1500

Message par remy »

Une autre optimisation sympa serai de supprimer le code JP.
J'aimerai que lhasm remplace automatiquement les

Code : Tout sélectionner

JR cc,mn
par:

Code : Tout sélectionner

JR  Notcc, +3
JP mn
lorsque mn est à plus de 256 octets.
PockEmul, Emulateur de pocket Sharp, Canon, Casio, HP, TI, NEC, Panasonic, Sanco, Seiko, General, National, ....
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2142
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: LhTools - Cross-Assembler/Desassembleur pour PC-1500

Message par cgh »

remy a écrit :Une autre optimisation sympa serai de supprimer le code JP.
J'aimerai que lhasm remplace automatiquement les

Code : Tout sélectionner

JR cc,mn
par:

Code : Tout sélectionner

JR  Notcc, +3
JP mn
lorsque mn est à plus de 256 octets.
C'est note ! Mais cela va etre un peu long a developper: lhasm va devoir faire 3 passes...
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
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2142
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: LhTools - Cross-Assembler/Desassembleur pour PC-1500

Message par cgh »

Version des lhTools : 0.6.0 disponible sur le Site de repaire.
C'est une 0.6.0 car le format des fichiers de keyword a change, meme si le format ancien est compatible.
La documentation est a jour. On peut telecharger le manuel des lhTools-0.6.0.pdf
J'ai compile les executables pour Windows32 a l'aide des MinGW. Par contre, ce n'est pas du tout teste.

Nouveautes:
.DEFINE: "<basic>" = <code> <bits> avec <bits> = N|P|C|? avec N : normal (PRINT), P : programmable (FOR), C : commande (NEW), ? : other (???).
Pour chaque keyword, 3 symboles sont crees:
  • <basic>\\._code : le code sur 2 octets du keyword, par ex. F0B0
  • <basic>\\._jump : l'adresse de jump de la routine du keyword,
  • <basic>\\._bits : les bits du keyword, definis comme suit: poids fort, la lettre ASCII (N|P|C|?); poids faible les bits dans la table (&CE,&A0,&80,&E0)
Je les ai rajoutes car cela permet de faire des tables de RESERVE (besoin dans BASFILE pour les ROM0).

Dans le fragment .KEYWORD, il est juste necessaire de mettre le "<basic>" keyword entre ".

lhasm genere le fichier de keyword au nouveau format avec l'option -K <kywordfile>, ou a l'ancien format (< 0.6.0) avec -KK <kywordfile>.
lhdump sait traiter les 2 formats de keywords.
On peut aussi maintenant exporter les keywords. Avant il fallait declarer une table de keyword pour que le fichier keyword soit ecrit. Avec cette version, les options -KE ou -KKE exportent les symboles definis dans le source par .DEFINE:, si aucune table n'est declaree...

Autres nouveautes
  • Ajout du module CE163 (-m ce163). La banque 1 n'est pas supportee.
  • .IF ORIGIN? - Vrai si une origine a ete definie (.ORIGIN: ou option -O),
  • .IF 0 et .IF 1 - Toujours faux ou toujours vrai. Utile pour "commenter" du code.
  • .IF KEYWORD? "<keyw>" - Vrai si le token <keyw> existe (.DEFINE: ...)
  • .IMPORT: <sym|keyfile> - Importe un fichier de symboles ou de keywords. Ces fichiers sont directement issus de lhasm -S <symfile> -K[K] <keywfile>.
  • Correction de bugs divers, et ajout de messages d'erreur si un deplacement est > 255.
  • Declaration et utilisation des structures. Voir plus bas...
  • Option -J Introduit le remplacement de JR [cc,]&nn par [JR !cc,+3] JP &nn si le deplacement est > 255 fonctionne :-D lhasm est oblige de faire autant de passes que necessaire, mais ca n'a pas l'air mal... lhasm embarque cette option par defaut. Cependant, -Jloop=N stop l'optimiseur apres N passes.
  • Option -EE qui traite les erreurs comme fatales.
  • Option -W changee. Elle provoque l'affichage de warning de basse priorite, pour ne pas surcharger l'affichage de warning. C'est utilise par le BIND et UNBIND des structures.
Pas mal de corrections d'incoherences et quelque bugs, encore... et encore...

Un petit topo sur les structures, maintenant gerees par lhasm. Je les introduites car je suis en train de documente BASFILE et cela va etre tres utile pour "simplifier" le code et surtout aider a lisibilite et la maintenance du code. (Il faudra apres que je refasse un passage sur MMPS...)

Qu'est-ce qu'une structure ?
Comme en C (ou ADA,...), il s'agit de l'organisation de donnees. Ceci est utilise par exemple pour les entetes des fichiers BASFILE.
Exemple:

Code : Tout sélectionner

	.STRUCT:	basfile2
		ptr		word,#2
	.ENDSTRUCT
	.STRUCT:	basfile_header
		filename	byte,#11
		filetype	byte
		filelen	word
		fileprev	struct'basfile2
	.ENDSTRUCT
La structure basfile_header est composee des champs filename, filetype, filelen et fileprev. De son cote, fileprev est lui meme une structure :)

Une fois, la structure definie, de nouveaux operateurs sont disponibles. Ils fonctionnent sur la structure ou les champs.
  • SIZEOF' - Retourne la taille de la structure ou d'un champ,
  • TYPEOF' - Retourne le type d'un champ. 1 pour la structure,
  • ARRAYOF' - Retourne le nombre d'elements d'un champ, 1 pour la structure,
  • ELEMENTOF' - Retourne la taille d'un element,
  • OFFSETOF' - Retourne l'offset de la base du champ, 0 pour la structure.
On peut donc manipuler les champs et la structure directement. Par exemple, remettons a 0 le champ filename:

Code : Tout sélectionner

	; BC pointe a la base de la structure
	LDA	OFFSETOF'basfile_header.filename
	ADD	BC
	LD	L,SIZEOF'basfile_header.filename
	DEC	L
	CLA
loop:
	STI	(BC)
	DJC	loop
Oui, mais comment les utiliser:

Pour ca, j'ai introduit aussi de nouvelles instructions: BIND et UNBIND.
BIND permet de lier un registre a une structure, un champ ou un registre BINDe.
Dans ce cas, lhasm va automatiquement generer le code necessaire au changement de champ. Il n'est plus necessaire de savoir j'ajoute tant, je retranche, etc... Par exemple:

Code : Tout sélectionner

	BIND	DE,basfile_header.filelen	; DE sur le champ filelen
	LDI	(DE)
	STA	H
	LDI	(DE)
	STA	L
	; Ici lhasm a fait "passer" DE sur le champ suivant fileprev.
	; Mais si je veux revenir sur le filename, il faut retrancher...
	BIND	DE,basfile_header.filename
	; Va generer le code pour moi :) 
Avec la sortie du .lst, c'est plus parlant...

Code : Tout sélectionner

   20	40D0			BIND	DE basfile_header.filelen
   20	40D0	B5 0C FD DA    	BIND	DE basfile_header.filelen ; DE sur le champ filelen 
   21	40D4	55             	LDI	(DE) 
   22	40D5	28             	STA	H 
   23	40D6	55             	LDI	(DE) 
   24	40D7	2A             	STA	L 
   25	40D8		;	Ici lhasm a fait "passer" DE sur le champ suivant fileprev. 
   26	40D8		;	Mais si je veux revenir sur le filename il faut retrancher... 
   27	40D8			BIND	DE basfile_header.filename
   27	40D8	FB 14 B1 0E 1A 	BIND	DE basfile_header.filename 
		94 30 18 
   28	40E0		;	Va generer le code pour moi :) 
UNBIND va "liberer" le registre, qui ne sera plus liee a une structure.

En attendant vos retours eventuels. Bon amusement !
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
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2142
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: LhTools - Cross-Assembler/Desassembleur pour PC-1500

Message par cgh »

Version des lhTools : 0.6.1 disponible sur le Site de repaire.
La documentation est a jour. On peut telecharger le manuel des lhTools-0.6.1.pdf
J'ai compile les executables pour Windows32 a l'aide des MinGW. Par contre, ce n'est pas du tout teste.

Ajout des chaines de substitutions pour "fabriquer" la valeur des symboles (demande Remy)
Correction d'une betise dans le calcul de la checksum avec lhdump.

En attendant vos retours eventuels. Bon amusement !
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
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2142
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: LhTools - Cross-Assembler/Desassembleur pour PC-1500

Message par cgh »

Yo !

Un p'tit coucou pour vous signaler la mise en ligne d'une grosse mise a jour des lhTools en version 0.7.0.
  • Version des lhTools : 0.7.0 disponible sur le Site de repaire.
  • La documentation est a jour. On peut telecharger le manuel des lhTools-0.7.0.pdf
  • J'ai compile les executables pour Windows32 a l'aide des MinGW (lhTools-0.7.0-win32.zip). Par contre, ce n'est pas du tout teste.
Quoi de neuf depuis la release precedente ?
  • 0.6.2 - Ajout des DATA. Il s'agit de zones memoire mappees sur une/des structures. C'est un developpement que j'ai realise lors de la reecriture de BASFILE. Le fichier des fragments est mis a jour en accord avec les structures. Comme cela, lors du desassemblage par lhdump, les champs des DATA seront correctement affiches.
  • 0.6.3 - Dans les expressions [op<val>]<expr>, la valeur <val> sera evaluee si elle commence par un ' (apostrophe).
  • 0.6.4 - Introduction de l'operateur opcode' qui permet de recuperer le 1er octet d'une mnemonique. Par exemple opcode'NOP retournera &38. C'est pour les logiciels MACBAS et mon assembleur.
  • 0.6.5 - Ajout de l'operateur bcdof' pour encoder une valeur en BCD. De meme, STRINGIFY peut maintenant "stringifier" les valeurs des expressions avec valueof'.
  • 0.6.7 - Encodage de la memoire RESERVE.
  • 0.6.8 - Les codes des mots cles BASIC (instructions) peuvent etre alloues dynamiquement par l'assembleur. J'en ai besoin pour le ROM builder du PC1500.
  • 0.7.0 - La programmation structuree. Pour rendre le code plus lisible (et limiter les symboles), on dispose des pseudo-instructions if <test>... [else ...] endif, des boucles begin ... until <test> et begin ... while <test> ... repeat. Cerise sur le gateau: le code est optimise automatiquement; l'assembleur utilisant les JR relatif si possible. Comme pour MACBAS95, le format begin ... until DJC est supporte, afin d'utiliser l'instruction DJC. Cette derniere version apporte aussi un repertoire de tests (asm/), contenant des exemples et des tests. Une suite de non-regression est maintenant disponible.
Un petit exemple de "programmation structuree":

Code : Tout sélectionner

        .CODE

        begin
                LDI     (BC)
        while   NZ
                AND     &7F
                STI     (DE)
        repeat

        begin
                AND     (BC),&00
                INC     BC
                CP      C,&80
                if      Z
                        INC     BC
                endif
                CP      C,&FF
        until   >=

        LDA     (HL)
        BIT     &80
        if      =
                XOR     &FF
        else
                AND     &7F
        endif

        CLA
        begin
                STI     (BC)
        until   DJC

        RET

        .END
J'ai aussi introduit la directive .PRINT2, qui fonctionne comme .PRINT sauf qu'elle ne sera appelee qu'en passe 2 de l'assembleur. C'est bien pratique pour afficher des messages d'initialisation avec des addresses et/ou des valeurs calculees lors de l'assemblage.

Tout est dans la documentation.

Merci a repaire pour l'hebergement.

A bientot pour de nouvelles aventures...
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
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2142
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: LhTools - Cross-Assembler/Desassembleur pour PC-1500

Message par cgh »

Bon, les lhTools-0.7.2 sont maintenant bien stables. Je pense pouvoir les diffuser d'ici le 1er jour du printemps :)

Quelques nouveautes, surtout liees au logiciel MACBAS2014, quelques corrections de bugs divers et varies.

Une decouverte: les mnemoniques RRD et RLD peuvent aussi acceder a la ME1 (RRD# et RLD#). Je ne le savais pas :oops: !!!! C'est regle: les lhTools supportent cet acces.

Les caracteres peuvent etre entres sous la forme $:<charname>. Ainsi LDA $:space sera code par &B5 &20. Jusqu'a cette version, certains carateres (espace, virgule, ...) etaient "manges" par le parser et devaient donc etre entres directement en hexadecimal. Les 128 caracteres sont ainsi nommables.

A la demande de Rom1500, lhasm peut "creer" les entetes @COM (CSAVE BASIC), ACOM (CSAVE RESERVE), BCOM (CSAVE M) et HCOM (PRINT#) pour une utilisation avec la CE-158 (options -Z decrite dans un autre fil). Je n'ai pas teste car actuellement mon cable serie DB25/DB9 ne marche pas :( Je me repose donc sur les retours eventuels de Rom1500. lhdump sait quant a lui exploiter ces headers :geek:

lhdump est de plus capable de fournir un source (cf le manuel, option -s -inline) avec du LM inline dans le BASIC qui pourra etre ainsi reassemble par lhasm. Le "charmant" petit programme

Code : Tout sélectionner

10 REM \B5\00HwJPj\80A\88\03\9A
20 POKE A,&CD,&F2,&BE,&ED,&00,&9A
30 E$="HAJ\02\9AABCEFGH"
40 DATA &FD,&A8,&FD,&88,&BE,&E6,&69,&FD,&0A,&FD,&2A,&9A
50 END 
est en fait:

Code : Tout sélectionner

;
;	lhTools Version 0.7.2 #0
;	        Compiled (cgh@varvotier) Sat Mar 14 15:51:11 CET 2015
;	        Platform Linux 3.2.29 x86_64
;
;	Binary file: bin
;	lhdump options:
;		-s -inline -D:POKE -D:VAR -D:REM -D:DATA \
;		bin

	.ORIGIN: 40C5
	.BASIC
	; 40C5 4147 (length 0082)
10 REM 	\asm[
		LDA	00
		LD	B,77
		LD	C,50
		LD	L,80
		STI	(BC)
		DJC	-03
	\]end 
20 POKE A,	\asm[
		SBR	(F2)
		CALL	CURMOVNCHAR
		RET
	\]end 
30 E$="\asm[
		LD	B,41
		LD	C,02
		RET
		STI	(BC)
		DEC	C
		STD	(BC)
		LDI	(BC)
		DEC	BC
		LDD	(BC)
		LD	B,22
	\]end "
40 DATA 	\asm[
		PUSH	HL
		PUSH	BC
		CALL	BEEP1
		POP	BC
		POP	HL
		RET
	\]end 
50 END 

	.END
	.SYMBOLS:
Enfin, l'evaluateur d'expressions, les symboles ainsi que les adresses des lignes BASIC peuvent etre accedes pendant la compilation des lignes BASIC.
Le petit programme BASIC suivant:

Code : Tout sélectionner

10 REM ABCDEF
20 POKE \addr[10]+2,\eval8[opcode'RET]
30 POKE \get[A$],&01,&02,&03,\eval8[>1234]
40 CALL \eval16[[+3]A$]
se trouvera "compile" en (&78C0 est l'adresse de A$):

Code : Tout sélectionner

10 REM ABCDEF
20 POKE &40C8+2,&9A
30 POKE &78C0,&01,&02,&03,&34
40 CALL &78C3
Je gere actuellement 2 versions de lhTools en parallele: les 0.7.2 et le projet 0.8.0 dont je parlerai plus longuement apres les pocketicaires de mars. Mais l'utilitaire meld me permet de merger sans probleme les modifications d'une version vers l'autre.

A bientot pour de nouveaux "delires" encore plus fous... ;)
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
Répondre

Retourner vers « Tous les Pockets »