MSX Village forum

L'atelier les décodages entrées/sorties comment ça fonctionne

aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2702

Le 13/05/2021 à 17h47
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.


j'ai scindé le sujet ;)


On est toujours ignorant avant de savoir.
Github    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10348

Le 13/05/2021 à 18h24
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


:noel
Site web    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10348

Le 13/05/2021 à 18h29
voici comment le VDP reçoit le port 98h



:noel
Site web    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10348

Le 13/05/2021 à 18h35
tu as oublié celui-ci ;)

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 :fou

C'est ta question?


Edité par igal Le 13/05/2021 à 18h48


:noel
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 13/05/2021 à 18h49
J'ai rapatrié le message de l'autre sujet :D

igal :
Mode [De ce que j'ai compris ON] :oups

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" :p

Mieux que ca, je peux faire un dessin si tu veux ;)


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2702

Le 13/05/2021 à 21h22
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 !? :hum


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.
Github    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 13/05/2021 à 22h14
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


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10348

Le 14/05/2021 à 10h13
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







:noel
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 14/05/2021 à 16h21
@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?


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2702

Le 14/05/2021 à 20h48
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


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 ? :fou

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 ! :hum
/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.
Github    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2702

Le 14/05/2021 à 22h49
D'après la doc du YM2413, il ne semble y avoir effectivement qu'un accès en écriture.
Tout est logique du coup. :)


On est toujours ignorant avant de savoir.
Github    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10348

Le 15/05/2021 à 11h55
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 :D

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







:noel
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2702

Le 15/05/2021 à 12h30
C'est clair. :top

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.
Github    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10348

Le 15/05/2021 à 13h09
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




:noel
Site web    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10348

Le 15/05/2021 à 13h22
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

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.


:noel
Site web    
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie