L'école Pratique du MSX2 corrigé et amélioré
TurboSEB
Membre non connecté
Conseiller Municipal
Reprise du message précédent
http://www.msxvillage.fr/forum/topic.php?id=691#m11553Le 3eme bouton du GB7s ca doit etre les 2 autres bouton en meme temps
MSX 1&2 + Moniteurs+divers (environ 0.70Tonnes)
gdx, j'ai relevé une erreur page 232.
Les valeurs des bits du registre 7 du PSG doivent être inversées :'0' pour activer, '1' pour neutraliser.
Et de toutes façons, le bit à 1 serait mal positionné pour activer la voix 1 (là, il active le générateur de bruit blanc sur la voix 1).
Il faudrait écrire :
Et la remarque est valable aussi pour le petit programme en BASIC juste en dessous.
EDIT : Et d'ailleurs, je me rends compte que le tableau de la page 233 est faux également pour le registre 7.
Les bits 0,1,2 contrôlent l'activation (bit à '0') et la désactivation (bit à '1') du son (et non pas du bruit).
Les bits 3,4,5 contrôlent l'activation (bit à '0') et la désactivation (bit à '1') du bruit (et non pas du son). Edité par Metalion Le 07/12/2016 à 16h02
Code :
ld e,10001000b ; Active la voix 1
call WRTPSG
ret
Les valeurs des bits du registre 7 du PSG doivent être inversées :'0' pour activer, '1' pour neutraliser.
Et de toutes façons, le bit à 1 serait mal positionné pour activer la voix 1 (là, il active le générateur de bruit blanc sur la voix 1).
Il faudrait écrire :
Code :
ld e,10111110b ; Active la voix 1
call WRTPSG
ret
Et la remarque est valable aussi pour le petit programme en BASIC juste en dessous.
EDIT : Et d'ailleurs, je me rends compte que le tableau de la page 233 est faux également pour le registre 7.
Les bits 0,1,2 contrôlent l'activation (bit à '0') et la désactivation (bit à '1') du son (et non pas du bruit).
Les bits 3,4,5 contrôlent l'activation (bit à '0') et la désactivation (bit à '1') du bruit (et non pas du son). Edité par Metalion Le 07/12/2016 à 16h02
MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
En fait non, l'erreur est dans le tableau, pas dans l'exemple. Il faut bien mettre 10001000b pour activer le générateur sonnore sur la voix 1. Merci, je corrige ça très bientôt.
La bonne explication est :
Les bits 0,1,2 servent à activer (bit à 1) et désactiver (bit à 0) le générateur de bruit.
Les bits 3,4,5 contrôlent à activer (bit à 1) et désactiver (bit à 0) le générateur de bruit sonore.
Le tableau de clef pour MSX est faux aussi.
La bonne explication est :
Les bits 0,1,2 servent à activer (bit à 1) et désactiver (bit à 0) le générateur de bruit.
Les bits 3,4,5 contrôlent à activer (bit à 1) et désactiver (bit à 0) le générateur de bruit sonore.
Le tableau de clef pour MSX est faux aussi.
Non, GDX, la bonne explication est bien celle que j'écris plus haut (double erreur sur la position des bits et sur leur signification) :
- Les bits 0,1,2 contrôlent l'activation (bit à '0') et la désactivation (bit à '1') du son (et non pas du bruit).
- Les bits 3,4,5 contrôlent l'activation (bit à '0') et la désactivation (bit à '1') du bruit (et non pas du son).
Il te suffit de faire un petit programme en BASIC avec l'instruction SOUND pour le vérifier.
Extrait du MSX2 Technical Handbook (confirmé dans le MSX Red Book)
Et surtout, tu peux aussi le vérifier dans le datasheet du AY-3-8910 :
http://map.grauw.nl/resources/sound/generalinstrument_ay-3-8910.pdf Edité par Metalion Le 08/12/2016 à 09h44
- Les bits 0,1,2 contrôlent l'activation (bit à '0') et la désactivation (bit à '1') du son (et non pas du bruit).
- Les bits 3,4,5 contrôlent l'activation (bit à '0') et la désactivation (bit à '1') du bruit (et non pas du son).
Il te suffit de faire un petit programme en BASIC avec l'instruction SOUND pour le vérifier.
Extrait du MSX2 Technical Handbook (confirmé dans le MSX Red Book)
Code :
B7 B6 B5 B4 B3 B2 B1 B0
----------------- ------------------------- -------------------------
| Input enable* | | Noise enable* | | Tone enable* |
|---------------| |-----------------------| |-----------------------|
| B | A | | C | B | A | | C | B | A |
----------------- ------------------------- -------------------------
I/O port Noise output Tone output
Input - 0 ON - 0 ON - 0
Output - 1 OFF - 1 OFF - 1
Et surtout, tu peux aussi le vérifier dans le datasheet du AY-3-8910 :
http://map.grauw.nl/resources/sound/generalinstrument_ay-3-8910.pdf Edité par Metalion Le 08/12/2016 à 09h44
MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
Ces programmes d'exemple ont été testés et re-testé. Entre la ligne suivante, tu verras que ça marche.
SOUND 0,&hAC: SOUND 1,1: SOUND 8,&b1100 : SOUND 7,&b10001000
Ça joue un DO octave 4 sur la voix 1 avec un volume à 12.
Edit: Avant il vaut mieux initialiser les registres avec le programme suivant.
10 FOR R=0 TO 13
20 IF R=7 THEN SOUND R,&B10000000 ELSE SOUND R,0
30 NEXT
Edité par GDX Le 09/12/2016 à 09h50
Ça joue un DO octave 4 sur la voix 1 avec un volume à 12.
Edit: Avant il vaut mieux initialiser les registres avec le programme suivant.
20 IF R=7 THEN SOUND R,&B10000000 ELSE SOUND R,0
30 NEXT
Edité par GDX Le 09/12/2016 à 09h50
GDX :
Entre la ligne suivante, tu verras que ça marche.
Ca marche parce que tu actives les 3 voix en même temps (bits à zéro sur les 3 premiers bits).
Donc, forcément la voix 1 est activée !!!
Je t'invite à faire ce petit test, qui va te confirmer ce que j'ai écrit :
SOUND7,&b10111111: SOUND1,15:SOUND3,12:SOUND8,10:SOUND9,10
Selon ce que tu dis, là on a activé toutes les voix (et même le bruit blanc sur toutes les voix, d'ailleurs).
Et mis le volume à 10 sur les 2 premières voix. Et pourtant ... Aucun son ne sort ! Ni aucun bruit blanc.
Je te mets d'ailleurs au défi de sortir un son du PSG sur quelque voix que ce soit avec cette valeur du registre 7 !
Puisqu'en fait, toutes les voix et le générateur de bruit sont neutralisés (bit 0 - 5 à 1).
SOUND7,&b10111110
Là le son de la première voix se fait entendre (puisque l'on vient en fait seulement d'activer la voix 1 en mettant le bit 0 à 0).
SOUND7,&b10111101
Le son de la voix 1 disparait et le son de la voix 2 apparait (bit 1 à 0).
SOUND7,&b10111100
La, les 2 sons sont joués en même temps.
Des erreurs de retranscription, pourquoi pas, mais je doute que General Instrument ait pu commettre une aussi grossière erreur dans le manuel technique de son IC AY-3-8910 (voir mon lien dans le message précédent) !!! ... Surtout quand c'est confirmé par les tests.
PS : Tu remarqueras que mes tests n'ont pas besoin de ton programme d'initialisation ... Parce que justement, ta commande SOUND7,&b10001000 active les 3 voix en même temps (10001000) ainsi que le générateur de bruit sur les voix 2 et 3 (10001000). Il est donc alors nécessaire de mettre le volume des voix 2 et 3 à zéro pour éviter la cacophonie ... Edité par Metalion Le 09/12/2016 à 09h39
MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
C'est corrigé !
pratique_du_MSX.zip
Heureusement que tu persistes. Edité par GDX Le 04/06/2017 à 06h28
pratique_du_MSX.zip
Heureusement que tu persistes. Edité par GDX Le 04/06/2017 à 06h28
popolon
Membre non connecté
Villageois
j'ai pas eu le temps de répondre ce matin mais Metalion a bien résumé
et bien fait d'avoir insisté
et pour ceux qui veulent aller plus loin qu'une note, frèère jaacques... :
http://msxvillage.fr/forum/topic.php?id=569 Edité par popolon Le 09/12/2016 à 12h45
et bien fait d'avoir insisté
et pour ceux qui veulent aller plus loin qu'une note, frèère jaacques... :
http://msxvillage.fr/forum/topic.php?id=569 Edité par popolon Le 09/12/2016 à 12h45
tout, tout, tout, vous saurez tout sur la zizi...que
J'ai pas mal réfléchi avant, et ça serait dommage de priver tout le mode de ce document tout ça à cause deux personnes. Donc revoici, le Pratique du MSX avec de nombreuses corrections et ajouts.
pratique du MSX.zip
Les variables EXPTBL et MNROM (0FCC1h~0FCC4h) sont maintenant bien expliquées. Le PSG est tout détaillé. L'entête des ROM aussi.
J'ai ajouté une liste sur les ports E/S, des exemples de recherche de RAM, et plein d'autres choses.
pratique du MSX.zip
Les variables EXPTBL et MNROM (0FCC1h~0FCC4h) sont maintenant bien expliquées. Le PSG est tout détaillé. L'entête des ROM aussi.
J'ai ajouté une liste sur les ports E/S, des exemples de recherche de RAM, et plein d'autres choses.
merci GDX
Sector28bis:
Je ne le remplacerai pas.
Il ne faut pas oublier que ce livre est pédagogique et s'adresse à tous ceux qui veulent programmer en assembleur. Les débutants ont besoin de comprendre qu'on compare l'accumulateur à la valeur zéro, en utilisant les opérandes classiques. Et donc en faisant "CP 0".
Plus tard, ils comprendront que l'on peut remplacer cette opération en utilisant "AND A", mais cela fait partie des optimisations, des trucs et astuces en assembleur Z80.
Ce qui est important ici, c'est de comprendre la structure logique du programme, pas de l'optimiser.
Sector28bis:
section 11.3 Le « PRINT » en assembleur
je remplacerais le "CP 0" par "AND A"
je remplacerais le "CP 0" par "AND A"
Je ne le remplacerai pas.
Il ne faut pas oublier que ce livre est pédagogique et s'adresse à tous ceux qui veulent programmer en assembleur. Les débutants ont besoin de comprendre qu'on compare l'accumulateur à la valeur zéro, en utilisant les opérandes classiques. Et donc en faisant "CP 0".
Plus tard, ils comprendront que l'on peut remplacer cette opération en utilisant "AND A", mais cela fait partie des optimisations, des trucs et astuces en assembleur Z80.
Ce qui est important ici, c'est de comprendre la structure logique du programme, pas de l'optimiser.
MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie