Special !



Mobile version of
the aldweb Site

m.aldweb.com


Neither French, nor English?

Try one of these flags then:
[de] [es] [it] [pt]
aldweb

Close I. aldweb

Close II. PC Freeware

Close III. Palm Freeware

Close IV. Palm Shareware

Close V. iziBasic Palm

Close VI. Palm Knowledge

Close VII. Pocket Computer

Close VIII. miniPortail

Geolocation
Search




Weather / Spam / www

Lyon Weather


aldweb against spam


Newsletter
To receive news about this website, consider subscribing to our Newsletter.
Subscribe
Unsubscribe
293 Subscribers
Family's web sites

Webmaster - Infos
Poll
What do you think of the new design of the aldweb Site?
 
Great !
Beautiful
Average
So ugly...
Results
Visits

   visitors

   visitors online

Friends News
Pagerank

Google Ads
forum.gifForum - Topic #12

Forum - Forum
-


active  Topic # 12  Discussion générale PC-E500 (Bascom, Forth...)

18/09/2002 @ 13:22
by aldweb

Anonymous



Vous trouverez dans ce thread du forum une copie d'un long échange d'e-mails entre Claude et Sébastien.
C'est sur la bonne idée de Sébastien que cette discussion d'intérêt général sur le PC-E500 a été mise ici à la disposition de tous.

For you English readers, you will find in this forum's thread a copy of a rich exchange of e-mails between Claude and Sebastien. Sorry, they are both French, so this topic will be in this language (please use an online translator for reading it).

Sebastien is the one who gave the good idea of putting this discussion of general interest on the PC-E500, so that everybody interested can give a look to it.
Write to aldweb   Post an answer  Top

[]   

StartPrevious [ 1 2 3 4 5 ] NextEnd
Answer n 21
--------
18/09/2002 @ 13:53
by Claude

Anonymous

visitor
Concernant ce WE :
Je ne me fixe pas d'objectif pour ce we. Du moins pas avoué. Je crains d'être arreté tres
vite par des détails et perdre bcp de temps.
Précisemment, mon doux rêve c'est de la vitesse dans le moteur graphique. Je sais que c'est
possible, j'avais récupéré (il y a si longtemps) un tetris en asm qui était tout à fait
honnête (je crois me souvenir). Mais l'aventure me semble intéressante sur son ensemble.

Concernant nt:
Nous avons tous migré sous W2000.. et oh comme nous regrettons notre bon vieux nt! (même en
sp6)

Concernant mes dernières interrogations :
quelle est la zone qui permet de faire des call courts ?
l'acces à l'extension mémoire est il physiquement plus lent ?
A quel moment et pourquoi faire la reservation de place pour la zone du langage machine ?
Cette zone doit elle être forcément contigue avec la zone systeme ?
Write to Claude   Post an answer  Top
Answer n 22
--------
18/09/2002 @ 13:54
by Sébastien

Anonymous

visitor
J'ai aidé un japonnais à traduire ses pages en français sur :
http://plaza10.mbn.or.jp/~uekiya/
Il y est expliqué comment accéder directement à l'écran sans passer par
les fonctions de l'IOCS (il y a quelques erreurs dans un des tableaux si
je me souviens bien mais c'est facile à corriger). L'utilisation d'une
VRAM (écran virtuel en RAM) est indispensable pour des performances
optimales : On construit la scene puis on la projette en une seule
opération sur l'écran. Ci-joint le code source de VOGUE (le fichier
intéressant est comme par hasard screen.s !). Je pense qu'il n'y a pas
besoin de pousser jusque là toutefois (il y même du code automodifiant
par endroits !) mais c'est un bon exemple.


> Concernant mes dernières interrogations :
> quelle est la zone qui permet de faire des call courts ?

Tu peux faire des appels courts dans tous les segments. La zone
commençant à l'adresse jusqu'à est libre, ce qui te fait
512 octets pour t'entraîner (elle est utilisée par le système pour gérer
l'affichage des menus par exemple et ne contient aucune donnée
critique).

> l'acces à l'extension mémoire est il physiquement plus lent ?

Je n'ai pas remarqué.

> A quel moment et pourquoi faire la reservation de place pour la zone du langage machine ?

