Une demo SGX par punkfloyd

Le coin des demomakers et des programmeurs en herbe.

Modérateurs : SirG, Redfield1, shubibiman, Laucops

Avatar de l’utilisateur
touko
NECromancer
Messages : 2297
Inscription : lun. 31 mars 2008 14:32

Re: Une demo SGX par punkfloyd

Message par touko »

Ah bon, mais normalement tu dois pas reseter à la sortie du timer ???
Parce que sinon ton timer ne se déclanche plus !!
nop a écrit :Deflemask est assez simple à utiliser, et il y a quelques tutos sur youtube pour se lancer. Il faut quelque jours pour se faire la main et après ça va tout seul.
Niveau relecture des données côté PCE, sans la lecture des samples ça prend une grosse vingtaine de lignes d'assembleur, donc autant dire que c'est pas très compliqué ^_^
Excellent, va falloir que je vois ça de prêt ..
Perso pour mon jeu je joue des samples via timer, que des bruitages, pas de zique, et ma fois ça marche plutôt bien ..
Avatar de l’utilisateur
nop
Please Insert Disc!
Messages : 7
Inscription : jeu. 17 févr. 2011 19:26
Contact :

Re: Une demo SGX par punkfloyd

Message par nop »

MooZ a écrit :Si tu veux que ton interrupt de timer soit synchro avec le hsync, il faut penser à le resetter dans vsync (avec un bon vieux stz $1403).
Gné ? Je ne comprends pas.
Si tu resettes ton timer dans le handler de l'interrupt + au vsync, je vois pas trop ce que ça change ; et si tu resettes ton timer uniquement lors de la vsync, ton handler ne sera appelé qu'une fois par frame, non ?
touko a écrit :Ah bon, mais normalement tu dois pas reseter à la sortie du timer ???
Parce que sinon ton timer ne se déclanche plus !!
Rien ne t'oblige à resetter dans le handler du timer, techniquement tu peux très bien le faire ailleurs. Du moment que tu le fais, ton timer se redéclenchera.
touko a écrit :Perso pour mon jeu je joue des samples via timer, que des bruitages, pas de zique, et ma fois ça marche plutôt bien ..
Du coup tu mets quelle vitesse à ton timer ? Tu le fais aller à fond, et tu joues des samples en 6997Hz ?
Avatar de l’utilisateur
MooZ
Administrateur
Messages : 2090
Inscription : jeu. 16 déc. 2004 14:25
Contact :

Re: Une demo SGX par punkfloyd

Message par MooZ »

Si tu écris dans $1403 à la fin du vsync, ca declenchera un appel au handler du timer et surtout ca réinitialisera le compteur du timer.
Avatar de l’utilisateur
nop
Please Insert Disc!
Messages : 7
Inscription : jeu. 17 févr. 2011 19:26
Contact :

Re: Une demo SGX par punkfloyd

Message par nop »

nop a écrit :
touko a écrit :Ah bon, mais normalement tu dois pas reseter à la sortie du timer ???
Parce que sinon ton timer ne se déclanche plus !!
Rien ne t'oblige à resetter dans le handler du timer, techniquement tu peux très bien le faire ailleurs. Du moment que tu le fais, ton timer se redéclenchera.
Houlala mais je raconte n'importe quoi, moi ^_^
Oublie ce que j'ai dit, effectivement ça bloque tout si tu ne resettes pas dans le handler.

