Autrement, tu peux aussi regarder le code de la tache console de MMPS : CONSOLE TASK (&1059..&12EC). C'est plus complique, mais ca fait bien plus de choses que monmon.
;; The console TASK handles the following keys:
;; SELECT : Select the next console as active*
;; OFF : Display while the OFF is pressed the PID of the
;; process owning the console, the process name
;; and the console name as follow
;; P NNNNNNNNN CCCCCCCCC
;; ON/BREAK : Send an event KIL to the process owning the
;; console, or kill it if the process do not handle
;; the event
;; If an OUTput (II is set) request is pending:
;; RCL : Clear the pending output (II is cleared)
;; If an INput (I is set) request is pending:
;; left-arrow : Go back one character
;; right-arrow : Go forward one character
;; shift-DEL : Go back to begin of the line
;; shift-INS : Go forward to end of the line
;; CL : Clear from cursor to the end of the line
;; shift-CA : Clear all
;; ENTER : Terminate the INput request, all characters in
;; the line are returned to the calling process
;; down-arrow : Terminate the INput request, all characters
;; from the begin of the line to the cursor are
;; returned to the calling process
;; up-arrow : Return end-of-file error (CARRY is cleared and
;; D3 is returned in A
;;
;; Note* : The 'SELECT' key is the 'double up-down arrow' key on the
;; left of the RCL key.
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 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 :
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.
La version 1202 de PockEmul sous SVN ne compile plus: cpu.h:117 -> CCPU:showDasm() is protected
Le probleme vient du pcxxxx.cpp en ligne 321:
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
Je ne comprends pas, je n'ai pas l'erreur chez moi.
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 a écrit :Je ne comprends pas, je n'ai pas l'erreur chez moi.
J'ai fait un Rebuild all. Je tente un Clean all puis Build all.
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
Dans le doute j'ai fait une modification. arrête ton build et prends les nouvelles sources. et rebuild all
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 a écrit :Dans le doute j'ai fait une modification. arrête ton build et prends les nouvelles sources. et rebuild all
Idem... Desole !
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 a écrit :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.
En fait, c'est la fermeture du premier fichier d'include qui "verrouille" le .ORIGIN: . car le .END (specifie ou non) met a jour les pointeurs geres par lhasm. C'est comme cela depuis le debut de lhasm, bien avant la directive .INCLUDE: . Et cela me sert aussi pour les symboles autogeres de debut, fin et longueur: les fameux <nom de include>$$._start $$._end et $$._length.
Il va falloir que je regarde un moyen pour ne pas mettre les pointeurs dans le cas ou le code est vide...
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 a écrit :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.
En fait, c'est la fermeture du premier fichier d'include qui "verrouille" le .ORIGIN: . car le .END (specifie ou non) met a jour les pointeurs geres par lhasm. C'est comme cela depuis le debut de lhasm, bien avant la directive .INCLUDE: . Et cela me sert aussi pour les symboles autogeres de debut, fin et longueur: les fameux <nom de include>$$._start $$._end et $$._length.
Il va falloir que je regarde un moyen pour ne pas mettre les pointeurs dans le cas ou le code est vide...
OK. J'ai vu comment faire ! Ce sera pour la 0.4.8 (demain). On pourra specifier l'ORIGIN: tant que aucune instruction n'aura ete assemblee.
Merci phe78 pour m'avoir signale ca... En fait, j'avais jamais vraiment regarde, mais ce que tu m'as decrit ne me plaisait pas.
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
Eh bien je ne comprends alors pas pourquoi chez moi ça marche.
J'ai tous mon code de firmaware avec un .ORIGIN: C000
Mon code, et les include.
Le dernier INCLUDE est la workAREA du FORTH et commence par :
.ORIGIN: 40C5
;-------------------------------------------------
; INIT WORKING AREA
;-------------------------------------------------
PRTFLAG:
BYTE 00 ; print flag
CHARPTR:
BYTE 00
DBUFF:
TEXT " "
;-------------------------------------------------
.HOLE
KBUFF: ; Terminal Input Buffer - 128 bytes
.SKIP 0080
;-------------------------------------------------
.HOLE
Eh bien cela me génère correctement le binaire.
EDIT: EH BIEN NON, Je n'ai pas les yeux en face des trous. En effet ça ne marche pas .
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 a écrit :Eh bien je ne comprends alors pas pourquoi chez moi ça marche.
J'ai tous mon code de firmaware avec un .ORIGIN: C000
Mon code, et les include.
Le dernier INCLUDE est la workAREA du FORTH et commence par :
.ORIGIN: 40C5
;-------------------------------------------------
; INIT WORKING AREA
;-------------------------------------------------
PRTFLAG:
BYTE 00 ; print flag
CHARPTR:
BYTE 00
DBUFF:
TEXT " "
;-------------------------------------------------
.HOLE
KBUFF: ; Terminal Input Buffer - 128 bytes
.SKIP 0080
;-------------------------------------------------
.HOLE
Eh bien cela me génère correctement le binaire.
EDIT: EH BIEN NON, Je n'ai pas les yeux en face des trous. En effet ça ne marche pas .
Que dit lhasm en sortie ? cgh> ../lhTools-0.4.8/lhasm -D ROM=1 -o b2 MAIN.asm Written 55269 bytes (00C5:D8AA) to b2 Checksum D584
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
non il générai bien le code mais ma workarea était à la suite d u code e c'est donc pour ça qu'il écrivait en ROM à l'éxécution.
Tout s'explique donc...
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 a écrit :non il générai bien le code mais ma workarea était à la suite d u code e c'est donc pour ça qu'il écrivait en ROM à l'éxécution.
Tout s'explique donc...
Cool !
Oui, il faut bien verifier le message de sortie de lhasm (c'est pour cela que je l'ai ajoute...). Je vais d'ailleurs faire une remarque la dessus dans le manuel
Quand on lance lhasm, par exemple: lhasm -D ROM=1 -o MAIN.bin MAIN.asm
On va obtenir: Written55269bytes(00C5:D8AA)to MAIN.bin ChecksumD584
Ce qui signifie:
55269 : c'est la taille de l'image ! Donc 1h06 demande pour une lecture du wav via CLOAD M
(00C5:D8AA) : Adresse de base de l'image (celle de telechargement) et adresse de fin (dernier octet + 1): Le code est donc de &00C5 a &D8A9.
D584 : Somme de controle simple (ajout de tous les octets de l'adresse de base a l'adresse de fin. Cela correspond a la commande : 00C5 D8AA sous XMON. En cas de crash ou de doute, on peut tres simplement verifier que l'image n'est pas corrompue (hmm enfin presque car la somme simple ne permet de detecter 2 octets inverses...)
@Remy : Un ajout de la somme de controle (cks += mem pour i = [base, end[; cks est une valeur sur 16-bits non signe), ce serait pas mal dans PockEmul
Je pense aussi qu'un warning signifiant que le code est "detecte" en ROM (&8000..&FFFF) pourrait etre a envisager (sauf si un .ROM est specifie dans le code pour dire que l'on veut du code en ROM). Qu'en dites-vous ?
Je vais ajouter les directives .ROM et .RAM specifiant que l'on est en "partition ROM" (&8000..&FFFF) ou en "partition RAM" (&0000..&67FF ou &7FFF). Si on fixe la directive .RAM dans des adresses > &7FFF -> FATAL error ! De meme, si le code .RAM deborde sur la zone .ROM -> FATAL error !
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
Avec les partition ROM et RAM paramétrable.bien sur, je pense que c'est un plus.
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
C'est pour ça que j'ai mis deux paramètres ORGRAM et ORGROM separes. On pourra eventuellement rajouter une troisieme zone correpondant a une zone EEPROM pour la sauvegarde du dictionnaire utilisateur.