L'atelier les décodages entrées/sorties comment ça fonctionne
aoineko
Membre non connecté
Conseiller Municipal
Je crois.
Je comprends que les in/out du CPU sont envoyés sur le data bus (D0 à D7) ; par contre, j'ai pas compris comment un périphérique filtre une adresse donnée et comment sont envoyés les données (sur le même bus après l'adresse ?).
Je devrais ouvrir un autre topic, mais j'aimerai beaucoup comprendre ce qui se passe concrètement quand le CPU execute par ex. un out 98h, 0 pour le VDP.
Je comprends que les in/out du CPU sont envoyés sur le data bus (D0 à D7) ; par contre, j'ai pas compris comment un périphérique filtre une adresse donnée et comment sont envoyés les données (sur le même bus après l'adresse ?).
Je devrais ouvrir un autre topic, mais j'aimerai beaucoup comprendre ce qui se passe concrètement quand le CPU execute par ex. un out 98h, 0 pour le VDP.
j'ai scindé le sujet
On est toujours ignorant avant de savoir.
tout le secret est dans le signal /IORQ Input/Output Request
ce signal est activé quand le Z80 reçoit une commande:
In Ini Inir Ind Indr ou Out Outi Otir Outd Otdr
pour rappel dans un Z80
les ADRESSES sont décodées par les Bits A0 à A7 du Bus d'ADRESSES
les DONNEES sont écrites ou lues suivant le sens par le Bus de DONNEES D0 à D7
ce signal est activé quand le Z80 reçoit une commande:
In Ini Inir Ind Indr ou Out Outi Otir Outd Otdr
pour rappel dans un Z80
les ADRESSES sont décodées par les Bits A0 à A7 du Bus d'ADRESSES
les DONNEES sont écrites ou lues suivant le sens par le Bus de DONNEES D0 à D7
tu as oublié celui-ci
Edité par igal Le 13/05/2021 à 18h48
Je n'ai pas la prétention de t'apprendre quoi que ce soit mais...
Les signaux D0 à D7 sont présents sur "Tout le BUS Msx".
Ces signaux sont propagés sur tous les "Périphériques" qui sont cablés D0 à D7.
Tu peux voir que le YM2413 est cablé [CS => LS7430 Pin 8].
Ce n'est donc pas CS1, CS2, CS12 ni SltSL qui "active" la Puce mais la combinaison des portes logiques [74LS04 + 74LS30] connectés à A0 à A7 + I/ORQ qui va "Inhiber YM2413" lorsque l'on souhaite lui envoyer des Données sur D0 à D7.
Jipe m'avait indiqué un truc tout bête pour envoyer des signaux sur le port imprimante... (il se rappellera facilement ce qu'il en était).
Voir plus bas
Le principe est le même, tu indiques une adresse et le signal que tu veux envoyer dedans... 0 ou 1.
C'était pour allumer des leds sur le port imprimante
Edit: Voici le port imprimante qui répond à l'adresse... &H91
Son câblage et les 3 LS répondent à l'adresse .... &h91
NB: PB0 à PB7 correspond au port imprimante.
Pour allumer toutes les diodes:
Out &H91,255
Pour éteindre toutes les diodes:
Out &H91,0
Logiquement, si tu entres l'adresse du YM2413, tu devrais pouvoir obtenir un "Proot" simplement en faisant OUT &Hxx,N'importe quoi
C'est ta question?
Les signaux D0 à D7 sont présents sur "Tout le BUS Msx".
Ces signaux sont propagés sur tous les "Périphériques" qui sont cablés D0 à D7.
Tu peux voir que le YM2413 est cablé [CS => LS7430 Pin 8].
Ce n'est donc pas CS1, CS2, CS12 ni SltSL qui "active" la Puce mais la combinaison des portes logiques [74LS04 + 74LS30] connectés à A0 à A7 + I/ORQ qui va "Inhiber YM2413" lorsque l'on souhaite lui envoyer des Données sur D0 à D7.
Voir plus bas
Le principe est le même, tu indiques une adresse et le signal que tu veux envoyer dedans... 0 ou 1.
C'était pour allumer des leds sur le port imprimante
Edit: Voici le port imprimante qui répond à l'adresse... &H91
Son câblage et les 3 LS répondent à l'adresse .... &h91
NB: PB0 à PB7 correspond au port imprimante.
Pour allumer toutes les diodes:
Out &H91,255
Pour éteindre toutes les diodes:
Out &H91,0
Logiquement, si tu entres l'adresse du YM2413, tu devrais pouvoir obtenir un "Proot" simplement en faisant OUT &Hxx,N'importe quoi
C'est ta question?
Edité par igal Le 13/05/2021 à 18h48
igal
Membre non connecté
Conseiller Municipal
J'ai rapatrié le message de l'autre sujet
igal :
Mode [De ce que j'ai compris ON]
En fait, le périphérique ne filtre rien, c'est le montage des portes logiques LS reliées à sa Pin CS (VDP, FM etc) qui va inhiber le Bus D0 à D7 qui ouvrira grandes ses portes pour avaler les DATA qui suivent la "," (Virgule).
De la même façon que l'adresse du périphérique est &h91
soit en binaire
1001 _ 0001
Lorsque tu fais OUT &B10010001, &B11111111
En reprenant l'exemple que Jipe donne dans le sujet des signaux CS etc
Imagine que:
Lorsque les signaux A0 à A15 se baladent sur le BUS, ces signaux forment "un moule". Ce moule a une forme construite par la suite des 0 et 1.
Les périphériques sont inhibés "Que" et "Seulement Que" [Si le moule qui se balade sur le BUS] trouve un [Objet de la même forme] ou il se moulera parfaitement.
Si: 1001 0001 forme un DELTA, alors le moule en forme de DELTA se balade sur tout le BUS et l'endroit ou l'assemblage des portes logiques [LS] montées de telles sorte à former un [DELTA] est rencontré, le montage des portes [DELTA] (autrement dit 1001 0001) va activer [CS] du périphérique!
Les DATA sont envoyés sur TOUT le BUS mais seul le montage DELTA (1001 0001) qui inhibe le BUS du périphérique va rendre cette puce "Accueillante de données"
Mieux que ca, je peux faire un dessin si tu veux
En fait, le périphérique ne filtre rien, c'est le montage des portes logiques LS reliées à sa Pin CS (VDP, FM etc) qui va inhiber le Bus D0 à D7 qui ouvrira grandes ses portes pour avaler les DATA qui suivent la "," (Virgule).
De la même façon que l'adresse du périphérique est &h91
soit en binaire
1001 _ 0001
Lorsque tu fais OUT &B10010001, &B11111111
En reprenant l'exemple que Jipe donne dans le sujet des signaux CS etc
Imagine que:
Lorsque les signaux A0 à A15 se baladent sur le BUS, ces signaux forment "un moule". Ce moule a une forme construite par la suite des 0 et 1.
Les périphériques sont inhibés "Que" et "Seulement Que" [Si le moule qui se balade sur le BUS] trouve un [Objet de la même forme] ou il se moulera parfaitement.
Si: 1001 0001 forme un DELTA, alors le moule en forme de DELTA se balade sur tout le BUS et l'endroit ou l'assemblage des portes logiques [LS] montées de telles sorte à former un [DELTA] est rencontré, le montage des portes [DELTA] (autrement dit 1001 0001) va activer [CS] du périphérique!
Les DATA sont envoyés sur TOUT le BUS mais seul le montage DELTA (1001 0001) qui inhibe le BUS du périphérique va rendre cette puce "Accueillante de données"
Mieux que ca, je peux faire un dessin si tu veux
aoineko
Membre non connecté
Conseiller Municipal
C'est bon, je pense avoir compris :
- IORQ est mis à 0 quand le CPU reçoit des instructions in/out
- pour chaque périphérique, il y a un montage électronique qui check que IORQ est a 0 et que l'adresse sur A0-A7 correspond au périphérique
- si c'est le cas, le signal est envoyé au périphérique en lui-même qui va récupérer les données à traiter sur D0-D7
Par contre, il reste un mystère : comment le périphérique sait s'il s'agit d'un in ou d'un out !?
Et pour en revenir au montage MSX-MUSIC "ultra light", si on veut l'installer directement sur notre machine, il "suffit" donc de trouver un endroit où les signaux IORQ, A0-7 et D0-7 sont accessibles sur la carte mère (comme au niveau des ports cartouches j'imagine) et on peut souder notre montage dessus sans que ça perturbe le reste de la machine !?
Ca semble presque trop facile.
- IORQ est mis à 0 quand le CPU reçoit des instructions in/out
- pour chaque périphérique, il y a un montage électronique qui check que IORQ est a 0 et que l'adresse sur A0-A7 correspond au périphérique
- si c'est le cas, le signal est envoyé au périphérique en lui-même qui va récupérer les données à traiter sur D0-D7
Par contre, il reste un mystère : comment le périphérique sait s'il s'agit d'un in ou d'un out !?
Et pour en revenir au montage MSX-MUSIC "ultra light", si on veut l'installer directement sur notre machine, il "suffit" donc de trouver un endroit où les signaux IORQ, A0-7 et D0-7 sont accessibles sur la carte mère (comme au niveau des ports cartouches j'imagine) et on peut souder notre montage dessus sans que ça perturbe le reste de la machine !?
Ca semble presque trop facile.
On est toujours ignorant avant de savoir.
igal
Membre non connecté
Conseiller Municipal
Je peux me tromper mais..
IORQ = In Out ReQuest! Cela signifie (probablement) que ce signal indique si le DataBus du Périphérique [YM2413, VDP9958 etc] est en IN ou OUT. (Y a pas de neutre)
Le Montage des différentes portes Logiques LS permet seulement d'attribuer une "Adresse Physique" au périphérique que tu met derrière.
Le Signal n'est pas envoyé au périphérique "spécifiquement", le signal "Inonde" le Bus MSX.
En gros, la séquence fait:
[Adresse en "&h98" + IoRQ en "IN" + Data 1001 1101 ] Simultanément!
A l'intersection circonstancielle (S'il y a concomitance lol) d'un Hardware placé derrière [LS montés en &H98], le CPU indique à [Tout ce qui est sur le BUS Msx] de se mettre en "IN" puis il envoie les D0, D1, D3, D4 etc... Sur tout le BUS.
Seul(s) LE ou LES périphériques répondant aux 2 critères simultanément [LS et IN RQ] récupéreront les données!
Nb: J'ai déja monté des VDP en parallèle et les 2 fonctionnent parfaitement. (En clone)
Nb2: VDP9938 etVDP9958 fonctionnent parfaitement sans avoir à les distinguer. (En clone...mais avec le max des capacités de chaque VDP différent)
La combinaison des deux [IORQ + Adresse Physique LS]
Edit: Le fonctionnement peut être le plus simplement +5v = IRQ IN et 0v = IRQ OUT!
Faut regarder ce qui se passe dans LS138
Accorde toi une petite heure à comprendre les quelques symboles des portes logiques expliquées sur cette page et tu pourras comprendre pourquoi le signal (n'importe lequel) passe ou passe pas!
http://electroniqueamateur.blogspot.com/2014/09/explorons-les-portes-logiques.html
Edité par igal Le 14/05/2021 à 10h39
IORQ = In Out ReQuest! Cela signifie (probablement) que ce signal indique si le DataBus du Périphérique [YM2413, VDP9958 etc] est en IN ou OUT. (Y a pas de neutre)
Le Montage des différentes portes Logiques LS permet seulement d'attribuer une "Adresse Physique" au périphérique que tu met derrière.
Le Signal n'est pas envoyé au périphérique "spécifiquement", le signal "Inonde" le Bus MSX.
En gros, la séquence fait:
[Adresse en "&h98" + IoRQ en "IN" + Data 1001 1101 ] Simultanément!
A l'intersection circonstancielle (S'il y a concomitance lol) d'un Hardware placé derrière [LS montés en &H98], le CPU indique à [Tout ce qui est sur le BUS Msx] de se mettre en "IN" puis il envoie les D0, D1, D3, D4 etc... Sur tout le BUS.
Seul(s) LE ou LES périphériques répondant aux 2 critères simultanément [LS et IN RQ] récupéreront les données!
Nb: J'ai déja monté des VDP en parallèle et les 2 fonctionnent parfaitement. (En clone)
Nb2: VDP9938 etVDP9958 fonctionnent parfaitement sans avoir à les distinguer. (En clone...mais avec le max des capacités de chaque VDP différent)
La combinaison des deux [IORQ + Adresse Physique LS]
Edit: Le fonctionnement peut être le plus simplement +5v = IRQ IN et 0v = IRQ OUT!
Faut regarder ce qui se passe dans LS138
Accorde toi une petite heure à comprendre les quelques symboles des portes logiques expliquées sur cette page et tu pourras comprendre pourquoi le signal (n'importe lequel) passe ou passe pas!
http://electroniqueamateur.blogspot.com/2014/09/explorons-les-portes-logiques.html
Edité par igal Le 14/05/2021 à 10h39
c'est le Z80 qui exécute les commandes et lit ou écrit sur le bus de données
le périphérique lui a des signaux /RD et /WR ce sont les pins /CSR et /CSW pour le VDP
voici 2 pages extraites du livre Programmation du Z80 de RODNAYS ZAKS qui expliqueront mieux que moi ce qui ce passe a l'intérieur du CPU
le périphérique lui a des signaux /RD et /WR ce sont les pins /CSR et /CSW pour le VDP
voici 2 pages extraites du livre Programmation du Z80 de RODNAYS ZAKS qui expliqueront mieux que moi ce qui ce passe a l'intérieur du CPU
igal
Membre non connecté
Conseiller Municipal
@Jipe:
J'ai repris sur ce LS138 l'état de l'entrée et de la sortie comme indiqué sur ton dessin.
Autant je pense que mon interprétation sur le comportement du CI depuis les entrées en passant par les portes inverseuses est juste, autant, je ne comprends pas trop comment interpréter les portes de sorties qui sont des [NON ET] (Nand) avec 4 signaux arrivant dessus!
Faut il comprendre que les 4 entrées de chaque porte [NON ET] est regroupé en 2 paires de 2 entrées?
Par exemple, Y3 ayant les 2 pins du haut en rouge, ces deux pins sont comparés l'un a l'autre et la porte [NON ET] donne un signal Bleu en sortie!
C'est ca?
J'ai repris sur ce LS138 l'état de l'entrée et de la sortie comme indiqué sur ton dessin.
Autant je pense que mon interprétation sur le comportement du CI depuis les entrées en passant par les portes inverseuses est juste, autant, je ne comprends pas trop comment interpréter les portes de sorties qui sont des [NON ET] (Nand) avec 4 signaux arrivant dessus!
Faut il comprendre que les 4 entrées de chaque porte [NON ET] est regroupé en 2 paires de 2 entrées?
Par exemple, Y3 ayant les 2 pins du haut en rouge, ces deux pins sont comparés l'un a l'autre et la porte [NON ET] donne un signal Bleu en sortie!
C'est ca?
aoineko
Membre non connecté
Conseiller Municipal
JIPEMSX :
c'est le Z80 qui exécute les commandes et lit ou écrit sur le bus de données
le périphérique lui a des signaux /RD et /WR ce sont les pins /CSR et /CSW pour le VDP
le périphérique lui a des signaux /RD et /WR ce sont les pins /CSR et /CSW pour le VDP
Donc, quand le Z80 décode une instruction in ou out, il :
- mets l'adresse du port sur A0-A7
- si c'est un out, mets la data sur D0-D7
- active le signal /RD ou /WR en fonction de s'il s'agit d'un in ou un out
- active le signal /IORQ
Chaque périphérique a un "montage électronique" (combinaison de portes logiques) qui "filtre" les signaux /IORQ et A0-A7 et "envoi" un signal au périphérique quand /IORQ = 0 et que l'adresse du port I/O correspond au filtre.
Le périphérique qui reçoit le signal d'I/O, "check" les signaux /RD et /WR pour savoir quoi faire et va lire D0-D7 le cas échant.
C'est bien ça, ou j'ai toujours pas compris ?
EDIT :
Sur le montage MSX-MUSIC light, je vois la partie filtre et son signal résultat qui arrive sur le /CS du YM2413.
Je vois aussi le branchement du YM2413 à D0-D7 et au CLOCK (pour qu'il ne soit actif qu'à intervalle régulier j'imagine).
Je vois qu'il est aussi branché à /WR, mais pas à /RD !
/WR suffit à savoir si c'est un in ou out ?
Ou bien le YM2413 n'est accessible qu'en écriture ?
On est toujours ignorant avant de savoir.
extrait des ports MSX
7C ? MSX MUSIC YM2413/OPLL (FM-PAC,FM-PAK,MSX2+) Index
7D ? MSX MUSIC YM2413/OPLL (FM-PAC,FM-PAK,MSX2+) Data I/O
remarque : on ne dit pas "filtre" mais décodage d'adresse
voici en images comment le YM2413 répond a 2 adresses
le schéma semble différent et moins lisible mais c'est juste que j'ai remis les bits d'adresses dans l'ordre
le décodage ne comprend pas le bit d'adresse A0 qui est directement relié au YM2413 c'est ce qui permet 2 adresses différentes avec un seul décodage
7C ? MSX MUSIC YM2413/OPLL (FM-PAC,FM-PAK,MSX2+) Index
7D ? MSX MUSIC YM2413/OPLL (FM-PAC,FM-PAK,MSX2+) Data I/O
remarque : on ne dit pas "filtre" mais décodage d'adresse
voici en images comment le YM2413 répond a 2 adresses
le schéma semble différent et moins lisible mais c'est juste que j'ai remis les bits d'adresses dans l'ordre
le décodage ne comprend pas le bit d'adresse A0 qui est directement relié au YM2413 c'est ce qui permet 2 adresses différentes avec un seul décodage
aoineko
Membre non connecté
Conseiller Municipal
C'est clair.
J'ai vu que la A0 est relié directement au YM2413 (pour sélectionner le port index ou data).
La partie droite du schéma MSX-Music Light semble correspondre à la conversion des signaux de sorties MO et RO pour la sortie RCA, par contre je ne comprends pas :
- A quoi sert la sortie SND. C'est un signal qui sera mixé avec le son du PSG et envoyé à la sortie audio standard du MSX ?
- La sortie RCA n'aura que le son du YM2413 ? Je ne vois pas l'intérêt. La plupart des jeux utilisent MSX-Music et PSG en même temps, non ?
J'ai vu que la A0 est relié directement au YM2413 (pour sélectionner le port index ou data).
La partie droite du schéma MSX-Music Light semble correspondre à la conversion des signaux de sorties MO et RO pour la sortie RCA, par contre je ne comprends pas :
- A quoi sert la sortie SND. C'est un signal qui sera mixé avec le son du PSG et envoyé à la sortie audio standard du MSX ?
- La sortie RCA n'aura que le son du YM2413 ? Je ne vois pas l'intérêt. La plupart des jeux utilisent MSX-Music et PSG en même temps, non ?
On est toujours ignorant avant de savoir.
les 2 signaux MO et RO sont pour Mélodies et Rythmes, les 2 signaux sont mixés
ils sont amplifiés par la puce RC4558 ( on appelle cette partie ampli un signal analogique )
la sortie SND arrive sur le port cartouche des MSX a la broche 49 qui est une entrée son pour le MSX
c'est par cette broche que les cartouches SCC de Konami envoient leur son par l'intermèdiare d'un convertisseur D/A ( digital/analogique )
en effet ce son est mixé dans le MSX avec les autres sources sonores PSG, Bip
pour la sortie RCA c'est parce que le schéma est celui d'une FM-PAK que j'ai recopié et simplifié https://www.msx.org/wiki/Checkmark_FM_Stereo_PAK
elle ne sert a rien sauf si le MSX a aussi un Music Module ou une Moon Sound dans un autrre port ce qui permet l'utilisation d'une table de mixage et d'un ampli stéréo
ils sont amplifiés par la puce RC4558 ( on appelle cette partie ampli un signal analogique )
la sortie SND arrive sur le port cartouche des MSX a la broche 49 qui est une entrée son pour le MSX
c'est par cette broche que les cartouches SCC de Konami envoient leur son par l'intermèdiare d'un convertisseur D/A ( digital/analogique )
en effet ce son est mixé dans le MSX avec les autres sources sonores PSG, Bip
pour la sortie RCA c'est parce que le schéma est celui d'une FM-PAK que j'ai recopié et simplifié https://www.msx.org/wiki/Checkmark_FM_Stereo_PAK
elle ne sert a rien sauf si le MSX a aussi un Music Module ou une Moon Sound dans un autrre port ce qui permet l'utilisation d'une table de mixage et d'un ampli stéréo
le VDP lui aussi répond a plusieurs adresses
98 R/W 9918,9929,9938,9958,9978 VRAM Data Read/Write
99 R 9918,9929,9938,9958,9978 VDP Status Registers
99 W 2nd Byte b7=0: 99X8 VRAM Address setup
99 W 2nd Byte b7=1: 99X8 VDP Register write
9A W MVDP (MSX2) 9938,9958 Color Palette Register (2 bytes)
9B W MVDP (MSX2) 9938,9958 Register data
sur les VDP MSX1 c'est le signal MODE qui est connecté au Bit d'adresse A0 ce qui donne -> 98h 99h
sur les VDP MSX2 ce sont les signaux MODE0 et MODE1 qui sont connectés au Bits d'adresses A0 et A1 ce qui donne -> 98h 99h 9Ah 9Bh
remarque : malheurement pour nous le V9978 n'a jamais vu le jour
98 R/W 9918,9929,9938,9958,9978 VRAM Data Read/Write
99 R 9918,9929,9938,9958,9978 VDP Status Registers
99 W 2nd Byte b7=0: 99X8 VRAM Address setup
99 W 2nd Byte b7=1: 99X8 VDP Register write
9A W MVDP (MSX2) 9938,9958 Color Palette Register (2 bytes)
9B W MVDP (MSX2) 9938,9958 Register data
sur les VDP MSX1 c'est le signal MODE qui est connecté au Bit d'adresse A0 ce qui donne -> 98h 99h
sur les VDP MSX2 ce sont les signaux MODE0 et MODE1 qui sont connectés au Bits d'adresses A0 et A1 ce qui donne -> 98h 99h 9Ah 9Bh
remarque : malheurement pour nous le V9978 n'a jamais vu le jour
Le Yamaha V9990 est le successeur du V9958 et soi-disant une version allégée du Yamaha V9978 jamais fini, qui était destiné à être utilisé pour le MSX3.
Le V9978 aurait soi-disant une compatibilité logicielle descendante avec le V9958,
et il y a des rumeurs jamais confirmées sur d'autres fonctionnalités du V9978 comme un bus de données 16 bits et la prise en charge du DMA.
Le V9978 aurait soi-disant une compatibilité logicielle descendante avec le V9958,
et il y a des rumeurs jamais confirmées sur d'autres fonctionnalités du V9978 comme un bus de données 16 bits et la prise en charge du DMA.
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie