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).
Sur le 68K, c'est impossible. Par ailleurs, le U du 6809 ne
deviendra jamais S.
Sur le 68K, USP et SSP sont deux pointeurs de piles
susceptibles d'être modifiés par le processeur. Ça fait une sacrée
différence.
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).
Sur le 68K, c'est impossible. Par ailleurs, le U du 6809 ne
deviendra jamais S.
Sur le 68K, USP et SSP sont deux pointeurs de piles
susceptibles d'être modifiés par le processeur. Ça fait une sacrée
différence.
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).
Sur le 68K, c'est impossible. Par ailleurs, le U du 6809 ne
deviendra jamais S.
Sur le 68K, USP et SSP sont deux pointeurs de piles
susceptibles d'être modifiés par le processeur. Ça fait une sacrée
différence.
de memoire aussi, c'est plutot qu'il y avait deux a7 en // selon le
mode user ou supervisor. mais beaucoup de compilos et/ou runtime
se reservaient l'usage exclusif de a6. c'est loin, tout ça.
de memoire aussi, c'est plutot qu'il y avait deux a7 en // selon le
mode user ou supervisor. mais beaucoup de compilos et/ou runtime
se reservaient l'usage exclusif de a6. c'est loin, tout ça.
de memoire aussi, c'est plutot qu'il y avait deux a7 en // selon le
mode user ou supervisor. mais beaucoup de compilos et/ou runtime
se reservaient l'usage exclusif de a6. c'est loin, tout ça.
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.
Sur le 68K, c'est impossible. Par ailleurs, le U du 6809 ne
deviendra jamais S.
Et pour cause : ils n'ont pas du tout le même rôle.
Sur le 68K, USP et SSP sont deux pointeurs de piles
susceptibles d'être modifiés par le processeur. Ça fait une sacrée
différence.
USP et SSP sont à tour de rôle le pointeur de pile système en fonction
de l'état du bit S du registre d'état, ce qui n'est pas le cas de U.
C'étaient des processeurs sympa tous les deux, je trouve. Le 68000
apportait un confort appréciable par le nombre et la taille des
registres disponibles par rapport au 6809 (et même par rapport au x86).
Un des trucs les plus pénibles du 68000 c'était pour moi l'alignement
obligatoire des mots et mots longs sur les adresses paires et le bus de
données sur 16 bits obligatoire. Je crois que des versions ultérieures
(68020 ?) y ont remédié.
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.
Sur le 68K, c'est impossible. Par ailleurs, le U du 6809 ne
deviendra jamais S.
Et pour cause : ils n'ont pas du tout le même rôle.
Sur le 68K, USP et SSP sont deux pointeurs de piles
susceptibles d'être modifiés par le processeur. Ça fait une sacrée
différence.
USP et SSP sont à tour de rôle le pointeur de pile système en fonction
de l'état du bit S du registre d'état, ce qui n'est pas le cas de U.
C'étaient des processeurs sympa tous les deux, je trouve. Le 68000
apportait un confort appréciable par le nombre et la taille des
registres disponibles par rapport au 6809 (et même par rapport au x86).
Un des trucs les plus pénibles du 68000 c'était pour moi l'alignement
obligatoire des mots et mots longs sur les adresses paires et le bus de
données sur 16 bits obligatoire. Je crois que des versions ultérieures
(68020 ?) y ont remédié.
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.
Sur le 68K, c'est impossible. Par ailleurs, le U du 6809 ne
deviendra jamais S.
Et pour cause : ils n'ont pas du tout le même rôle.
Sur le 68K, USP et SSP sont deux pointeurs de piles
susceptibles d'être modifiés par le processeur. Ça fait une sacrée
différence.
USP et SSP sont à tour de rôle le pointeur de pile système en fonction
de l'état du bit S du registre d'état, ce qui n'est pas le cas de U.
C'étaient des processeurs sympa tous les deux, je trouve. Le 68000
apportait un confort appréciable par le nombre et la taille des
registres disponibles par rapport au 6809 (et même par rapport au x86).
Un des trucs les plus pénibles du 68000 c'était pour moi l'alignement
obligatoire des mots et mots longs sur les adresses paires et le bus de
données sur 16 bits obligatoire. Je crois que des versions ultérieures
(68020 ?) y ont remédié.
Pascal Hambourg écrivait dans fr.comp.os.linux.configuration :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.
C'est exactement ce que je dis plus loin.
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.
On peut tout remplacer par des fonctions, c'est un fait. N'empêche
que pour faire du temps réel, c'était très pratique.
Un des trucs les plus pénibles du 68000 c'était pour moi l'alignement
obligatoire des mots et mots longs sur les adresses paires et le bus de
données sur 16 bits obligatoire.
Le truc pénible, c'était le bus 16 bits externe avec une validation
différente des octets bas et haut et toute la logique câblé qu'il
fallait mettre autour. Si encore ça permettait d'utiliser des
mémoire 8 bits, mais même pas !
La gestion du bus du 68K était une
catastrophe avec des timings assez tordus.
Pascal Hambourg écrivait dans fr.comp.os.linux.configuration :
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.
C'est exactement ce que je dis plus loin.
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.
On peut tout remplacer par des fonctions, c'est un fait. N'empêche
que pour faire du temps réel, c'était très pratique.
Un des trucs les plus pénibles du 68000 c'était pour moi l'alignement
obligatoire des mots et mots longs sur les adresses paires et le bus de
données sur 16 bits obligatoire.
Le truc pénible, c'était le bus 16 bits externe avec une validation
différente des octets bas et haut et toute la logique câblé qu'il
fallait mettre autour. Si encore ça permettait d'utiliser des
mémoire 8 bits, mais même pas !
La gestion du bus du 68K était une
catastrophe avec des timings assez tordus.
Pascal Hambourg écrivait dans fr.comp.os.linux.configuration :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.
C'est exactement ce que je dis plus loin.
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.
On peut tout remplacer par des fonctions, c'est un fait. N'empêche
que pour faire du temps réel, c'était très pratique.
Un des trucs les plus pénibles du 68000 c'était pour moi l'alignement
obligatoire des mots et mots longs sur les adresses paires et le bus de
données sur 16 bits obligatoire.
Le truc pénible, c'était le bus 16 bits externe avec une validation
différente des octets bas et haut et toute la logique câblé qu'il
fallait mettre autour. Si encore ça permettait d'utiliser des
mémoire 8 bits, mais même pas !
La gestion du bus du 68K était une
catastrophe avec des timings assez tordus.
JKB a écrit :Pascal Hambourg écrivait dans fr.comp.os.linux.configuration :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.
C'est exactement ce que je dis plus loin.
Tu noteras que j'avais écrit "comme tu le dis".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.
On peut tout remplacer par des fonctions, c'est un fait. N'empêche
que pour faire du temps réel, c'était très pratique.
Pas par des fonctions mais par une simple instruction de déplacement
multiple MOVEM qui fait la même chose que les instructions
d'empilage-dépilage de registres du 6809 et peut utiliser n'importe quel
registre d'adresse comme pointeur. Donc je ne vois pas ce que tu
reproches au 68000, pourrais-tu donner un exemple concret de ce que tu
faisais avec le 6809 qui était impossible avec le 68000 ?
Un des trucs les plus pénibles du 68000 c'était pour moi l'alignement
obligatoire des mots et mots longs sur les adresses paires et le bus de
données sur 16 bits obligatoire.
Le truc pénible, c'était le bus 16 bits externe avec une validation
différente des octets bas et haut et toute la logique câblé qu'il
fallait mettre autour. Si encore ça permettait d'utiliser des
mémoire 8 bits, mais même pas !
C'est ce que je disais : bus de données de largeur fixe et non dynamique
en fonction de la cible. Au point que Motorola avait dû ajouter une
instruction de déplacement particulière MOVEP pour accéder par mot ou
mot long aux mémoires et périphériques 8 bits qui n'étaient adressés
qu'à des adresses paires ou impaires selon qu'ils étaient câblés sur les
8 bits de poids fort ou de poids faible du bus de données.La gestion du bus du 68K était une
catastrophe avec des timings assez tordus.
Je suis d'accord, autant la gestion du bus du 6809 était simple, autant
celle du 68000 était une gigantesque usine à gaz. C'est le prix à payer
pour la richesse des fonctionnalités, je suppose.
JKB a écrit :
Pascal Hambourg écrivait dans fr.comp.os.linux.configuration :
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.
C'est exactement ce que je dis plus loin.
Tu noteras que j'avais écrit "comme tu le dis".
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.
On peut tout remplacer par des fonctions, c'est un fait. N'empêche
que pour faire du temps réel, c'était très pratique.
Pas par des fonctions mais par une simple instruction de déplacement
multiple MOVEM qui fait la même chose que les instructions
d'empilage-dépilage de registres du 6809 et peut utiliser n'importe quel
registre d'adresse comme pointeur. Donc je ne vois pas ce que tu
reproches au 68000, pourrais-tu donner un exemple concret de ce que tu
faisais avec le 6809 qui était impossible avec le 68000 ?
Un des trucs les plus pénibles du 68000 c'était pour moi l'alignement
obligatoire des mots et mots longs sur les adresses paires et le bus de
données sur 16 bits obligatoire.
Le truc pénible, c'était le bus 16 bits externe avec une validation
différente des octets bas et haut et toute la logique câblé qu'il
fallait mettre autour. Si encore ça permettait d'utiliser des
mémoire 8 bits, mais même pas !
C'est ce que je disais : bus de données de largeur fixe et non dynamique
en fonction de la cible. Au point que Motorola avait dû ajouter une
instruction de déplacement particulière MOVEP pour accéder par mot ou
mot long aux mémoires et périphériques 8 bits qui n'étaient adressés
qu'à des adresses paires ou impaires selon qu'ils étaient câblés sur les
8 bits de poids fort ou de poids faible du bus de données.
La gestion du bus du 68K était une
catastrophe avec des timings assez tordus.
Je suis d'accord, autant la gestion du bus du 6809 était simple, autant
celle du 68000 était une gigantesque usine à gaz. C'est le prix à payer
pour la richesse des fonctionnalités, je suppose.
JKB a écrit :Pascal Hambourg écrivait dans fr.comp.os.linux.configuration :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.
C'est exactement ce que je dis plus loin.
Tu noteras que j'avais écrit "comme tu le dis".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.
On peut tout remplacer par des fonctions, c'est un fait. N'empêche
que pour faire du temps réel, c'était très pratique.
Pas par des fonctions mais par une simple instruction de déplacement
multiple MOVEM qui fait la même chose que les instructions
d'empilage-dépilage de registres du 6809 et peut utiliser n'importe quel
registre d'adresse comme pointeur. Donc je ne vois pas ce que tu
reproches au 68000, pourrais-tu donner un exemple concret de ce que tu
faisais avec le 6809 qui était impossible avec le 68000 ?
Un des trucs les plus pénibles du 68000 c'était pour moi l'alignement
obligatoire des mots et mots longs sur les adresses paires et le bus de
données sur 16 bits obligatoire.
Le truc pénible, c'était le bus 16 bits externe avec une validation
différente des octets bas et haut et toute la logique câblé qu'il
fallait mettre autour. Si encore ça permettait d'utiliser des
mémoire 8 bits, mais même pas !
C'est ce que je disais : bus de données de largeur fixe et non dynamique
en fonction de la cible. Au point que Motorola avait dû ajouter une
instruction de déplacement particulière MOVEP pour accéder par mot ou
mot long aux mémoires et périphériques 8 bits qui n'étaient adressés
qu'à des adresses paires ou impaires selon qu'ils étaient câblés sur les
8 bits de poids fort ou de poids faible du bus de données.La gestion du bus du 68K était une
catastrophe avec des timings assez tordus.
Je suis d'accord, autant la gestion du bus du 6809 était simple, autant
celle du 68000 était une gigantesque usine à gaz. C'est le prix à payer
pour la richesse des fonctionnalités, je suppose.
J'ai fait un module de codeur de Reed-Muller (1,6) pour une
application spatiale. Le truc tournait avec quatre tâches :
réception, codage, décodage, envoi (full duplex). Les quatre tâches
étaient symchronisées par un timer externe connecté sur une patte
d'interruption. Je dois avoir le listing du truc quelque part à la
cave si je cherche (j'ai toujours la maquette). Le développement
s'est fait avec deux maquettes (wrapping), l'une à base de 68B09P et
l'autre de 68K/16 MHz en DIL.
Je me souviens que le 6809 faisait les pieds
au mur alors que le 68K était à la ramasse à chaque changement de
tâche et que le problème venait de l'absence du U qui permettait de
gérer de façon efficace et élegante ces changements de tâche. C'est
un truc que j'ai fait il y a plus de quinze et j'ai un peu oublié
les détails.
Non. C'est le prix à payer pour du bricolage. Si tu as des
validations de bus haut et bas, ce n'est pas pour adresser des
périphériques 8 bits, mais parce que le design interne du processeur
faisait que tu n'avais pas les données présentes en même temps. Ce
qui foutait assez rapidement la merdre lorsque tu avais sous la main
une mémoire 16 bits.
J'ai fait un module de codeur de Reed-Muller (1,6) pour une
application spatiale. Le truc tournait avec quatre tâches :
réception, codage, décodage, envoi (full duplex). Les quatre tâches
étaient symchronisées par un timer externe connecté sur une patte
d'interruption. Je dois avoir le listing du truc quelque part à la
cave si je cherche (j'ai toujours la maquette). Le développement
s'est fait avec deux maquettes (wrapping), l'une à base de 68B09P et
l'autre de 68K/16 MHz en DIL.
Je me souviens que le 6809 faisait les pieds
au mur alors que le 68K était à la ramasse à chaque changement de
tâche et que le problème venait de l'absence du U qui permettait de
gérer de façon efficace et élegante ces changements de tâche. C'est
un truc que j'ai fait il y a plus de quinze et j'ai un peu oublié
les détails.
Non. C'est le prix à payer pour du bricolage. Si tu as des
validations de bus haut et bas, ce n'est pas pour adresser des
périphériques 8 bits, mais parce que le design interne du processeur
faisait que tu n'avais pas les données présentes en même temps. Ce
qui foutait assez rapidement la merdre lorsque tu avais sous la main
une mémoire 16 bits.
J'ai fait un module de codeur de Reed-Muller (1,6) pour une
application spatiale. Le truc tournait avec quatre tâches :
réception, codage, décodage, envoi (full duplex). Les quatre tâches
étaient symchronisées par un timer externe connecté sur une patte
d'interruption. Je dois avoir le listing du truc quelque part à la
cave si je cherche (j'ai toujours la maquette). Le développement
s'est fait avec deux maquettes (wrapping), l'une à base de 68B09P et
l'autre de 68K/16 MHz en DIL.
Je me souviens que le 6809 faisait les pieds
au mur alors que le 68K était à la ramasse à chaque changement de
tâche et que le problème venait de l'absence du U qui permettait de
gérer de façon efficace et élegante ces changements de tâche. C'est
un truc que j'ai fait il y a plus de quinze et j'ai un peu oublié
les détails.
Non. C'est le prix à payer pour du bricolage. Si tu as des
validations de bus haut et bas, ce n'est pas pour adresser des
périphériques 8 bits, mais parce que le design interne du processeur
faisait que tu n'avais pas les données présentes en même temps. Ce
qui foutait assez rapidement la merdre lorsque tu avais sous la main
une mémoire 16 bits.
JKB a écrit :
J'ai fait un module de codeur de Reed-Muller (1,6) pour une
application spatiale. Le truc tournait avec quatre tâches :
réception, codage, décodage, envoi (full duplex). Les quatre tâches
étaient symchronisées par un timer externe connecté sur une patte
d'interruption. Je dois avoir le listing du truc quelque part à la
cave si je cherche (j'ai toujours la maquette). Le développement
s'est fait avec deux maquettes (wrapping), l'une à base de 68B09P et
l'autre de 68K/16 MHz en DIL.
Un système à base de 68000 en wrapping ? Tu as dû sacrément t'amuser...
Je me souviens que le 6809 faisait les pieds
au mur alors que le 68K était à la ramasse à chaque changement de
tâche et que le problème venait de l'absence du U qui permettait de
gérer de façon efficace et élegante ces changements de tâche. C'est
un truc que j'ai fait il y a plus de quinze et j'ai un peu oublié
les détails.
Dommage, j'aurais aimé avoir plus de détails sur la façon dont tu avais
géré le changement de tâche sur les deux processeurs pour comprendre.
Mais je ne vais pas te faire chercher, sauf si tu n'as vraiment rien de
mieux à faire.
Non. C'est le prix à payer pour du bricolage. Si tu as des
validations de bus haut et bas, ce n'est pas pour adresser des
périphériques 8 bits, mais parce que le design interne du processeur
faisait que tu n'avais pas les données présentes en même temps. Ce
qui foutait assez rapidement la merdre lorsque tu avais sous la main
une mémoire 16 bits.
Je ne suis pas sûr de comprendre ce que tu veux dire. Avec une mémoire
ou un périphérique ne supportant que des accès entiers sur 16 bits,
l'utilisation d'instructions sur octet pouvait effectivement avoir des
conséquences aléatoires (surtout en écriture). Par contre je ne me
rappelle pas de situations où les signaux de validation haut et bas
n'étaient pas synchrones.
JKB a écrit :
J'ai fait un module de codeur de Reed-Muller (1,6) pour une
application spatiale. Le truc tournait avec quatre tâches :
réception, codage, décodage, envoi (full duplex). Les quatre tâches
étaient symchronisées par un timer externe connecté sur une patte
d'interruption. Je dois avoir le listing du truc quelque part à la
cave si je cherche (j'ai toujours la maquette). Le développement
s'est fait avec deux maquettes (wrapping), l'une à base de 68B09P et
l'autre de 68K/16 MHz en DIL.
Un système à base de 68000 en wrapping ? Tu as dû sacrément t'amuser...
Je me souviens que le 6809 faisait les pieds
au mur alors que le 68K était à la ramasse à chaque changement de
tâche et que le problème venait de l'absence du U qui permettait de
gérer de façon efficace et élegante ces changements de tâche. C'est
un truc que j'ai fait il y a plus de quinze et j'ai un peu oublié
les détails.
Dommage, j'aurais aimé avoir plus de détails sur la façon dont tu avais
géré le changement de tâche sur les deux processeurs pour comprendre.
Mais je ne vais pas te faire chercher, sauf si tu n'as vraiment rien de
mieux à faire.
Non. C'est le prix à payer pour du bricolage. Si tu as des
validations de bus haut et bas, ce n'est pas pour adresser des
périphériques 8 bits, mais parce que le design interne du processeur
faisait que tu n'avais pas les données présentes en même temps. Ce
qui foutait assez rapidement la merdre lorsque tu avais sous la main
une mémoire 16 bits.
Je ne suis pas sûr de comprendre ce que tu veux dire. Avec une mémoire
ou un périphérique ne supportant que des accès entiers sur 16 bits,
l'utilisation d'instructions sur octet pouvait effectivement avoir des
conséquences aléatoires (surtout en écriture). Par contre je ne me
rappelle pas de situations où les signaux de validation haut et bas
n'étaient pas synchrones.
JKB a écrit :
J'ai fait un module de codeur de Reed-Muller (1,6) pour une
application spatiale. Le truc tournait avec quatre tâches :
réception, codage, décodage, envoi (full duplex). Les quatre tâches
étaient symchronisées par un timer externe connecté sur une patte
d'interruption. Je dois avoir le listing du truc quelque part à la
cave si je cherche (j'ai toujours la maquette). Le développement
s'est fait avec deux maquettes (wrapping), l'une à base de 68B09P et
l'autre de 68K/16 MHz en DIL.
Un système à base de 68000 en wrapping ? Tu as dû sacrément t'amuser...
Je me souviens que le 6809 faisait les pieds
au mur alors que le 68K était à la ramasse à chaque changement de
tâche et que le problème venait de l'absence du U qui permettait de
gérer de façon efficace et élegante ces changements de tâche. C'est
un truc que j'ai fait il y a plus de quinze et j'ai un peu oublié
les détails.
Dommage, j'aurais aimé avoir plus de détails sur la façon dont tu avais
géré le changement de tâche sur les deux processeurs pour comprendre.
Mais je ne vais pas te faire chercher, sauf si tu n'as vraiment rien de
mieux à faire.
Non. C'est le prix à payer pour du bricolage. Si tu as des
validations de bus haut et bas, ce n'est pas pour adresser des
périphériques 8 bits, mais parce que le design interne du processeur
faisait que tu n'avais pas les données présentes en même temps. Ce
qui foutait assez rapidement la merdre lorsque tu avais sous la main
une mémoire 16 bits.
Je ne suis pas sûr de comprendre ce que tu veux dire. Avec une mémoire
ou un périphérique ne supportant que des accès entiers sur 16 bits,
l'utilisation d'instructions sur octet pouvait effectivement avoir des
conséquences aléatoires (surtout en écriture). Par contre je ne me
rappelle pas de situations où les signaux de validation haut et bas
n'étaient pas synchrones.
NiKo a papoté sur Usenet le janvier 19, 2010 06:33 PM:
.... Juste des URL pigées ....
NiKo a papoté sur Usenet le janvier 19, 2010 06:33 PM:
.... Juste des URL pigées ....
NiKo a papoté sur Usenet le janvier 19, 2010 06:33 PM:
.... Juste des URL pigées ....
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 !).
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...
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.
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 !
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).
Quant à adresser des périphériques 8 bits sur un bus de 16, ça
n'avait aucune conséquence même en écriture
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 !).
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...
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.
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 !
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).
Quant à adresser des périphériques 8 bits sur un bus de 16, ça
n'avait aucune conséquence même en écriture
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 !).
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...
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.
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 !
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).
Quant à adresser des périphériques 8 bits sur un bus de 16, ça
n'avait aucune conséquence même en écriture
...
...
...