MSX Village forum

L'atelier Mettre un SN76489AN dans un MSX (jeux ColecoVision sur MSX)

GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 30/06/2012 à 13h53
Bonjour,

J'ai vu qu'il était encore possible de se procurer les PSG de la ColecoVision / Sega Master System (SN76489AN).
J'aimerai en piloter un avec un MSX afin de faire fonctionner des jeux ColecoVision plus facilement et pour pas cher.

Cette puce est très simple. Seul un port (en écriture et lecture) est utilisé. Sur ColecoVision, c'est le port 0F0h.
Comment créer ce port à partir d'une cartouche ? Et comment faire en sorte que le son passe par le MSX ?

Info :

http://en.wikipedia.org/wiki/Texas_Instruments_SN76489

http://www.colecovision.dk/PDF/SN%2076489.pdf Edité par GDX Le 30/06/2012 à 13h58
   
Fabf Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 24/08/2010 à 20h55

Messages: 4833

Le 30/06/2012 à 15h03
Pour que le son passe par le MSX il suffit, si le signal est assez élevé, de câbler le pin 7 du SN76489AN au pin 49 du connecteur MSX.

Pour le reste j'ai encore du mal à comprendre comment on décode un adresse :oups
Si Jipe pouvait nous expliquer encore une fois ;)
Il faut aussi être sur que le port 0F0h n'est pas déjà utilisé par le MSX (mais je pense que tu a vérifié)

Le projet est très intéressant.
Il n'y a pas d'autres choses que la Coleco aurait et pas le MSX, des choses donc émulé ?
Tant qu'à faire ;)
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 30/06/2012 à 15h52
D'après cette page :

http://map.grauw.nl/resources/msx_io_ports.php

le port 0F0h est libre.

Ce qui resterait à "émuler", serait seulement les manettes de jeux.
Pour gérer les manettes sur ColecoVision, on utilise les ports 0FCh et 0FFh. Ils sont pris sur MSX par le memory mapper. J'avais aussi imaginé de créer un adaptateur pour manettes coleco (ou similaires) sans fil en passant par d'autres ports d'entré mais ça complique pas mal et vu mon niveau en électronique.... :moue Ce n'est pas très difficile de patcher la ROM à la place de toute façon.

L'autre problème, de taille, sont les interruptions qui sont différentes sur Colecovision. Le VDP provoque une interruption non-masquable (rst 66) à 50 ou 60Hz selon que la ColecoVision soit Pal ou NTSC. La je ne vois pas vraiment de solution.
   
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 09/07/2012 à 10h06
Ça n'intéresse que moi et Fabf alors. Quoi qu'il en soit, j'ai reçu un exemplaire du SN76489AN.



Plus qu'à trouver les réponses à mes questions… :tea Edité par GDX Le 09/07/2012 à 12h56
   
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 9531

Le 09/07/2012 à 11h58
avec un 74LS688 il est facile de décoder une adresse de port I/O

je peux apporter des réponses mais il faut que je potasse un peu ;)


:noel
Site web    
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 09/07/2012 à 12h58
Merci, ça m'aiderait bien.

:top
   
Fabf Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 24/08/2010 à 20h55

Messages: 4833

Le 09/07/2012 à 13h04
Toujours intéressé par le projet ;)
Si en plus je peux apprendre à décoder une adresse I/O, ça me servira bien pour ma carte PSG MSX ^^
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 9531

Le 09/07/2012 à 18h13
avant d'aborder le coté MSX il faut comprendre comment fonctionne le chip dans une vrai Coleco

IO:

(ABC lines of decoder go to /WR, A5, and A6 respectively /E1 -> /IO_request
/E2 -> Reset; E3 -> A7)


80-9F (W) = Controls _ Set to keypad mode
80-9F (R) = Not Connected

A0-BF (W) = Video ___ A0 also decoded by video chip
A0-BF (R) = Video /

C0-DF (W) = Controls _ Set to joystick mode
C0-DF (R) = Not Connected

E0-FF (W) = Sound
E0-FF (R) = Controls _ A1 also decoded by chips (A1=0 ctrl 1; A1=1 ctrl 2)

le décodage du SN76489 Sound est simpliste les adresses i/o de fonctionnement allant de E0-FF quand Write est actif

ce mode de décodage n'est donc pas compatible avec le MSX

le registre de controle répond a l'adresse F0 d'aprés l'exemple ci dessous

To write a 10-bit word for frequenct into the sound chip you must first
send the control word, then the second frequency register. Note that the
second frequency register doesn't have a register number. When you write
to it, it uses which ever register you used in the control word.

