Sign in

Upsilandre

@upsilandre.bsky.social
255 followers 13 following 85 posts

Je fais quelques analyses retrogaming et parfois des hacks. Mon blog: upsilandre.over-blog.com Quelques Hacks: romhackplaza.org/author-name/upsila…

PostsRepliesMedia
Upsilandre @upsilandre.bsky.social · 13/11/2025
Non celui là est bien en mode 7, je parle justement de cet exemple parmi d'autre dans le billet que j'ai mis en lien 🙂
010
Upsilandre @upsilandre.bsky.social · 13/11/2025
Le fait d'avoir qu'une seul tilemap et de ne pas pouvoir profiter du warping en mode 2 joueurs pour une update classique de la tilemap et du scrolling est très pénalisant et rend le truc impossible à 60fps.
010
Upsilandre @upsilandre.bsky.social · 13/11/2025
Ah génial je connaissais pas ce jeu! effectivement j'ai regardé, c'est infernal, ca remet à jour constamment l'intégralité des tilemap 512x512 pour adapter le PoV. En effet c'est pas très tenable en 60fps 😅.
100
Upsilandre @upsilandre.bsky.social · 13/11/2025
Voilà donc, selon moi, 4 exemples de mythes et légendes techniques erronées sur SNES, souvent fondés sur du bon sens, ce qui explique leur longévité. N'hésitez pas à en partager d'autres ici. J'en suis très friand et il y en a probablement plein que je ne connais pas 😀.
070
Upsilandre @upsilandre.bsky.social · 13/11/2025
Voici une image de comparaison de la taille des circuits de Mario Kart, tous au même format 1024x1024 pixels, avec le plus grand un circuit F-Zero (7168x3824).
130
Upsilandre @upsilandre.bsky.social · 13/11/2025
C'est donc la taille minuscule des circuits qui implique de réduire la vitesse, pas une impossibilité technique. L'idée du karting découle alors de là. Je vous avais aussi déjà détaillé toute cette histoire dans un billet: upsilandre.over-blog.com/2022/06/debu... .
120
Upsilandre @upsilandre.bsky.social · 13/11/2025
Ajouter un mode 2 joueurs oblige à faire tenir les circuits intégralement en VRAM ce qui limite leur taille à 1024x1024 pixels comme dans Mario Kart ou Street Race. C'est une contrainte technique qui n'est pas vraiment contournable dans ce contexte.
210
Upsilandre @upsilandre.bsky.social · 13/11/2025
La véritable raison technique de cette impossibilité vient de la taille des circuits, pas de la vitesse. Ce qu'il est impossible de faire sur SNES c'est un F-Zero à 2 joueurs en gardant la même taille de circuit.
110
Upsilandre @upsilandre.bsky.social · 13/11/2025
Le mythe vient plutôt de la raison technique évoquée. Ce serait la vitesse très élevée de scrolling dans F-Zero qui empêcherait irrémédiablement de faire un équivalent à 2 joueurs.
110
Upsilandre @upsilandre.bsky.social · 13/11/2025
Vous connaissez probablement l'histoire de Mario Kart qui émerge de la volonté de faire un F-Zero à 2 joueurs ce qui se révèle techniquement impossible et qui donnera donc Mario Kart.
100
Upsilandre @upsilandre.bsky.social · 13/11/2025
4️⃣ On termine avec Super Mario Kart 4️⃣
111
Upsilandre @upsilandre.bsky.social · 13/11/2025
En réalité tous ces freezes viennent d'une très mauvaise gestion du loading des samples audio dans la RAM audio de la SNES en plus de les charger plusieurs fois. Ce problème à été corrigé récemment avec le patch MSU-1.
110
Upsilandre @upsilandre.bsky.social · 13/11/2025
Le but étant de faire cette décompression de manière dynamique pendant le round car dans un versus fighting il faut constamment charger de nouvelles frames d'animation. Donc il n'est surtout pas là pour interrompre le déroulé du jeu, bien au contraire.
100
Upsilandre @upsilandre.bsky.social · 13/11/2025
En effet la cartouche embarque un chip S-DD1 conçu par Nintendo et Ricoh et utilisé aussi dans Star Ocean. C'est un chip de décompression de tuile graphique qui est là justement pour décompresser les tuiles de manière transparente pour la SNES, à la volée.
110
Upsilandre @upsilandre.bsky.social · 13/11/2025
Comme on le voit sur le gif ci dessus, en début de round il y a 3 freezes consécutif. Un long, un court et un long, pour un total cumulé assez conséquent de 7 secondes. La légende raconte que c'est la décompression des données graphiques qui cause ces freezes.
110
Upsilandre @upsilandre.bsky.social · 13/11/2025
3️⃣ Parlons maintenant du cas Street Fighter Zero 2 3️⃣
100
Upsilandre @upsilandre.bsky.social · 13/11/2025
Le seul moment in-game du jeu ou le mode 7 est utilisé c'est pour animer la rotation de la tête du boss ED-209. Mais tout ça je vous l'avais détaillé dans un billet dédié: upsilandre.over-blog.com/2023/02/axel... .
100
Upsilandre @upsilandre.bsky.social · 13/11/2025
Un mythe des plus classique qui raconte qu'on doit cet effet rouleau étonnant au mode 7 de la SNES alors qu'il n'en est rien. C'est du mode 1 avec un simple raster effect aidé par sa fonction hardware HDMA. Je m'étais amusé à reproduire l'effet sur une NES ⬇️
273
Upsilandre @upsilandre.bsky.social · 13/11/2025
2️⃣ Restons dans les shmups avec Axelay 2️⃣
121
Upsilandre @upsilandre.bsky.social · 13/11/2025
Par exemple dans Super Aleste on retrouve des phases comme celle ci, souvent utilisés sur les shmups 8bit pour avoir des scènes de shoot intense à moindre coût car les tests de collision avec les tuiles de background sont sensiblement moins coûteuses que celles entre sprites.
121
Upsilandre @upsilandre.bsky.social · 13/11/2025
Si le jeu tourne si bien c'est avant tout grâce à l'expertise de Compile qui ont fait leurs armes sur toutes les machines 8bit même les plus limitées et savent parfaitement faire des shmups spectaculaires avec peu de ressource.
120
Upsilandre @upsilandre.bsky.social · 13/11/2025
J'ai quand même creusé et je n'ai rien trouvé. A priori le SPC700 ne s'occupe que de la musique et des bruitages comme attendu. Aucune trace de quoique ce soit d'autre.
110
Upsilandre @upsilandre.bsky.social · 13/11/2025
Ca semblait peu probable car les communications entre le CPU principal et le CPU audio sont très lentes et laborieuses. Donc difficile de trouver une tâche pertinente à déférer qui puisse avoir un réel impact.
110
Upsilandre @upsilandre.bsky.social · 13/11/2025
La légende autour de Super Aleste raconte que si ce shmup tourne si bien sur SNES, comparé à d'autres, c'est parce qu'il décharge certaines tâches sur le CPU audio (le SCP700) pour soulager le CPU de la console.
130
Upsilandre @upsilandre.bsky.social · 13/11/2025
Un thread rapide sur 4 mythes et légendes techniques ,souvent partagés mais erronés, concernant 4 jeux SNES. Ça m'a pris comme ça ce matin 😀. N'hésitez pas à en ajouter en commentaire, j'adore ces mythes.⬇️ #Retrogaming #SNES 1️⃣ Commençons par Super Aleste... 1️⃣
14024
Upsilandre @upsilandre.bsky.social · 06/11/2025
Tout ca est très direct et revient a lire directement l'état des boutons selon moi. C'est un processus qui se compte plutôt en microseconde qu'en milliseconde.
010
Upsilandre @upsilandre.bsky.social · 06/11/2025
Effectivement même sur NES les inputs sont lu en série. De ce que j'en sais, quand tu lis les inputs du pad tu envoie un signal par le port qui va induire le chargement instantané d'un registre à décalage dans le pad avec l'état exacte de chaque input, ensuite tu lis ce registre par shift successif.
100
Upsilandre @upsilandre.bsky.social · 06/11/2025
Voila a peu prêt tout ce que j'ai compris pour l'instant. Je vous met le lien du thread précèdent sur l'input lag. bsky.app/profile/upsi...
100
Upsilandre @upsilandre.bsky.social · 06/11/2025
Logiquement il est censé être peu significatif aussi même avec un microcontrôleur bas de gamme mais difficile de savoir quelle tambouille interne font certaines manettes, notamment pour économiser de l'énergie (pour le wireless). D'autant que c'est très difficile à mesurer.
100
Upsilandre @upsilandre.bsky.social · 06/11/2025
Il y a aussi le temps de traitement par le driver de la machine hôte mais qui en toute logique est insignifiant. Par contre c'est un peu plus flou pour le temps de traitement interne à la manette. Combien de temps le microcontrôleur consacre à la préparation du paquet de données?
100
Upsilandre @upsilandre.bsky.social · 06/11/2025
Fréquence d'échantillonnage interne de la manette et polling rate du contrôleur hôte (USB, Bluetooth ou autre) sont donc les principales sources de latence de la manette moderne. A cela peut s'ajouter aussi quelques instabilités dans les communications, surtout en wireless.
100
Upsilandre @upsilandre.bsky.social · 06/11/2025
A savoir que sur un PC il est possible de forcer un polling rate plus élevé sur le contrôleur USB hôte que celui proposer par défaut par la manette afin de réduire un peu plus la latence.
100
Upsilandre @upsilandre.bsky.social · 06/11/2025
Personnellement j'utilise Wireshark, qui est un soft de capture des I/O sur PC, pour identifier le polling rate et la fréquence d'échantillonnage de la manette (si celle ci n'est pas supérieur au polling rate). Si besoin je pourrais peut être faire une petite vidéo tuto.
120
Upsilandre @upsilandre.bsky.social · 06/11/2025
A l'inverse j'ai aussi mon adaptateur Raphnet pour pad Nintendo classic qui me permet d'avoir 1000Hz de fréquence d'échantillonnage interne et 1000Hz de polling rate USB soit entre 0 et 2ms de latence. Je crois que la 8bitdo Ultimate 2 propose aussi ce type de performance.
200
Upsilandre @upsilandre.bsky.social · 06/11/2025
Ma manette 8bitdo SN30pro+ fait même encore moins bien avec seulement 100Hz d'échantillonnage et 250Hz de polling rate USB ce qui fait un total qui monte jusqu'à 14ms, presque une frame 60fps. Les 2 n'étant même pas des multiples, le jitter est donc encore plus chaotique.
100
Upsilandre @upsilandre.bsky.social · 06/11/2025
Ca a l'air d'être à peu près le standard d'une manette basique d'aujourd'hui. Ce qui veut dire une latence variable entre 0 et 12ms qui s'ajoute au 16ms de variabilité d'un jeu 60fps. Ce qui commence à faire un jitter élevé (entre 0 et 28ms).
100
Upsilandre @upsilandre.bsky.social · 06/11/2025
Et à peut prêt du même ordre de grandeur pour la fréquence d'échantillonnage interne de la manette. Typiquement ce que j'ai constaté sur mes manettes c'est 125Hz d'échantillonnage interne (soit entre 0 et 8ms de latence) et 250Hz de polling rate USB (entre 0 et 4ms de latence).
100
Upsilandre @upsilandre.bsky.social · 06/11/2025
On a déjà vu qu'avec un jeu à 60fps on obtient un polling des inputs par le moteur du jeu à 60Hz qui va produire entre 0 et 16ms de latence. Les polling rate du contrôleur USB hôte lui utilise en général des valeurs plus élevées de type: 125Hz, 250Hz, 500Hz ou 1000Hz.
100
Upsilandre @upsilandre.bsky.social · 06/11/2025
Donc tout ça produit des latences aléatoires (jitter), pour les même raison que j'ai expliqué sur le thread précèdent, et ces 3 sources de latence se cumulent. Ce sont donc les fréquences en question qui vont définir le niveau de latence comme pour celle du moteur du jeu.
100
Upsilandre @upsilandre.bsky.social · 06/11/2025
Le moment où vous appuyez tombe peut être malheureusement juste après celui où le microcontrôleur de la manette à scanné le bouton. Et le moment où ce dernier scan les inputs tombe peut être juste après celui où le contrôleur USB hôte à interrogé celui de la manette etc…
100
Upsilandre @upsilandre.bsky.social · 06/11/2025
Le polling rate du contrôleur USB hôte ou la fréquence d'échantillonnage interne de la manette ne sont pas synchronisés entre eux, pas plus qu'ils ne le sont avec le polling rate du moteur du jeu ou les doigts du joueurs.
100
Upsilandre @upsilandre.bsky.social · 06/11/2025
Dans la manette, le microcontrôleur doit préparer le paquet de données à transmettre. Une tâche qui consiste entre autres à scanner les divers inputs et qui est exécuté et répété à une certaine fréquence. Cette fréquence d'échantillonnage interne est une autre source de latence.
100
Upsilandre @upsilandre.bsky.social · 06/11/2025
Dans cette situation c'est le contrôleur USB hôte (celui du PC, console...) qui va prendre l'initiative d'interroger celui de la manette à une certaine fréquence qu'on appelle le polling rate et qui est la première source de latence.
100
Upsilandre @upsilandre.bsky.social · 06/11/2025
Cette communication entre la manette moderne et la machine de jeu est donc assujettie à un protocole. Un contrôleur USB (ou Bluetooth et autre) à plusieurs modes de communication. Celui utilisé par les manettes est un mode de communication par "interruption".
100
Upsilandre @upsilandre.bsky.social · 06/11/2025
La distinction se fait sur leur nature profonde. Une manette moderne c'est une machine qui communique avec une autre machine alors qu'une vieille manette est une excroissance de la console. Appuyer sur un bouton de celle-ci c'est comme appuyer sur un bouton de la console.
110
Upsilandre @upsilandre.bsky.social · 06/11/2025
En effet, les vieilles manettes de l'ère 8/16 bit ne sont pas un sujet puisqu'elles n'ont aucune latence. Ce pose donc la question d'où vient celui des contrôleurs modernes? On a souvent associé ça au wireless mais ce n'est pas la présence ou l'absence de câble qui explique cela.
200
Upsilandre @upsilandre.bsky.social · 06/11/2025
Dans le précédent thread j'ai évoqué l'input lag lié à la fréquence de polling du moteur du jeu. Je vais maintenant parler des contrôleurs, mais ceux d'aujourd'hui. A l'inverse du précédent thread ca va donc plutôt concerner le retrogaming en émulation. #Retrogaming #Inputlag
22819
Upsilandre @upsilandre.bsky.social · 31/10/2025
Ca permet aussi de réaliser que même sur vrai hardware + CRT et avec un jeu optimal (60 FPS et traitement optimal des inputs) on peut avoir jusqu'à 56ms d'input lag dans le cas le plus défavorable (mauvais timing d'input, 50 Hz, action tout en bas de l'écran).
120
Upsilandre @upsilandre.bsky.social · 31/10/2025
On constate très bien ici la variabilité de l'input lag entre les 2 cas les plus extrêmes qui correspond bien à une frame. Ici un écart de 20ms puisque c'est du 50 Hz / 50 FPS.
100
Upsilandre @upsilandre.bsky.social · 31/10/2025
C'est ce que je montre sur ce gif qui capture l'input lag de SMB2 sur une NES 50hz et un CRT. La LED verte sur l'écran indique le moment où j'appuie sur le bouton. Le nombre affiché correspond quasiment à des millisecondes (je compte les frames de capture à 960 fps = 1,04ms).
100