L'émulateur NES maintenant avec son sur ta Casio Graph 90+E !
Posté le 25/05/2020 15:21
Dans un article précédent nous t'annoncions une nouvelle fantastico-historique pour ta Graph 90+E(ou fx-CG10/20/50), la sortie par Thomas Williamson de NESizm, un émulateur pour la mythique console de jeux à cartouches 8 bits Nintendo NES de 1985.
Du travail de haute facture, selon nos tests tu pouvais jouer sur ta calculatrice :
- aussi bien les jeux Nintendo NES(Europe + Amérique du Nord) que Nintendo Famicom(la console compatible sortie dès 1983 au Japon)
- aussi bien les jeux optimisés au format vidéo PAL 50 Hz (Europe) que NTSC 60 Hz (Amérique du Nord + Japon)
Tout frais de cette nuit, Thomas nous sort NESizm 0.95 avec plusieurs nouveautés.
D'une part, nous t'avions déjà expliqué que la console NES disposait d'une fenêtre de seulement 40 Kio pour adresser le contenu des cartouches de jeu. Or nombre de jeux ont besoin de bien plus que cela, et embarquent à cette fin un circuit électronique dit mapper dans la cartouche, circuit dont le rôle est de présenter à la console à travers cette même fenêtre des zones différentes de la ROM lorsque nécessaire. Les mappers ont varié d'un éditeur de jeu à un autre, il en existe plein, plusieurs 100aines...
Les émulateurs Nintendo NES se doivent donc également de connaître et émuler le bon fonctionnement de ces circuits électroniques externes afin de permettre de jouer aux jeux les utilisant. Dans sa version précédente, NESizm supportait 10 mappers :
- NULL
- MMC1
- MMC2
- MMC3
- MMC6
- UNROM
- CNROM
- AOROM
- Camerica
- Colour Dreams
Le support des jeux était en conséquence relativement faible, notamment par rapport aux émulateurs NES disponibles pour les calculatrices concurrentes. Beaucoup de jeux populaires ne marchaient pas.
Et bien bonne nouvelle, un nouveau mapper est maintenant supporté par NESizm 0.95, Rambo-1.
De quoi enfin pouvoir lancer les différents jeux édités par Tengen sur ce support (Klax, Shinobi...).
Mais ce qui fait surtout de NESizm 0.95 une mise à jour majeure, c'est l'ajout d'une fonctionnalité d'importance, le support du son. Non non, tu ne rêves pas !
Il te suffira d'un simple adaptateur mini-Jack 3.5 femelle vers 2.5 mâle pour pouvoir jouer dans une toute nouvelle dimension !
Bien évidemment ce n'est pas de la haute fidélité comme tu peux l'entendre et le rendu est assez variable d'un jeu à l'autre, mais peut aller sur le très correct avec certains jeux.
Suite à l'éradication de Ndless sur les TI-Nspire, la Casio Graph 90+E était déjà la meilleure plateforme scolaire pour le gaming en terme de puissance disponible pour les créateurs !
Suite à la toute récente mise en voie d'extinction du développement en langage C et assembleur pour TI-83 Premium CE et TI-84 Plus CE, la Graph 90+E sera bientôt la meilleure plateforme pour apprendre en s'amusant également en terme de quantité de titres compatibles disponibles !
Dans la théorie, tu prends le contrôle du registre qui drive la tension aux bornes du port série.
→ On peut potentiellement faire du son stéréo
→ Par contre c'est du tout ou rien = 1-bit (comparé aux classiques 32-bits d'un mp3)
Dans la pratique, faut voir dans la Bible comment ça se fait.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Dans la théorie, tu prends le contrôle du registre qui drive la tension aux bornes du port série.
Non, le module qui s'occupe du port 3pins s'appelle SCIF (Serial Communication Interface with FIFO) et il n'existe pas de registre qui gère la tentions. En revanche, il contient un registre qui permet de changer la fréquence d'envoi des données. Donc si on bourrine intelligemment le port 3pins on peut arriver a être précis sur la tentions de sortie et donc avoir du son.
Au passage, le driver de Casio est vraiment pas dégueux et il se désassemble facilement (et en plus, la documentation du SCIF du SH7724 est parfaitement conforme a celui du SH7305) Je dis ça, je dis rien
Non, le module qui s'occupe du port 3pins s'appelle SCIF (Serial Communication Interface with FIFO) et il n'existe pas de registre qui gère la tentions.
Tu peux faire du bit banging avec PUCR et PJCR auquel cas tu passes la tension de 0 à 5V quoi. Le bourrinage utilise le port série pour économiser de la puissance sur le CPU mais c'est pas la façon naturelle de faire (il y a un bruit à cause du protocole).
On sait faire, même si on n'a que du code un peu expérimental pour ça. Mais je suis à peu près sûr qu'il a juste bien utilisé le port 1-bit pour avoir ce résultat.
Ce qui est marrant par contre c'est qu'il utilise une certaine libsnd qui m'a l'air d'être un outil bien externe (je trouve que ça : https://github.com/everdrone/libsnd) donc ça ne nous dit pas tout de suite comment il a configuré le port.
J'ai allègrement fait le tour des sources sans trouver de référence explicite aux ports. Il l'a bien caché le bougre, peut-être dans sa config de libsnd.a. J'ai tenté de le compiler mais ultimement ça marche pas parce qu'il shippe son propre SDK avec des binaires compilés avec une version assez obsolète du compilateur, donc je peux pas linker le truc final.
Ajouté le 25/05/2020 à 22:03 :
Je sais pas comment je suis passé à côté de la libsnd *dans la copie du PrizmSDK* que TSWilliamson utilise. J'ai été un peu vite...
Il mashe le port série comme le faisait Martin Poupe.
Yeah it's essentially just a raw stream of bits via the serial port. I am using the OS's internal buffer and interrupts to maintain the buffer, so conceivably this could be made more efficient by circumventing that.
No to step on Critor's toes, but the sound is much better than his output. I think his amp is not happy with the 1-bit encoding or similar. It sounds very very good with headphones.
I've read your article, this work is really awesome. I will definitely be interested in implementing something similar in my libraries in the future. How should I go about using/crediting your algorithms or code, if acceptable at all?
Tswilliamson a écrit : No to step on Critor's toes, but the sound is much better than his output. I think his amp is not happy with the 1-bit encoding or similar. It sounds very very good with headphones.
Ah, sorry for not featuring your emulator at its best then.
It's a great achievement.
I was anxiously awaiting the sound to come out.
Congratulations!
The power consumption during Nesizm execution is about 40mA with normal CG50,
so it will be possible to continue for about 20 hours with 900mAH NiMH rechargeable battery.
Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Sentaro is that the power draw PER battery for all four batteries? I'm definitely experiencing much more battery life than that. Since I started back on NESizm in November I've had to replace my batteries just once.
Tswilliamson a écrit : Oh, it's not a problem. Very few people will have or buy the adapter to enjoy it anyway
I'm sure a bunch of us still have headphones from Ye Olden Days, from devices like the XBox or 2.5mm jack phones or music players.
Tbh, I would have gotten myself an adapter or soldered a speaker inside the calculator back when I was in high school if that meant I could play music, even with a low quality.
If we do get an SH4 compatible music player, I'm sure there'll be plenty of fun to be had with it.
Given the storage constraints, even at 64 kbps many formats would still not be able to fit all that much music. Now.. a MIDI player though, that would be interesting :-)
You could do some kind of MIDI with samples and a bit of compositing, if by chance enough CPU power is available for that. I'll really want to experiment when my kernel gets stable enough
Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd
Citer : Posté le 25/05/2020 15:24 | #
Excellente nouvelle !
Dommage que je n'ai pas de convertisseur prise jack 3.5 vers 2.5...
Citer : Posté le 25/05/2020 15:30 | #
En voici un qui m'a l'air pas mal :
https://www.amazon.fr/VCE-Paquets-femelle-st%C3%A9r%C3%A9o-adaptateur/dp/B077V57QBK/ref=sr_1_3?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&dchild=1&keywords=jack+2.5+3.5&qid=1590409540&s=electronics&sr=1-3
On peut trouver moins cher, mais avec des dimensions qui risquent selon moi de coincer sur Graph 90+E où le port est dans une sorte de renfoncement.
Citer : Posté le 25/05/2020 17:03 | #
Merci de l'article, c'est encourageant !
Oh je serai curieux de savoir par quel moyen ils sont arrivés à balancer du son (par quelle technique )
Citer : Posté le 25/05/2020 17:55 | #
Je crois bien qu'on ne sait toujours pas, le créateur reste muet sur cette question (?). En tout cas, c'est sûrement le même système que pour prizoop
Citer : Posté le 25/05/2020 17:59 | #
Dans la théorie, tu prends le contrôle du registre qui drive la tension aux bornes du port série.
→ On peut potentiellement faire du son stéréo
→ Par contre c'est du tout ou rien = 1-bit (comparé aux classiques 32-bits d'un mp3)
Dans la pratique, faut voir dans la Bible comment ça se fait.
Citer : Posté le 25/05/2020 18:05 | #
Je sais mais je suis assez impressioné de cela, malgrè la qualité, (même en 1bit et pas de module externe, c'est pas si dégeu)
Citer : Posté le 25/05/2020 18:11 | #
Non, le module qui s'occupe du port 3pins s'appelle SCIF (Serial Communication Interface with FIFO) et il n'existe pas de registre qui gère la tentions. En revanche, il contient un registre qui permet de changer la fréquence d'envoi des données. Donc si on bourrine intelligemment le port 3pins on peut arriver a être précis sur la tentions de sortie et donc avoir du son.
Au passage, le driver de Casio est vraiment pas dégueux et il se désassemble facilement (et en plus, la documentation du SCIF du SH7724 est parfaitement conforme a celui du SH7305) Je dis ça, je dis rien
Citer : Posté le 25/05/2020 18:26 | #
Tu peux faire du bit banging avec PUCR et PJCR auquel cas tu passes la tension de 0 à 5V quoi. Le bourrinage utilise le port série pour économiser de la puissance sur le CPU mais c'est pas la façon naturelle de faire (il y a un bruit à cause du protocole).
On sait faire, même si on n'a que du code un peu expérimental pour ça. Mais je suis à peu près sûr qu'il a juste bien utilisé le port 1-bit pour avoir ce résultat.
Ce qui est marrant par contre c'est qu'il utilise une certaine libsnd qui m'a l'air d'être un outil bien externe (je trouve que ça : https://github.com/everdrone/libsnd) donc ça ne nous dit pas tout de suite comment il a configuré le port.
J'ai allègrement fait le tour des sources sans trouver de référence explicite aux ports. Il l'a bien caché le bougre, peut-être dans sa config de libsnd.a. J'ai tenté de le compiler mais ultimement ça marche pas parce qu'il shippe son propre SDK avec des binaires compilés avec une version assez obsolète du compilateur, donc je peux pas linker le truc final.
Ajouté le 25/05/2020 à 22:03 :
Je sais pas comment je suis passé à côté de la libsnd *dans la copie du PrizmSDK* que TSWilliamson utilise. J'ai été un peu vite...
Il mashe le port série comme le faisait Martin Poupe.
Citer : Posté le 26/05/2020 18:59 | #
I described my new approach to the BTc algorithm here:
https://www.cemetech.net/forum/viewtopic.php?p=285925
Yeah it's essentially just a raw stream of bits via the serial port. I am using the OS's internal buffer and interrupts to maintain the buffer, so conceivably this could be made more efficient by circumventing that.
The code is all in https://github.com/tswilliamson/PrizmSDK/tree/master/utils/snd
No to step on Critor's toes, but the sound is much better than his output. I think his amp is not happy with the 1-bit encoding or similar. It sounds very very good with headphones.
Citer : Posté le 26/05/2020 20:46 | #
Thanks for dropping in to answer our questions!
I've read your article, this work is really awesome. I will definitely be interested in implementing something similar in my libraries in the future. How should I go about using/crediting your algorithms or code, if acceptable at all?
Citer : Posté le 26/05/2020 20:48 | #
Feel free to use however you see fit! I always appreciate a thanks in the readme or similar, that's it :-)
Citer : Posté le 26/05/2020 21:12 | #
No to step on Critor's toes, but the sound is much better than his output. I think his amp is not happy with the 1-bit encoding or similar. It sounds very very good with headphones.
Ah, sorry for not featuring your emulator at its best then.
Citer : Posté le 26/05/2020 21:47 | #
Oh, it's not a problem. Very few people will have or buy the adapter to enjoy it anyway
But.. yeah this is closing in on the best portable NES experience. 100 hrs of battery life w/ sound and 60 FPS? Yes plz :-)
Citer : Posté le 27/05/2020 08:32 | #
It's a great achievement.
I was anxiously awaiting the sound to come out.
Congratulations!
The power consumption during Nesizm execution is about 40mA with normal CG50,
so it will be possible to continue for about 20 hours with 900mAH NiMH rechargeable battery.
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Citer : Posté le 28/05/2020 16:23 | #
Sentaro is that the power draw PER battery for all four batteries? I'm definitely experiencing much more battery life than that. Since I started back on NESizm in November I've had to replace my batteries just once.
Citer : Posté le 28/05/2020 18:00 | #
Oh, it's not a problem. Very few people will have or buy the adapter to enjoy it anyway
I'm sure a bunch of us still have headphones from Ye Olden Days, from devices like the XBox or 2.5mm jack phones or music players.
Tbh, I would have gotten myself an adapter or soldered a speaker inside the calculator back when I was in high school if that meant I could play music, even with a low quality.
If we do get an SH4 compatible music player, I'm sure there'll be plenty of fun to be had with it.
Je suis de l'autre coté de la manche maintenant. Yay.
Citer : Posté le 28/05/2020 18:12 | #
The problem here is how to compress the music, but it'd be fun and I hope someone does it.
Citer : Posté le 28/05/2020 19:10 | #
Given the storage constraints, even at 64 kbps many formats would still not be able to fit all that much music. Now.. a MIDI player though, that would be interesting :-)
Citer : Posté le 28/05/2020 20:58 | #
You could do some kind of MIDI with samples and a bit of compositing, if by chance enough CPU power is available for that. I'll really want to experiment when my kernel gets stable enough
Citer : Posté le 10/08/2021 11:49 | #
J'aime aussi ces sons et je les écoute souvent sur la radio en ligJ'aime aussi ces sons et je les écoute souvent sur la radio en ligne.