So, if we want to output 11 0011 1010b to tone channel 1:

First, we write the control word:

LD A,1000 1010b
OUT (F0h),A

Then, the second half of the frequency:

LD A,0011 0011b
OUT (F0h),A

il faut donc être sur que la puce sound SN76489 ne répond uniquement qu'a cette adresse


:noel
Site web    
Fabf Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 24/08/2010 à 20h55

Messages: 4833

Le 09/07/2012 à 18h22
Eh bien voila de quoi se nourrir l'esprit :top
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 10/07/2012 à 10h23
Désolé jipé, hier je voulais poster les infos que j'ai glanées sur le net depuis que je convertis des Jeux Colecovision mais je n'ai pas eu le temps.



Tous les jeux que j'ai rencontrés utilisent le port 0F0h. Donc, c'est bon si la puce sound SN76489 ne répond uniquement qu'a cette adresse. Et puis, même si un jeu utilisait un port reflet, ça je serait pas un problème. Un petit patch pour changer le port et le tour est joué.



De toute façon, une bonne partie des jeux gèrent les manettes par accès directs. il faudra les patcher au moins pour le VDP et pour ça.



Voici les infos que j'ai récupérés sur les entrées/sorties et le son :

Citation :
Carte de la mémoire et des entrées/sorties



La ColecoVision utilise 2 puces 74138, décodeurs de 3~8 lignes, pour gérer la mémoire et les entrées/sorties.



La mémoire est divisée en 8 plages de 8Ko et les entrées-sorties sont divisées en 4 ports d'écriture et 4 de lecture.





Mémoire



Les lignes ABC du décodeur vont vers A5, A6 et A7 (/E1 -> /M_request  ; /E2 -> Reset; E3 -> +V)



0000h~1FFFh = ROM du BIOS

2000h~3FFFh = Port d'extension

4000h~5FFFh = Port d'extension

6000h~7FFFh = RAM (1Ko entre 7000h et 73FFh. Le reste sont des reflets)

8000h~9FFFh = ROM d'une cartouche

A000h~BFFFh = ROM d'une cartouche

C000h~DFFFh = ROM d'une cartouche

E000h~FFFFh = ROM d'une cartouche





Entrées/Sorties



Les lignes ABC du décodeur vers /WR, A5, et A6 (respectivement /E1 -> /IO_request  ;

/E2 -> Reset ; E3 -> A7)



00h~7Fh  : Port inutilisés.



80h~9Fh  : Port d'écriture (W) du mode pavé numérique des manettes.

80h~9Fh  : Port de lecture (R) = Non connecté.



A0h~BFh  : Port d'écriture (W) aux registres du VDP.

A0h~BFh  : Port de lecture (R) aux registres du VDP.



C0h~DFh  : Port d'écriture (W) du mode Joystick des manettes.

C0h~DFh  : Port de lecture (R) = Non connecté.



E0h~FFh  : Port d'écriture (W) aux registres sonores.

E0h~FFh  : Port de lecture (R) = État des manettes. A1 est également décodé par les puces (A1=0 manette 1; A1=1 manette 2)





Puce sonore de la ColecoVision



La puce sonore de la ColecoVision est la SN76489AN fabriquée par Texas Instruments.

Elle dispose de 4 voix sonores (3 générateurs de sons programmables et 1 générateur de bruit) et 8 registres de contrôle.



Le volume de chaque voix peut être contrôlé séparément en 16 niveaux (du silence au plus fort) à l'aide des registres 0 à 3.



Chaque octet écrit au port de la puce sonore détermine soit le registre à utiliser avec sa valeur soit, la partie haute de la valeur la fréquence.



Registres de fréquence sonore



La valeur de la fréquence est codée sur 10 bits donc elle est partagée sur 2 octets



Premier octet  :



Code TEXT :
Bit 7    Bit 9    Bit 5    Bit 4    Bit 3    Bit 2    Bit 1    Bit 0
1    R2    R1    R0    D3    D2    D1    D0




Le bit 7 est à 1 pour indiquer qu'il s'agit d'un registre de contrôle.



R2~R0 correspondent au numéro de registre de contrôle.



000 Fréquence sonore pour la voix 1

001 Volume sonore pour la voix 1

010 Fréquence sonore pour la voix 2

011 Volume sonore pour la voix 2

100 Fréquence sonore pour la voix 3

101 Volume sonore pour la voix 3

110 Contrôle du bruit

111 Volume du bruit



D3~D0 correspondent soit aux 4 bits de poids faible de la valeur de la fréquence soit, à la valeur du volume.