C'est la première chose à faire avant de charger un programme en
langage machine (sauf s'il est protégé par un bloc "système"). Le
système sait qu'il ne doit pas toucher à cette zone, le reste étant
susceptible d'être écrasé. La recette pour allouer une zone est donnée
dans la manuel technique du PC-E500 (section SYSTM: de l'IOCS) :
POKE &BFE03,&1A,&FD,&B,&xx,&yy,&z
' &BFD1A est l'adresse du pointeur sur le début de la zone de langage
machine ;
' &zyyxx est la quantité de mémoire désirée.
CALL &FFFD8
' Routine d'allocation (qui se termine par un appel à la routine
RESET).

> Cette zone doit elle être forcément contigue avec la zone systeme ?

Elle l'est de facto (l'adresse de début et de fin de zone sont les
seules informations dont dispose le système quant au hardware il est
bien entendu dépourvu de MMU !). Quel intérêt vois-tu à une zone
fragmentée ?
Write to Sébastien   Post an answer  Top
Answer n 23
--------
18/09/2002 @ 13:55
by Claude

Anonymous

visitor
Au fait, hier soir j'ai jeté un oeil a ton source.
As tu porté partie de ce code depuis un autre asm ?
Write to Claude   Post an answer  Top
Answer n 24
--------
18/09/2002 @ 13:55
by Sébastien

Anonymous

visitor
Non, pourquoi ? L'assembleur utilisé est XASM32 (XASM a une table de
symboles trop petite).
La moitié du code est du code Forth (du moins, c'est de l'assembleur
qui une fois compilé produit le même code que celui qu'aurait produit le
compilateur Forth sur le code source Forth équivalent : c'est comme cela
que j'ai "bootstrappé" le système). Il faut bien garder à l'esprit que
Forth est écrit en Forth ; XASM32 m'a juste servi à "hacker" la machine
cible.
Si tu aimes les sujets comme la métacompilation ou la recherche de
point fixe, Forth constitue le système "utilisable" le plus simple qui
permette leur exploration.
Write to Sébastien   Post an answer  Top
Answer n 25
--------
18/09/2002 @ 13:56
by Claude

Anonymous

visitor
l'emulateur démarre avec ton S1.RAM, finalement!
Write to Claude   Post an answer  Top
Answer n 26
--------
18/09/2002 @ 13:56
by Sébastien

Anonymous

visitor
Bonne nouvelle ! Pour voir si tout va bien, une fois Forth démarré,
tape "WORDS" et appuie sur "enter". Normalement cela devrait t'afficher
le contenu du dictionnaire (tous les mots de l'unique vocabulaire,
depuis les plus récents jusqu'aux plus vieux).
Avant de commencer une session, tu peux entrer quelquechose comme :
MARKER MYSTUFF
qui définit le mot "MYSTUFF". Si par la suite tu entres à nouveau
"MYSTUFF", tout ce que tu auras tapé depuis sera "oublié" ("MYSTUFF" y
compris). C'est pratique pour faire des essais.
Une alternative consiste à écrire plus simplement :
ANEW MYSTUFF
qui a le même effet que précédemment à la différence que si tu écris à
nouveau
ANEW MYSTUFF
cela aura pour effet non pas de te créer un autre "MYSTUFF" masquant le
premier mais d'effacer le dictionnaire jusqu'à "MYSTUFF" ("MYSTUFF" non
compris cette fois).

Petit test rigolo (dans le style "objet" avec exécution vectorisée
inutile) :

3 CONSTANT #RESET
2 CONSTANT #COUNT
1 CONSTANT #SHOW

: EXECUTE-METHOD ( addr n -- xt )
OVER SWAP CELLS + @ EXECUTE
;

: COUNTER ( reset-xt count-xt show-xt init -- )
CREATE , , , ,
DOES>
SWAP
DUP #SHOW #RESET 1+ BETWEEN IF EXECUTE-METHOD EXIT THEN
." Unknown method!"
;

( test )

:NONAME 0 SWAP ! ; RESET method
:NONAME DUP @ 1+ SWAP ! ; COUNT method
:NONAME ? ; SHOW method
0 Inital value
COUNTER C1 Create an instance (singleton pattern)

:NONAME 0 SWAP ! ." HEY! I've been initialized!" ; RESET method
:NONAME DUP @ 10 + SWAP ! ." Added 10." ; COUNT method
:NONAME ." My value is: " ? ; SHOW method
0 Inital value
COUNTER C2 Create an instance
(singleton pattern)

#SHOW C1
#COUNT C1
#SHOW C1
#RESET C1
#SHOW C1

#SHOW C2
#COUNT C2
#SHOW C2
#RESET C2
#SHOW C2

J'ai pas testé mais ça devrait marcher...
Write to Sébastien   Post an answer  Top
Answer n 27
--------
18/09/2002 @ 13:57
by Claude

Anonymous

visitor
J'aimerai qd meme bien avoir tes petites notes sur la zone systeme!


Concernant ton FORTH: (comme n'importe quel prog asm d'ailleurs)

Je voudrais que tu me donnes la manip scrupuleusement et bêtement détaillée pour passer du .s
à l'execution, avec des exemples de commande s'il y a lieu :

Cross compilation : .s -> code
reservation memoire, eom-size? ( POKE&HBFE03,&H1A,&HFD,&H0B,&H(low),&H(mid),&H(high) )
load sur s1.ram (dump sur S1.RAM)
appel (call add)

merci,
Write to Claude   Post an answer  Top
Answer n 28
--------
18/09/2002 @ 13:57
by Sébastien

Anonymous

visitor
> J'aimerai qd meme bien avoir tes petites notes sur la zone systeme!

Tu les auras, ne t'inquiète pas !

> Concernant ton FORTH: (comme n'importe quel prog asm d'ailleurs)
>
> Je voudrais que tu me donnes la manip scrupuleusement et bêtement détaillée pour passer du
.s à l'execution, avec des exemples de commande s'il y a lieu :
>
> Cross compilation : .s -> code
> reservation memoire, eom-size? ( POKE&HBFE03,&H1A,&HFD,&H0B,&H(low),&H(mid),&H(high) )
> load sur s1.ram (dump sur S1.RAM)
> appel (call add)

Compilation du fichier source FORTH.S en FORTH.BIN (ne pas mettre
d'espace entre -O et FORTH.BIN) :

XASM32 FORTH.S -OFORTH.BIN (ne pas mettre l'option -TB qui ne sert à
rien ici)

Ensuite, tu te compiles un petit utilitaire dans le genre de celui qui
suit dans le langage que tu veux (je t'ai mis la version en Smalltalk
qui est la plus ressemblante au Java) :

| resultFilename binaryFilename ramCopyFilename resultStream rs1 rs2 |
resultFilename := (Filename named: 'C:tempS1.RAM') withEncoding:
#binary.
binaryFilename := (Filename named: 'c:tempFORTH.BIN') withEncoding:
#binary.
ramCopyFilename := (Filename named: 'c:tempCOPIE DE S1.RAM')
withEncoding: #binary.
resultStream := resultFilename writeStream.
binaryStream := binaryFilename readStream.
ramCopyStream := ramCopyFilename readStream.
16r30000 timesRepeat: [resultStream nextPut: (ramCopyStream next)]. "On
copie les 30000h premiers octets de COPIE DE S1.RAM."
binaryStream skip: 16. "On saute l'en-tête de FORTH.BIN. 6 à la place
de 16 si compilé avec option -TB"
[binaryStream atEnd] whileFalse: [resultStream nextPut: (binaryStream
next). ramCopyStream next]. "On insère FORTH.BIN dans S1.RAM et on
synchronise l'avancée sur COPIE DE S1.RAM."
[ramCopyStream atEnd] whileFalse: [resultStream nextPut: (ramCopyStream
next)]. "On complète S1.RAM avec le reste de COPIE DE S1.RAM."
binaryStream close.
ramCopyStream close.
resultStream close.

Ça te produira un S1.RAM lisible par l'émulateur sans utiliser le
moindre protocole de communication.

Pour réserver de la mémoire, il faut lire la valeur courante du
pointeur de zone de langage machine et lui soustraire celle indiquée en
argument du mnémonique ORG dans le fichier assembleur :
Si ORG vaut et que
HEX$ (PEEK &BFD1A + 256 * PEEK &BFD1B + 65536 * PEEK &BFD1C - &B9000)
donne zyyxx, faire :
POKE&BFE03,&1A,&FD,&B,&xx,&yy,&z
CALL &FFFD8

L'adresse du CALL est généralement celle qui est indiquée en argument
du mnémonique ORG dans le fichier assembleur (c'est toujours le cas avec
mes versions de Forth).
Write to Sébastien   Post an answer  Top
Answer n 29
--------
18/09/2002 @ 13:58
by Claude

Anonymous

visitor
----------
Hello,

La j'ai un soucis :
----------

Pour réserver de la mémoire, il faut lire la valeur courante du
pointeur de zone de langage machine et lui soustraire celle indiquée en
argument du mnémonique ORG dans le fichier assembleur :

----------
Sur quoi est censé pointer le pointeur de zone avant la nouvelle valeur ?
fin de mémoire "user", début d'un prog en langage machine ?

Qu'y a-t-il en &0BFD1A ?

----------
Write to Claude   Post an answer  Top
Answer n 30
--------
18/09/2002 @ 14:00
by Sébastien

Anonymous

visitor
Début d'un programme en langage machine... de longueur nulle ! (du
moins après un ALL RESET)
Je ne me rappelle pas la valeur par défaut de ce pointeur (&BF858 ?).
Pour t'en assurer, fais un ALL RESET (touche ON enfoncée !) et lis la
valeur en question.
La routine d'allocation alloue le nombre d'octets spécifiés pour une
zone donnée (dans notre cas, la zone pointée par &BFD1A). Elle ne permet
pas d'agrandir ou de rétrécir une zone préalablement définie.

> Qu'y a-t-il en &0BFD1A ?

Ce pointeur n'est utilisé que par la routine d'allocation de mémoire.
Comme cette routine doit faire des déplacements de zones de mémoire
(IOCS, FCS, zones de travail de l'interpréteur BASIC, éventuellement les
zones "réservées pour de futures extensions") de manière à mettre la
machine dans un état cohérent à la fin des opérations, elle a besoin de
faire un minimum d'arithmétique sur les pointeurs, d'où &BFD1A et ses
voisins (cf. manuel technique).
Write to Sébastien   Post an answer  Top
StartPrevious [ 1 2 3 4 5 ] NextEnd
active topic active   closed topic closed   Important! Important!   New New message   -   Correct Correct message   Close Close topic   Make sticky Make sticky
[]



 
^ Top ^