FORTH sur 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

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: FORTH sur PC-1500

Message par phe78 »

Hello,
j'ai uploade une premiere ebauche de code relogeable, version 1.10 ici.

J'ai decompose les sources de la facon suivante :

Code : Tout sélectionner

MAIN.asm	        ; overall code structure
EQUATES.asm	; EQU definitions
MACROS.asm	        ; word header macros
WORKAREA.asm	; variables, user area
KERNEL.asm	        ; machine code kernel
HIGHLEVEL.asm	; FORTH words kernel
J'ai utilise les parametres suivants de lhasm pour specifier l'affectation RAM / ROM
-D ROM=1 specifie que WORKAREA et le dictionnaire utilisateur sont en RAM, KERNEL et HIGHLEVEL en ROM
si cette option n'est pas precisee, l'ensemble est alloue en RAM comme avant
- D ORGRAM=xxxx specifie l'addresse de depart de la RAM (default 00C5)
-D ORGROM=xxxxx specifie l'adresse de depart de la ROM (default C000)

J'ai verifie que le code tourne toujours... seul hic, mais serieux a mon avis :
le BIN genere demarre systematiquement de 0000 (il a donc un espace libre a zero au debut du fichier qui ecrase tout quand on le charge). Cela vient du fait que j'ai du mettre un ORG 0000 en debut de fichier, sinon lhasm rejette les ordres .ORIGIN: ORGRAM ou ORGROM car etant d'une valeur inferieure a 40C5, valeur pas defaut de lhasm. Que me conseillez-vous pour contourner ce probleme ? je pourrais preciser -O=<valeur de ORGRAM> mais je trouve ca redondant.
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2142
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: FORTH sur PC-1500

Message par cgh »

phe78 a écrit :Hello,
j'ai uploade une premiere ebauche de code relogeable, version 1.10 ici.

J'ai decompose les sources de la facon suivante :

Code : Tout sélectionner

MAIN.asm	        ; overall code structure
EQUATES.asm	; EQU definitions
MACROS.asm	        ; word header macros
WORKAREA.asm	; variables, user area
KERNEL.asm	        ; machine code kernel
HIGHLEVEL.asm	; FORTH words kernel
J'ai utilise les parametres suivants de lhasm pour specifier l'affectation RAM / ROM
-D ROM=1 specifie que WORKAREA et le dictionnaire utilisateur sont en RAM, KERNEL et HIGHLEVEL en ROM
si cette option n'est pas precisee, l'ensemble est alloue en RAM comme avant
- D ORGRAM=xxxx specifie l'addresse de depart de la RAM (default 00C5)
-D ORGROM=xxxxx specifie l'adresse de depart de la ROM (default C000)

J'ai verifie que le code tourne toujours... seul hic, mais serieux a mon avis :
le BIN genere demarre systematiquement de 0000 (il a donc un espace libre a zero au debut du fichier qui ecrase tout quand on le charge). Cela vient du fait que j'ai du mettre un ORG 0000 en debut de fichier, sinon lhasm rejette les ordres .ORIGIN: ORGRAM ou ORGROM car etant d'une valeur inferieure a 40C5, valeur pas defaut de lhasm. Que me conseillez-vous pour contourner ce probleme ? je pourrais preciser -O=<valeur de ORGRAM> mais je trouve ca redondant.
Ce n'est pas normal je regarde...
C'est quoi les arguments passes a lhasm ?
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: FORTH sur PC-1500

Message par cgh »

remy a écrit :
cgh a écrit :Une excellente opportunite pour implemantee les breakpoints en ecriture sur une zone definie (si ce n'est pas deja fait) :geek:
Tu definis la zone ROM comme etant "interdite en ecriture", et a la premiere instruction qui essaye d'ecrire dans cette zone, c'est le break !
Il perd pas le nord le Christophe :-)
Tu as raison et je vais le faire.
Et bien c'est aussi mon metier :geek: Je suis developpeur bas-niveau (Linux kernel, U-Boot). J'utilise des sondes JTAG car le debug type "gdb" au niveau ou je suis n'est pas possible, surtout dans les profondeurs des firmwares.
Je connais mes outils et leurs fonctionnalites; et c'est ce que je t'ai propose d'ajouter dans PockEmul... 8)
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: FORTH sur PC-1500

Message par remy »

Je t'ai rajouté les breakpoints
En EXEC, READ WRITE (le R/W c'est pour bientôt).
Je suis aussi en train de développer un analyseur de condition de déclenchement car j'aimerai faire un truc du genre :

Code : Tout sélectionner

WRITE    &4000 - &4100    cond: (A=0x04) | | ( (Xh>0x80) && (Value&0x7f) )
je break si écriture sur la plage d'adresse &4000-&4100 selon la condition sur les registres et la valeur que j'écris....
Je ne sais pas si tu trouve que ça a du sens un tel système.
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: FORTH sur PC-1500

Message par phe78 »

Ce n'est pas normal je regarde...
C'est quoi les arguments passes a lhasm ?
ci-dessous les commandes utilisees , de haut en bas :
1- source MAIN sans la ligne .ORIGIN: 0000, tout fonctonne normalement, c'est pour l'instant l'approche que j'ai trouvee pour contourner le probleme (mais il fait toujours mentionner -O xxxx)
2- meme chose mais sans le -O, lhasm rejette mon .ORIGIN 00C5 car inferieur au 40C5 par defaut utilise par lhasm
3- cette fois, j'ai remis le .ORIGIN 0000 au debut de facon a supprimer le message d'erreur, mais on voit que le BIN commence a 0000 alors qu;il n'y a aucun statement entre le ORG 0000 et mon ORG 00C5
4- meme chose cette fois-ci avec le -O, qui ne change rien puisque cette valeur est ecrasee par le ORG 0000 du source

je pense que le fix le plus simple serait de remplace le defaut 40C5 par 00C5 (ou carrement 0000)

Code : Tout sélectionner

philippe@philippe-X60-linux ~/Documents/PC1500/FORTH/FORTH110 $ lhasm -O 00C5 -L MAIN.l MAIN.asm
Written 7136 bytes (00C5:1CA5) to MAIN.bin Checksum D778
philippe@philippe-X60-linux ~/Documents/PC1500/FORTH/FORTH110 $ lhasm  -L MAIN.l MAIN.asm
MAIN.asm line 84: ***ERROR*** Origin set is lower than current origin 40C5 or current address 40C5
Aborting due to previous error...
philippe@philippe-X60-linux ~/Documents/PC1500/FORTH/FORTH110 $ lhasm  -L MAIN.l MAIN.asm
Written 7333 bytes (0000:1CA5) to MAIN.bin Checksum D778
philippe@philippe-X60-linux ~/Documents/PC1500/FORTH/FORTH110 $ lhasm -O 00C5 -L MAIN.l MAIN.asm
Written 7333 bytes (0000:1CA5) to MAIN.bin Checksum D778
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2142
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: FORTH sur PC-1500

Message par cgh »

phe78 a écrit :J'ai verifie que le code tourne toujours... seul hic, mais serieux a mon avis :
le BIN genere demarre systematiquement de 0000 (il a donc un espace libre a zero au debut du fichier qui ecrase tout quand on le charge). Cela vient du fait que j'ai du mettre un ORG 0000 en debut de fichier, sinon lhasm rejette les ordres .ORIGIN: ORGRAM ou ORGROM car etant d'une valeur inferieure a 40C5, valeur pas defaut de lhasm. Que me conseillez-vous pour contourner ce probleme ? je pourrais preciser -O=<valeur de ORGRAM> mais je trouve ca redondant.
En fait, dans ce que je comprends, tu as une zone RAM de &00C5 a ... et une zone ROM eventuellement a partir de &C000.
Bon, tu fichier va etre gigantesque car il va aller du debut de la RAM a la fin de la ROM...
Pour le coups des ORIGIN, j'ai un gag qui n'est pas net dans lhasm. Je vais essayer de regarder.
Mais tu peux specifier l'origine sur la ligne de commande -O <addr>

Code : Tout sélectionner

lhasm -L l1 -O 00C5 -D ROM=1 -o b1 MAIN.asm
et dans ce cas tu peux supprimer le .ORIGIN: 0000
En fait, ce qui perturbe lhasm, et c'est tout a fait normal, c'est que tu commences a assembler du code avant la permiere .ORIGIN: 00C5 en ligne 69.
Il faut reecrire le code comme suit:

Code : Tout sélectionner

.IF     EXIST?  ROM
;#################################################
;#             ROM / RAM implementation          #
;#################################################
;-------------------------------------------------
; RAM part
;-------------------------------------------------
.ORIGIN: ORGRAM
.INCLUDE: WORKAREA.asm
;-------------------------------------------------
.INCLUDE: EQUATES.asm           ; EQU definitions
.INCLUDE: MACROS.asm            ; word header macros
ENDDICT:                ; user's code starts here
;-------------------------------------------------
; ROM part
;-------------------------------------------------
Et la ca marche:

Code : Tout sélectionner

lhasm -L l1 -D ROM=1 -o b1 MAIN.asm 
Written 55269 bytes (00C5:D8AA) to b1 Checksum D584
lhasm considere possible de changer l'ORIGIN, TANT QUE RIEN N'A ETE FAIT ! Or declarer un symbole ou desd macros, c'est faire quelque chose, et dans ce cas l'origine par defaut (bon je suis pas d'accord, ce n'est pas genial comme idee mais en attendant...) est validee et revenir en arriere est interdit !!!!
Dans ton cas, je pense que tu devrais reflechir a generer 2 binaires: 1 pour le WORKAREA et un pour le kernel FORTH.
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: FORTH sur PC-1500

Message par cgh »

remy a écrit :Je t'ai rajouté les breakpoints
En EXEC, READ WRITE (le R/W c'est pour bientôt).
Je suis aussi en train de développer un analyseur de condition de déclenchement car j'aimerai faire un truc du genre :

Code : Tout sélectionner

WRITE    &4000 - &4100    cond: (A=0x04) | | ( (Xh>0x80) && (Value&0x7f) )
je break si écriture sur la plage d'adresse &4000-&4100 selon la condition sur les registres et la valeur que j'écris....
Je ne sais pas si tu trouve que ça a du sens un tel système.
Ah OUI ! Mais je n'ai pas ose le demande... :oops:
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: FORTH sur PC-1500

Message par remy »

Je ne comprend pas tout...
pour moi il n'y a pas de binaire à générer pour le WorkArea. Seulement des labels avec les adr correspondantes.
Charge au kernel d'initialiser la WORKAREA au début.
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: FORTH sur PC-1500

Message par phe78 »

oui bien sur, il suffit de changer les declarations dans WORKAREA car toutes les variables sont initialisées par le kernel (primitive UINIT appelée dans COLD plus quelques bricoles dans l'assembleur après MAIN), j'attends le retour de cgh sur ma question concernant les ORG, car il y aura peut-être d'autres modifs a prévoir
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2142
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: FORTH sur PC-1500

Message par cgh »

remy a écrit :Je ne comprend pas tout...
pour moi il n'y a pas de binaire à générer pour le WorkArea. Seulement des labels avec les adr correspondantes.
Charge au kernel d'initialiser la WORKAREA au début.
Oui, mais dans le cas de phe78, son binaire fait 55ko:

Code : Tout sélectionner

lhasm -L l1 -D ROM=1 -o b1 MAIN.asm 
Written 55269 bytes (00C5:D8AA) to b1 Checksum D584
Cela vient du fait qu'il y a 2 .ORIGIN: 1 en &00C5 et 1 en &C000. Donc le binaire complet va de &00C5 a &D584...
En fait, c'est la permier origine qui compte pour le debut.
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: FORTH sur PC-1500

Message par cgh »

phe78 a écrit :oui bien sur, il suffit de changer les declarations dans WORKAREA car toutes les variables sont initialisées par le kernel (primitive UINIT appelée dans COLD plus quelques bricoles dans l'assembleur après MAIN), j'attends le retour de cgh sur ma question concernant les ORG, car il y aura peut-être d'autres modifs a prévoir
Quelle question ????
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: FORTH sur PC-1500

Message par phe78 »

@cgh, merci pour ta réponse, effectivement je n'avais percuté que le ORG était "vérouillé" dès l'appel de macros ou d'équates.. je modifie tout ça et convertis les déclarations de WORKAREA en définitions d'addresses (il n'y aura qu'un binaire correspondant au code) et renvoie tout le binz.

question : concernant la routine E8CA d'affichage d'un buffer, le TRM mentionne qu'il faut mettre 00 en 7880 (pas 80 qui n'est d'ailleurs pas mentionné) ? peut-être la qualité de mon scan ? effectivement, le desassemblage de MONMON mentionne bien 80, donc ca doit bien fonctionner ;)
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2142
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: FORTH sur PC-1500

Message par cgh »

phe78 a écrit :@cgh, merci pour ta réponse, effectivement je n'avais percuté que le ORG était "vérouillé" dès l'appel de macros ou d'équates.. je modifie tout ça et convertis les déclarations de WORKAREA en définitions d'addresses et renvoie tout le binz.

question : concernant la routine E8CA d'affichage d'un buffer, le TRM mentionne qu'il faut mettre 00 en 7880 (pas 80 qui n'est d'ailleurs pas mentionné) ? peut-être la qualité de mon scan ? effectivement, le desassemblage de MONMON mentionne bien 80, donc ca doit bien fonctionner ;)
&80 est le mode sans "editeur". Ce n'est pas mentionne. La ligne est juste affichee, sans curseur...
&40 est le mode ""editeur". Le clignotement du curseur est alors assure par la ROM itself !!!

Pour l'editeur, il faut t'inspirer du code de monmon, la routine "edition" est en &41E1 (monmon.asm).
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: FORTH sur PC-1500

Message par phe78 »

cool ! j'essaie ça, avec un scroll a plusieurs lignes
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2142
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: FORTH sur PC-1500

Message par cgh »

phe78 a écrit :cool ! j'essaie ça, avec un scroll a plusieurs lignes
Non! La routine &E8CA ne fonctionne que sur le LCD standard !
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 »