Deuxième octet  :



Celui-ci contient la partie haute de la valeur de la fréquence.



Code TEXT :
Bit 7    Bit 9    Bit 5    Bit 4    Bit 3    Bit 2    Bit 1    Bit 0
0    xx    D9    D8    D7    D6    D5    D4




Le bit 7 est à 0 pour indiquer qu'il s'agit de la partie haute de la valeur de la fréquence .



D9-D4 correspond aux 6 bits de poids fort de la valeur de la fréquence.





Utilisation  :



Pour écrire la valeur de la fréquence vous devez d'abord envoyer le premier octet contenant indiquant la destination, puis le second indiquant le reste de la valeur de la fréquence.



Donc, si nous voulons un son de fréquence 11 0011 1010 b sur le canal 1, nous devons faire comme dans l'exemple suivant.



Tout d'abord, nous écrivons le mot de contrôle avec la première partie de la fréquence  :



LD A, 1000 1010b

OUT (F0h), A



Ensuite, la seconde partie de la fréquence :



LD A, 0011 0011b

OUT (F0h), A



Pour définir la fréquence de l'onde à générer, utilisez cette formule:



f = 3579545 / (32n)



f est la fréquence de sortie et n correspond à votre valeur binaire de 10 bits.




Tous ça est un extrait du PDF que j'ai fait au fur et à mesure que j'ai accumulé les infos. Le PDF est largement inachevé mais si il t'intéresse, je peux te le passer par MP. Tout est en Français. J'espère le finir un jour.



Jipé :
A0-BF (W) = Video ___ A0 also decoded by video chip

A0-BF (R) = Video /


Dans les doc. de la Colecovision, il y a parfois des phrases qui me laissent dubitatif.

Tout est indiqué comme si tous les ports avaient des reflèts (dans ce cas, de A0 à BF pour la vidéo et à côté, c'est écrit que le port A0H est aussi décodé. Ce qui semble contredire tout le reste et laisse penser que seule le port F0h est décodé pour le son après tout. Edité par GDX Le 10/07/2012 à 14h14
   
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 10/07/2012 à 15h24
Salut Jipé,

Que penses-tu de ce schéma ?



Il y a des résistances sur chaque Q alors sur ce schéma de mapper, il n'y en a pas.

http://msx.gouget.com.br/?p=65

Est-ce qu'elles ne sont pas nécessaires ? Peut-on les regrouper en une seule ? (Ce qui en ferait 2 au total.)
   
Fabf Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 24/08/2010 à 20h55

Messages: 4833

Le 10/07/2012 à 16h00
D'après ma logique, ça décode bien 0F0H
Maintenant celle de Jipé sera peut être différente ;)
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Association Groupe : Shoutbox

Inscrit le : 29/07/2010 à 17h19

Messages: 5488

Le 10/07/2012 à 18h55
Moi je trouve intéressant vôtre projet ;)

Par contre, plutôt que de modifier/Patcher la ROM Colécovision, il est peut être possible de faire un périphérique qui regroupe de PSG + Port Manette spécifique ;)

Ce serait une sorte de cartouche émulateur :heink puisqu'elle répondrait à la particularité du PSG et Manette de la Colecovision.

un peu comme la cartouche SVI-2000, mais avec les Port INPUT au lieu de OUTPUT:



Est ce possible :hum

Edit: Après tout, l'idée du MSX c'est de pouvoir être étendu :D Edité par igal Le 10/07/2012 à 18h58


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
Visiteur

Vagabond

Rang

Avatar

Message : 0

Le 10/07/2012 à 19h20
(je m'étais trompé de sujet ---- voir le projet en cours de Fabf)
   
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 11/07/2012 à 00h17
igal :
Par contre, plutôt que de modifier/Patcher la ROM Colécovision, il est peut être possible de faire un périphérique qui regroupe de PSG + Port Manette spécifique ;)


Pour ne pas avoir à patcher les jeux, il faudrait aussi ajouter le VDP qui provoque une interruption non-masquable à l'adresse 066h et voir même une ROM pour le BIOS de la ColecoVision.

Et puis, brancher des joystick sur une cartouche n'est pas une bonne solution car on risque de retirer la cartouche en tirant dessus en pleine partie. C'est pour ça que d'abord j'ai pensé à un adaptateur sans fil.



Le but de ce projet est de faire pas cher. Sinon, il y a PlaySoniq (ou Franky) qui existe et peut faire bien plus sans patch (ou très peu).



http://supersoniqs.com/projects/
   
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie