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

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 suis en train de modifier l'écran de Debug pour intégrer les symboles issues par exemple de LHASM.
J'ai encore un soucis avec le desassemblage qui a des ratés lorsqu'il fait du pas à pas sur une ROM accédée par le bus mémoire.
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
Avatar du membre
phe78
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 721
Enregistré le : 22 avr. 2011 19:08
Localisation : Les Adrets de l'Esterel (Var)

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

Message par phe78 »

GENIAL ! j'ai charge le binaire du FORTH, ca marche nickel, y compris l'imprimante ! Par contre (je ne sais pas comment j'ai fait, probablement l'effet du Cotes du Rhone :) j'ai reussi a "debrancher" le PC1500 du CE150 et elle imprime encore !
Juste une question : la vitesse semble similaire a l'original quelque soit le setting de CPU Speed, peut-etre cela vient-il de mon PC (c'est un X60 Lenovo un peu vieillot)
Je vais maintenant ( ou plutot demain, je vais avoir des remarques sinon.....) essayer le debug/step-step, ca fait un environnement de dev vraiment genial avec les outils de cgh 8O :o :D 8) :P

Image
Avatar du membre
badaze
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 8384
Enregistré le : 12 févr. 2007 18:36
Localisation : Pas très loin de Lyon
Contact :

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

Message par badaze »

Il y a peut être un buffer.
Tout est bon dans le pocket.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer :(
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.
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 »

Non, il n'y a pas de buffer car les moteurs pas à pas sont pilotés par le CPU du PC-1500.
Ce n'est tout simplement pas possible que l'imprimante imprime, PC débranché.
DONC le pc-1500 était toujours connecté (pour PockEmul) , seul sa position à l'écran a changé, ce qui donne l'impression d'une déconnexion :-)
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
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 »

Premier problème de la version Windows, il transforme les &0A en &0D &0A, ce qui est plutôt génant dans le fichier cible binaire :-)
il faut donc modifier la ligne 3018 de lhasm.c comme suit:

Code : Tout sélectionner

if( 0 > (fdw = fopen( outfile, "wb" )) )
Je pense que c'est le seul endroit où cela pose problème car c'est le seul fichier binaire produit par lhasm.
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
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 pense avoir trouvé le problème de non INCLUDE sous Windows
La commande stat ligne 1495 renvoie un st_ino toujours à 0 au lieu d'in id unique sous linux.
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 »

Merci pour tout ce debug.

Bien vu, le coup du fopen(..., "wb"); Je n'avais jamais vu... Sur les systemes POSIX, ce n'est pas utilise. Je note...

st_ino n'est pas un unsigned short, mais d'un type ino_t dependant du systeme et defini dans sys/stat.h... Sur tous les OS POSIX, je n'ai aucun probleme avec cette partie de code.
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 »

eh oui, c'est un peu tordu.
voilà la correction
remplacer la ligne 1495

Code : Tout sélectionner

    if( -1 == stat( incfile, &st ) )
par les 2 lignes:

Code : Tout sélectionner

      int fildes = open(incfile, O_RDONLY);
      if( -1 == fstat(fildes, &st ) )
Incroyable !!! fstat génère bien des inodes :-)

edit: pas plus mal aussi de rajouter un close(fildes); aprés le test.
Modifié en dernier par remy le 26 févr. 2014 12:45, modifié 1 fois.
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 :Premier problème de la version Windows, il transforme les &0A en &0D &0A, ce qui est plutôt génant dans le fichier cible binaire :-)
il faut donc modifier la ligne 3018 de lhasm.c comme suit:

Code : Tout sélectionner

if( 0 > (fdw = fopen( outfile, "wb" )) )
Je pense que c'est le seul endroit où cela pose problème car c'est le seul fichier binaire produit par lhasm.
Attention cependant, car le fichier peut-etre binaire OU en texte hexa (option -x). Il faudra alors tester le flag de l'option -x (LHASM_OUTPUT_HEX) et utiliser "w" ou "wb" respectivement. Sinon le fichier texte hexa sera illisible sous Windows.

Code : Tout sélectionner

if( 0 > (fdw = fopen( outfile, (asmflags & LHASM_OUTPUT_HEX ? "w" : "wb") )) )
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 »

Je propose plutot d'utiliser ce fil pour les suggestions/evolutions des lhTools !

Oui. Je vois bien quel est le besoin et les limites. Pour le cas du PC-1500, il faut aussi retirer de la RAM la partie "SYSTEME", de &7000 a &7FFF.
Je vais voir ce que je peux faire, et ce que j'aurais comme idees, en plus des votres et de vos suggestions.

On dit:
  • .ROM et .RAM pour les "sections" en ROM et/ou en RAM.
  • .PC1500 et .PC1560 et voir meme .PC1500A, ce qui ouvrira une zone LM (.LM ?) de &7C01 a &7FFF).
  • .SYS pour la zone des variables systemes (uniquement avec .PC1500 ou .PC1500A)
  • on peut aussi ajouter: .CE161 .CE159 .CE155 et .CE151 pour le controle de la RAM en fonction du module present dans la machine. Du coup, cela changera automatiquement le .ORIGIN: par defaut en fonction du module (qui est de &40C5 pour tous les PC...)
  • .USERAM <deb> <fin> qui permettra de definir la zone RAM de son choix. De meme que .USEROM <deb> <fin>.
D'autres idees ?
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
phe78
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 721
Enregistré le : 22 avr. 2011 19:08
Localisation : Les Adrets de l'Esterel (Var)

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

Message par phe78 »

hello, j'ai modifie les definition de la WORKAREA pour qu'elles ne contiennent plus que des EQU. le package est dispo ici.
Probleme, dans le format RAM/ROM ou je ne devrais avoir que du binaire correspondant au code de la ROM, le BIN contient malgre tout toute la zone RAM :

Code : Tout sélectionner

philippe@philippe-X60-linux ~/Documents/PC1500/FORTH/FORTH110 $ lhasm -D ROM=1 -L MAIN.l MAIN.asm
Written 55274 bytes (00C5:D8AF) to MAIN.bin Checksum DF95
philippe@philippe-X60-linux ~/Documents/PC1500/FORTH/FORTH110 $ lhasm -L MAIN.l MAIN.asm
Written 7141 bytes (00C5:1CAA) to MAIN.bin Checksum D89C
philippe@philippe-X60-linux ~/Documents/PC1500/FORTH/FORTH110 $ 
ci-dessous les declarations dans le MAIN (en dessous un extrait de WORKAREA) :

Code : Tout sélectionner

.IF	EXIST?	ROM
;#################################################
;#             ROM / RAM implementation          #
;#################################################
;-------------------------------------------------
; RAM part
;-------------------------------------------------
.ORIGIN: ORGRAM
.INCLUDE: EQUATES.asm	; EQU definitions
.INCLUDE: MACROS.asm	; word header macros
;-------------------------------------------------
.INCLUDE: WORKAREA.asm	 ; variables, user area
ENDDICT .EQU ENDWORKAREA ; user's code starts here
;-------------------------------------------------
; ROM part
;-------------------------------------------------
.ORIGIN: ORGROM
	JP	MAIN	; cold start entry point
.INCLUDE: KERNEL.asm	; machine code kernel
.INCLUDE: HIGHLEVEL.asm	; FORTH words kernel
;
.ELSE
;#################################################
;#               RAM implementation              #
;#################################################
.ORIGIN: ORGRAM
.INCLUDE: EQUATES.asm	; EQU definitions
.INCLUDE: MACROS.asm	; word header macros
;-------------------------------------------------
	JP	MAIN	; cold start entry point
.INCLUDE: WORKAREA.asm	; variables, user area
.ORIGIN: ENDWORKAREA
.INCLUDE: KERNEL.asm	; machine code kernel
.INCLUDE: HIGHLEVEL.asm	; FORTH words kernel
ENDDICT .EQU .	        ; user's code starts here
.ENDIF
;-------------------------------------------------
.END
debut de WORKAREA :

Code : Tout sélectionner

;
%00m	.EQU	.
;-------------------------------------------------
; display / keyboard / printer area
;-------------------------------------------------
PRTFLAG	.EQU	%00m		; print mode flag
CHARPTR	.EQU	[+1]%00m	; char pointer  in display buffer
DBUFF	.EQU	[+2]%00m	; Display buffer
KBUFF 	.EQU 	[+1D]%00m	; Terminal Input Buffer - 128 bytes
;-------------------------------------------------
; kernel stacks and work areas
;-------------------------------------------------
UAREA	.EQU 	[+9D]%00m	; User Area - 128 bytes
BPSTACK	.EQU	[+11D]%00m	; Parameter stack - 128 bytes
PSTACK	.EQU	[+19C]%00m	; top of stack (grows down)
HAREA	.EQU 	[+19D]%00m	; Hold Area - 40 bytes
....
....
;
ENDWORKAREA .EQU [+336]%00m	; code starts here (in all-RAM version)
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 »

Quelle version des lhTools utilises-tu ? Si c'est une version < 0.4.8, c'est normal, car c'est le .END (meme si il n'est explicitement ecrit) qui valide l'origine.
Le fait d'appeler .INCLUDE: sur un fichier avec un .ORIGIN: 00C5 va forcer l'origine a &00C5, d'ou le debut du binaire en &00C5.

Il que tu regardes du cote des lhTools-0.4.8rc1.
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 »

Ce soir, je commence une grosse modif sur les lhTools (0.5.0).

J'ai rajoute l'option -m <machine> et -m <module> qui permet de fixer la configuration de la cible. Cela va permettre de fixer l'origine par defaut, automatiquement, mais en plus de controler que l'on est bien dans une section RAM, par exemple.
Les <machine> peuvent etre: pc1500 pc1500a pta4000+16 et pc1560. Si aucune machine n'est fixee, le pc1500 sera utilise par defaut.
Les <module> peuvent etre: ce151 ce155 ce159 et ce161 (couvrira aussi les ce163 et ce160). Un seul module accepte par machine. Aucun module pour le PTA-4000+16 ni pour le PC1560.
Les tests .IF MACHINE? [<machine>] et .IF MODULE? [<modulee>]. Les configurations par defaut sont statiques.
Il faudra apres ajoute des configuration dynamiques, RAM, ROM, LM (zone specifique au 1500A) et SYS (variables systemes).

De meme, des directives .RAM, .ROM, .LM et .SYS vont etre introduites. Elles vont renseigner lhasm sur la section ou le code produit est attendu. Par exemple, dans le cas de Remy avec le FORTH, mettre un .RAM mais continuer a assembler pour des adresses situees en ROM provoquera une FATAL ERROR !

J'ai introduit aussi la notion de version, qui permettra eventuellement de gerer des "compatibiltes" entre certains lhasm. De meme, il sera possible de refuser l'assemblage pour des versions de lhasm trop anciennes.

Code : Tout sélectionner

.IF VERSION? 0.4.8
; lhasm version >= 0.4.8, c'est OK
.ELSE
.FATAL "Please, use lhTools version >= 0.4.8"
.ENDIF
Enfin, je vais supprimer la mise a jour des pointeurs de l'ORIGIN: jusqu'a la premiere ligne de code ou le premier octet entre.
Modifié en dernier par cgh le 01 mars 2014 13:56, modifié 1 fois.
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 »

puisque tu es dans les modif :-)
Il semble que les INCLUDE imbriqués ne prennent pas en compte le répertoire courant du fichier père.
Je m'explique:
Fichier Firmware.asm:
.INCLUDE: FORTH/MAIN.asm

fichier MAIN.asm
.INCLUDE: EQUATES.asm

ERROR not found. il recherche EQUATES.asm dans le dossier de Firmware.asm
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 :puisque tu es dans les modif :-)
Il semble que les INCLUDE imbriqués ne prennent pas en compte le répertoire courant du fichier père.
Je m'explique:
Fichier Firmware.asm:
.INCLUDE: FORTH/MAIN.asm

fichier MAIN.asm
.INCLUDE: EQUATES.asm

ERROR not found. il recherche EQUATES.asm dans le dossier de Firmware.asm
Non. C'est comme en C. Je ne descends pas dans les sous repertoires, sauf si tu precises le chemin explicitement.
On peut ajouter une option de recherche des fichiers a inclure, facon: -I <chemin> etc... Bon, je note aussi.
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 »