Ce qui veut donc dire que MooZ propose de resetter au moment du vsync en plus de le faire dans le handler, ce qui fait que je ne comprends toujours pas ce que ça fait ^_^
MooZ a écrit :Si tu écris dans $1403 à la fin du vsync, ca declenchera un appel au handler du timer et surtout ca réinitialisera le compteur du timer.
Ça déclenche un appel immédiatement ? Ou ça attend la fin de ton handler de vsync ?
Et quid du cas où tu étais déjà en plein handler de timer quand ton handler de vsync s'exécute ?
Et d'ailleurs, l'exécution des handlers d'interruption, c'est fait dans une sorte de section critique non interruptible, ou bien ça peut se marcher dessus ? (j'ai jamais réussi à le déterminer, même si j'avoue ne pas trop m'être excité sur mes tests)
Et quel est ce compteur du timer dont tu parles ?
Question facultative, pour 2 points : si j'ai 5 pièces de 2 euros et que je souhaite acheter 4.25 euros de bonbons, quelle heure est-il à Madagascar ?
Vous avez deux heures.
Avatar de l’utilisateur
touko
NECromancer
Messages : 2297
Inscription : lun. 31 mars 2008 14:32

Re: Une demo SGX par punkfloyd

Message par touko »

nop a écrit : Rien ne t'oblige à resetter dans le handler du timer, techniquement tu peux très bien le faire ailleurs. Du moment que tu le fais, ton timer se redéclenchera.
Oui, mais tu risques de rater une interruption timer comme ça ,non(enfin si comme moi tu utilises la vitesse la plus rapide du timer) ??
Edit: je viens de voir ta correction, mais ça reste valable pour le reset de mooz ..
nop a écrit : Du coup tu mets quelle vitesse à ton timer ? Tu le fais aller à fond, et tu joues des samples en 6997Hz ?
La plus rapide, et mes samples sont à 7,5 khz .
Et quel est ce compteur du timer dont tu parles ?
Je pense qu'il parle du compteur de tics timer, qui varie de 1 à 128, pour déclancher l'interruption .
Question facultative, pour 2 points : si j'ai 5 pièces de 2 euros et que je souhaite acheter 4.25 euros de bonbons, quelle heure est-il à Madagascar ?
Vous avez deux heures
LOL quoi ...
Avatar de l’utilisateur
MooZ
Administrateur
Messages : 2090
Inscription : jeu. 16 déc. 2004 14:25
Contact :

Re: Une demo SGX par punkfloyd

Message par MooZ »

Tout juste (la réponse fourre-tout).
Les interruptions ne se marchent pas dessus. Je fais le porcasse et je paste directement un bout de la doc de Charles MacDonald:
- When an interrupt occurs (I've tested the timer and IRQ1), P is pushed with the current state of D and T. Within the interrupt subroutine, the CPU clears D, T and sets I, preventing further interrupts from occuring.
Par contre j'ai vraisemblablement dit une connerie en disant "Si tu écris dans $1403 à la fin du vsync, ca declenchera un appel au handler du timer et surtout ca réinitialisera le compteur du timer." Le handler ne sera pas appelé. Mais le compteur sera bien réinitialisé avec la valeur que tu as mise dans $0C00. Quand ce compteur arrive à zéro, l'interruption du timer est déclenchée. Il faudrait que je retrouve pourquoi je fais ça à la fin de mon vsync. Mais si je me rappelle bien c'est une sombre histoire de synchro.

Pour revenir à la zik, je suis retombé là dessus. Il s'agit du code du player d'Air Zonk.
Avatar de l’utilisateur
nop
Please Insert Disc!
Messages : 7
Inscription : jeu. 17 févr. 2011 19:26
Contact :

Re: Une demo SGX par punkfloyd

Message par nop »

touko a écrit :La plus rapide, et mes samples sont à 7,5 khz .
Ok. Je fais pareil, mais avec des samples à 6999Hz (j'ai bêtement repris la fréquence du timer).
MooZ a écrit :Tout juste (la réponse fourre-tout).
Les interruptions ne se marchent pas dessus. Je fais le porcasse et je paste directement un bout de la doc de Charles MacDonald:
- When an interrupt occurs (I've tested the timer and IRQ1), P is pushed with the current state of D and T. Within the interrupt subroutine, the CPU clears D, T and sets I, preventing further interrupts from occuring.
Ok, merci. J'ai pas assez potassé cette doc là, on dirait ^_^
Mooz a écrit :Par contre j'ai vraisemblablement dit une connerie en disant "Si tu écris dans $1403 à la fin du vsync, ca declenchera un appel au handler du timer et surtout ca réinitialisera le compteur du timer." Le handler ne sera pas appelé. Mais le compteur sera bien réinitialisé avec la valeur que tu as mise dans $0C00. Quand ce compteur arrive à zéro, l'interruption du timer est déclenchée. Il faudrait que je retrouve pourquoi je fais ça à la fin de mon vsync. Mais si je me rappelle bien c'est une sombre histoire de synchro.
Hmm, ok.
Les problèmes dont je souffrais étaient plus dûs à un problème de performances, je pense : le handler du timer prenait trop de temps et du coup je ratais des hsync, ce qui bousillait mon affichage.
MooZ a écrit :Pour revenir à la zik, je suis retombé là dessus. Il s'agit du code du player d'Air Zonk.
Ah oui je me souviens, je m'en étais servi pour ma démo pce. C'est d'ailleurs toi qui m'avait appris sur irc que c'était le player de Air Zonk ^_^
Avatar de l’utilisateur
touko
NECromancer
Messages : 2297
Inscription : lun. 31 mars 2008 14:32

Re: Une demo SGX par punkfloyd

Message par touko »

Concernant le timer ,j'ai trouvé ça :
$1403 /W - a write to $1403 will acknowledge the TIMER
interrupt (must be done from inside the TIMER
interrupt handler to allow further interrupts).
Donc faut réinitialiser le timer dans son handler ..
Répondre