OVH Cloud OVH Cloud

Lettre à Monsieur Doucet

150 réponses
Avatar
P4nd1-P4nd4
Averelll avait écrit le 18.01.2010 :
> Michel Doucet a écrit :
>> Bonjour/soir, le Mon, 18 Jan 2010 18:38:26 +0100, *Averelll* a caressé son
>> clavier pour nous dire dans le message suivant:
>>
>>>> Je préfère une Dacia qui marche qu'une Porsche bling-bling qui doit
>>>> aller en révision tous les 15 jours ...
>>>>
>>> tellement imbu de votre petite personne que vous passez votre temps à
>>> vouloir imposer votre choix en proférant mensonges et contrevérités.
>>
>> Préférer ne veut pas dire imposer.
>
> C'est pourquoi depuis des années vous ne cessez de troller les groupes
> windows avec mépris et suffisance.
>
> > Imposer c'est ce que MS$ fait avec ces
>> softs troués installés sans le consentement des consommateurs au mépris des
>> lois européennes.
>>
> et c'est reparti avec vos obsessions. Vous êtes un grand malade.


Linux n'est pas le préféré, et il n'arrive pas à s'imposer

Tirer en leçon, Monsieur le Trôleur Obsessionnel

L'étrange chimie qui agite votre cerveau créée des effets propres à
votre personne, vous faisant croire à l'universalité de vos propos, qui
sont, je dois le dire, juste délirants

Avec la lumière du jour, il est préférable d'ouvrir grand les fenêtres
et de vous laisser pénétrer par la lumière salvatrice et réparatrice,
qui dissipera les ombres qui se cachent derrière vous

Le pingouin qui hante vos rêves doit vous quitter au chant du coq,
quitte à le retrouver dès la nuit tombée

Ces quelques heures de répits seront indiscutablement profitables à
tous les deux, et ils vous remercieront chaleureusement

--
P4nd1-P4nd4 vous salue, et annonce que le petit ourson possède
désormais son blog
p4nd1-p4nd4.over-blog.com

10 réponses

Avatar
JKB
Le 30-01-2010, ? propos de
Re: 6809 et 68000,
Pascal Hambourg ?crivait dans fr.comp.os.linux.configuration :
JKB a écrit :
Pascal Hambourg ?crivait dans fr.comp.os.linux.configuration :

Un système à base de 68000 en wrapping ? Tu as dû sacrément t'amuser...



Ouaips. La carte était un peu plus grande qu'un format A4, avec
toute une palanquée et demi de 74xx pour gérer le bus (et de drivers
de bus parce que la puissance sortante du 68K n'était pas assez
grande pour gérer les composants de gestion du bus !).



En fait je n'ai utilisé le 68000 que dans une version microncontrôleur
68302 qui intégrait toute la tuyauterie nécessaire et nécessitait très
peu de logique additionnelle pour s'interfacer avec des circuits
externes. Ça doit être pour ça que j'en ai gardé un assez bon
souvenir... :-)



Certainement ;-) J'ai utilisé le 68008, c'était un bonheur à côté du
68000 !

Côté 6809, il y avait un 6809, un 6840, un 6850, une mémoire RAM de 2Ko,
une PROM de 8, un 74138 et un registre à décalage 8 bits, des
résistances, condensateurs, une horloge TTL 8MHz et c'est à peu près
tout...



Du grand classique, y compris le 74138 comme décodeur d'adresses...
Le registre à décalage, c'était pour l'émission/réception des données ?



Oui. En fait le timer fournissait deux fréquences, l'une étant le
huitième de l'autre. Une tâche remplissait le registre qui
'sérialisait' les bits vers la sortie. J'avais essayé un 6852 (de
mémoire une interface série synchrone), mais ça ne fonctionnait pas
correctement pour monusage.

Le problème est qu'on avait à l'époque (je ne sais pas si ça a
évolué depuis puisque je n'ai plus été confronté au problème) des
périphériques (incluant la mémoire) à seize bits, mais avec un
signal de validation pour tout le bus.



C'est effectivement une situation à problème, qui interdit notamment
l'écriture sur 8 bits puisque ça écrirait n'importe quoi sur les 8 bits
restants.

Sur le 68K, tu as deux
signaux asynchrone de validation des deux octets du bus de données
et rien ne te garantit que les deux octets du bus soient validés en
_même_ temps. J'ai passé des jours à débugguer ce genre de problème
à l'analyseur logique !



Tu veux dire _exactement_ en même temps lors d'un accès 16 bits ? Parce
que d'après tous les chronogrammes que j'ai pu avoir sous les yeux, /UDS
et /LDS bougent en même temps.



Non. Si on regarde avec une résolution du cycle CPU, c'est vrai. Si
on regarde finement, ça ne l'est plus. Il peut y avoir un quart ou
un demi cycle de différence selon les instructions. Autant dire que
tu peux te retrouver avec des choses amusantes lorsque tu essayes
d'écrire en mémoire le résultat d'une lecture sur un bus qui est en
haute impédance ;-)

Mais c'est vrai que les signaux du bus du
68000 sont asynchrones au sens où ils ne sont pas référencés par rapport
à une horloge externe (ils le sont forcément en interne par rapport à
l'horloge CLK, mais les relations de timing par rapport à cette horloge
sont tout sauf évidentes à déterminer). Manifestement c'était prévu pour
piloter directement de la mémoire 8 bits asynchrone classique de
l'époque, mais pour le reste ce n'était pas un cadeau pour faire les
choses proprement comme on m'avait apris à l'école (machines synchrones
de Moore, toussa). D'où l'ajout des signaux /VPA et E pour piloter les
circuits périphériques à bus synchrone de la famille 6800 d'ailleurs.

Bref, c'était jouable lorsque tu utilisais
des périphériques 8 bits ou deux mémoires 8 bits en parallèle, mais
c'était indémerdable dès que tu utilisais un CAN 12 bits (par
exemple).



Te rappelles-tu quel était le problème exactement ?



Le problème était simple : il fallait générer le 'CS' sur le
périphérique de sorte que le processeur ait accès en même temps à
l'ensemble des bits. Considère que tu veuilles écrire dans un
registre à 12 bits d'un CNA. Tu dois sélectionner le CNA à l'aide du
'CS' à partir du moment où les données sont valides sur les deux
octets du bus. Pour peu que ton CNA soit aussi synchronisé par E,
c'est assez coton à faire (parce que la fenêtre temporelle de
données valides diminue sensiblement et que si tu ne fais pas gaffe
à ton programme, rien ne t'assure que tes 12 bits seront présent
simultanément sur le bus).

Quant à adresser des périphériques 8 bits sur un bus de 16, ça
n'avait aucune conséquence même en écriture



Ça faisait quand même des trous dans l'adressage puisqu'un périphérique
8 bits était accessible à des adresses paires consécutives s'il était
connecté sur l'octet de poids fort du bus de données et à des adresses
impaires s'il était connecté sur l'octet de poids faible. Et pour
accéder efficacement à un registre 16 bits d'un périphérique 8 bits, il
fallait utiliser une instruction spéciale MOVEP qui tenait compte de
cette particularité.



Ça, c'est presque du détail au regard de tous les autres problèmes
de validité des adresses et des données...

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Avatar
Pascal Hambourg
Patrick Lamaizière a écrit :

Z'avez pas l'impression d'être carrément hors charte là ?



Si, le fil a dérivé depuis un moment. On dérange vraiment ?
Avatar
batyann811
Pascal Hambourg a écrit :

Si, le fil a dérivé depuis un moment. On dérange vraiment ?


Non. En tous cas pas moi, je ne suis pas là.
Avatar
Pascal Hambourg
JKB a écrit :
Pascal Hambourg écrivait dans fr.comp.os.linux.configuration :

En fait je n'ai utilisé le 68000 que dans une version microncontrôleur
68302 qui intégrait toute la tuyauterie nécessaire et nécessitait très
peu de logique additionnelle pour s'interfacer avec des circuits
externes. Ça doit être pour ça que j'en ai gardé un assez bon
souvenir... :-)



Certainement ;-) J'ai utilisé le 68008, c'était un bonheur à côté du
68000 !



Le 68032 avait une entrée pour faire fonctionner le bus de données en
mode 8 bits ou 16 bits. Ainsi pour une petite application il suffisait
d'ajouter juste une PROM et une SRAM 8 bits pour avoir un système
opérationnel.

Sur le 68K, tu as deux
signaux asynchrone de validation des deux octets du bus de données
et rien ne te garantit que les deux octets du bus soient validés en
_même_ temps. J'ai passé des jours à débugguer ce genre de problème
à l'analyseur logique !



Tu veux dire _exactement_ en même temps lors d'un accès 16 bits ? Parce
que d'après tous les chronogrammes que j'ai pu avoir sous les yeux, /UDS
et /LDS bougent en même temps.



Non. Si on regarde avec une résolution du cycle CPU, c'est vrai. Si
on regarde finement, ça ne l'est plus.



Forcément, à une échelle suffisamment réduite il y a toujours un écart.
Mais il doit rester dans l'intervalle prévu par les spécifications de
timing.

Il peut y avoir un quart ou
un demi cycle de différence selon les instructions.



Cycle d'horloge d'entrée CLK ? Cela correspond à peu près aux timings de
la version à 8 MHz dans le manuel (seconde source Thomson-Efcis, en
français s'il vous plaît) que j'ai ressorti.

- période d'horloge : 125 ns min
- de l'horloge haute à AS, DS bas : 60 ns max
- de l'horloge basse à AS, DS haut : 40 ns max

Le décalage entre /UDS et /LDS peut donc atteindre au maximum 60 ns,
soit quasiment la moitié du cycle.

Autant dire que
tu peux te retrouver avec des choses amusantes lorsque tu essayes
d'écrire en mémoire le résultat d'une lecture sur un bus qui est en
haute impédance ;-)



Cela ne devrait pas arriver si l'écriture est validée par la combinaison
des deux signaux de validation.

Le problème était simple : il fallait générer le 'CS' sur le
périphérique de sorte que le processeur ait accès en même temps à
l'ensemble des bits. Considère que tu veuilles écrire dans un
registre à 12 bits d'un CNA. Tu dois sélectionner le CNA à l'aide du
'CS' à partir du moment où les données sont valides sur les deux
octets du bus.



Oui.

Pour peu que ton CNA soit aussi synchronisé par E,
c'est assez coton à faire (parce que la fenêtre temporelle de
données valides diminue sensiblement et que si tu ne fais pas gaffe
à ton programme, rien ne t'assure que tes 12 bits seront présent
simultanément sur le bus).



Je suis un peu surpris car E n'est utilisé que dans un cycle de type
6800, plus long qu'un cycle d'écriture ordinaire (10 cycles d'horloge
contre 4 minimum). Et d'après le diagramme des temps que j'ai sous les
yeux E n'est actif que lorsque les données sont disponibles en sortie.
La fenêtre de validité des données devrait donc être au moins de la
largeur de l'impulsion positive de E.
Avatar
JKB
Le 30-01-2010, ? propos de
Re: 6809 et 68000,
Pascal Hambourg ?crivait dans fr.comp.os.linux.configuration :
JKB a écrit :
Il peut y avoir un quart ou
un demi cycle de différence selon les instructions.



Cycle d'horloge d'entrée CLK ? Cela correspond à peu près aux timings de
la version à 8 MHz dans le manuel (seconde source Thomson-Efcis, en
français s'il vous plaît) que j'ai ressorti.

- période d'horloge : 125 ns min
- de l'horloge haute à AS, DS bas : 60 ns max
- de l'horloge basse à AS, DS haut : 40 ns max

Le décalage entre /UDS et /LDS peut donc atteindre au maximum 60 ns,
soit quasiment la moitié du cycle.



C'est exactement ce que je disais.

Autant dire que
tu peux te retrouver avec des choses amusantes lorsque tu essayes
d'écrire en mémoire le résultat d'une lecture sur un bus qui est en
haute impédance ;-)



Cela ne devrait pas arriver si l'écriture est validée par la combinaison
des deux signaux de validation.



Ça, c'est la théorie. Lorsque tu cascades plusieurs composants de la
famille 74, tu as très vite consommé ta fenêtre de validité en temps
de commutation de la logique de validation. Chaque fois que tu
rajoutes un signal, il faut compter avec le décodage de ce signal.
Je reprends tes chiffres (j'ai la flemme de chercher ma doc Hitachi
qui plus est en anglais). Le décalage peut aller jusqu'à 60 ns sur
une période de 125 ns. C'est énorme. Il y a quinze ans, les mémoires
statiques standard avaient un temps de cycle de 200 ns. J'avais réussi
à faire acheter des mémoires statiques de 60 ns (2 * 64 Ko) mais ça
ne passait pas (il y avait des problèmes d'écriture), puis a faire
acheter des mémoires à 12 ns d'accès en écriture et je me
souviens que ça coûtait une petite fortune (mais ça marchait).

Le problème était simple : il fallait générer le 'CS' sur le
périphérique de sorte que le processeur ait accès en même temps à
l'ensemble des bits. Considère que tu veuilles écrire dans un
registre à 12 bits d'un CNA. Tu dois sélectionner le CNA à l'aide du
'CS' à partir du moment où les données sont valides sur les deux
octets du bus.



Oui.

Pour peu que ton CNA soit aussi synchronisé par E,
c'est assez coton à faire (parce que la fenêtre temporelle de
données valides diminue sensiblement et que si tu ne fais pas gaffe
à ton programme, rien ne t'assure que tes 12 bits seront présent
simultanément sur le bus).



Je suis un peu surpris car E n'est utilisé que dans un cycle de type
6800, plus long qu'un cycle d'écriture ordinaire (10 cycles d'horloge
contre 4 minimum). Et d'après le diagramme des temps que j'ai sous les
yeux E n'est actif que lorsque les données sont disponibles en sortie.
La fenêtre de validité des données devrait donc être au moins de la
largeur de l'impulsion positive de E.



J'ai toujours utilisé E pour synchroniser le bus externe à la façon
du 6809. Il y avait une couillonnade que je viens de vérifier dans
le databook du 6809 (Motorola, première source ;-) ). E est valide
sur un front et non sur un niveau. Donc la commutation de E ne
t'assure la validité des données que sur le front et non sur la
durée du niveau. C'est à toi de maintenir tes données dans un driver
de bus si tu en as besoin. Le E du 68K étant compatible avec le E du
6809, je suppose qu'il en est de même (les interfaces de type 6821,
6840, 6850 attendent des fronts).

Je propose d'arrêter à parce qu'on est passablement hors charte...

Cordialement,

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Avatar
Pascal Hambourg
JKB a écrit :

Ça, c'est la théorie. Lorsque tu cascades plusieurs composants de la
famille 74, tu as très vite consommé ta fenêtre de validité en temps
de commutation de la logique de validation. Chaque fois que tu
rajoutes un signal, il faut compter avec le décodage de ce signal.



Oui, 10 ns à la louche par étage combinatoire cascadé en TTL 74LS.

Je reprends tes chiffres (j'ai la flemme de chercher ma doc Hitachi
qui plus est en anglais). Le décalage peut aller jusqu'à 60 ns sur
une période de 125 ns. C'est énorme. Il y a quinze ans, les mémoires
statiques standard avaient un temps de cycle de 200 ns.



J'ai encore de vieilles EPROMs 2764 avec un temps d'accès (pas de cycle)
de 400 ns. Mais ça suffisait pour un 6809 à 1 MHz.

J'avais réussi
à faire acheter des mémoires statiques de 60 ns (2 * 64 Ko) mais ça
ne passait pas (il y avait des problèmes d'écriture), puis a faire
acheter des mémoires à 12 ns d'accès en écriture et je me
souviens que ça coûtait une petite fortune (mais ça marchait).



Tu m'étonnes que ça devait coûter cher. Ce genre de SRAM rapide était
utilisé comme mémoire cache il me semble.

J'ai toujours utilisé E pour synchroniser le bus externe à la façon
du 6809. Il y avait une couillonnade que je viens de vérifier dans
le databook du 6809 (Motorola, première source ;-) ). E est valide
sur un front et non sur un niveau. Donc la commutation de E ne
t'assure la validité des données que sur le front et non sur la
durée du niveau. C'est à toi de maintenir tes données dans un driver
de bus si tu en as besoin.



Oui, les données sont ou doivent être valides un certain temps avant et
après le front descendant.

Le E du 68K étant compatible avec le E du
6809, je suppose qu'il en est de même (les interfaces de type 6821,
6840, 6850 attendent des fronts).



Dans le diagramme du cycle de lecture/écriture de mon manuel du 68000 on
a l'impression que les données en écriture sont valides pendant tout le
temps où E est haut, mais impossible de trouver des timings qui le
confirment...

Je propose d'arrêter à parce qu'on est passablement hors charte...



D'accord.
Avatar
Toxico Nimbus
Le Sat, 30 Jan 2010 00:38:48 +0100, Pascal Hambourg a écrit :

JKB a écrit :

Lorsque tu as programmé des trucs temps réel sur des 6809, tu
utilisais en _même_ temps U et S (le pendant de SSP et USP).



Dans mon souvenir, le registre U du 6809 n'est pas le pendant du
registre USP du 68000. U est le pointeur de pile "utilisateur" au sens
où comme tu le dis l'utilisateur peut en faire ce qu'il veut, comme les
registres d'index X et Y mais avec en plus le support des instructions
PSH et PUL pour empiler/dépiler le contenu de registres. En revanche USP
est le pointeur de pile utilisateur au sens où c'est le pointeur de pile
système SP (utilisé pour les appels de sous-programme, comme le registre
S du 6809) actif lorsque le processeur est en mode utilisateur, par
opposition à SSP qui est le pointeur de pile système SP actif lorsque le
processeur est en mode superviseur. Si tu as besoin de l'équivalent de U
sur 68000, tu peux utiliser un registre d'adresse An quelconque autre
que A7 et les instructions PSH et PUL du 6809 peuvent être remplacées
par l'instruction MOVEM du 68000.



Pour autant que je sache, movem sert surtout à déplacer des données par
lots. Ce qui permet d'utiliser n'importe quel registre d'adresse comme
une pile, ce sont les modes d'adressage indirects de registre d'adresse
avec prédécrémentation ou postincrémentation.

--
Toxico Nimbus
Avatar
Toxico Nimbus
Le Fri, 29 Jan 2010 15:20:10 +0100, Yliur a écrit :

surtout de la façon dont c'est fait dans Java
(ramasse-miette et autres joyeusetés du même tonneaux,
bidouillages infâmes avec des connecteurs de base de données parce que
tu ne sais jamais vraiment quand tes objets vont être libérés...).



?
Tes données sont libérées quand elles ne sont plus référencées.



Encore faut-il qu'elles aient été déréférencées correctement...

--
Toxico Nimbus
Avatar
Toxico Nimbus
Le Sat, 30 Jan 2010 20:28:43 +0100, Pascal Hambourg a écrit :


L'instruction MOVEM sert à transférer un sous-ensemble quelconque des 16
registres de donnée et d'adresse depuis ou vers la mémoire. Combinée
avec les modes d'adressage que tu cites, elle permet d'émuler les
instructions d'empilage/dépilage multiple PSH et PUL du 6809 (sauf pour
le registre d'état SR ou de code condition CCR qui nécessitent des
instructions MOVE spéciales).



OK, je ne voyais pas un empilage/dépilage multiple dans psh et pul.

--
Toxico Nimbus
Avatar
Yliur
Le 30 Jan 2010 18:19:07 GMT
Toxico Nimbus a écrit :

Le Fri, 29 Jan 2010 15:20:10 +0100, Yliur a écrit :

>> surtout de la façon dont c'est fait dans Java
>> (ramasse-miette et autres joyeusetés du même tonneaux,
>> bidouillages infâmes avec des connecteurs de base de données parce
>> que tu ne sais jamais vraiment quand tes objets vont être
>> libérés...).
>
> ?
> Tes données sont libérées quand elles ne sont plus référenc ées.

Encore faut-il qu'elles aient été déréférencées correctement. ..




Ce n'est pas si facile de ne pas déréférencer des données :) . C'est
vrai que ça peut arriver, mais je répondais à la remarque qui disait
qu'on ne sait pas *quand* les données vont être libérées.