1

d'après geogeo il est possible de faire tourner Genlib et Polysound (cf ce poste)

est-ce que de votre point de vu C faisable sans modifier profondemment Genlib (sans avoir a tt recoder ou changer le les perf de la lib)?

2

Je ne sais pas comment fonctionne Genlib au niveau des interruptions, mais je suis persuadé quand réalisant une fonction dans Genlib on purrais avoir uenc ompatibilité parfaite à 100%. Le seul problème c'est que PolySnd devient la librairie principal à cause de la vitesse de l'interurption n°5.

Voilà à quoi je pense:

Initialiser PolySnd avec EnableSound et InstallSound
Créer une interruption de 5 Khz avec la fonction interrupt5 et la diriger vers un DEFINE_INT_HANDLER.
Créer une fonction dans genlib redirgeant les fonctions de niveaux de gris et des timers sur l'interruption de 5 Khz de PolySnd.
Diminuer la vitesse de l'interruption de PolySnd avec un compteur ou un petit algo pour la mettre à la vitesse courante demandé à Genlib.

Au final malheuresmeent je pense que PpHd doit toucher à Genlib pour que PolySnd soit compatible et pourtant il suffit de pas grand chose.
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

3

Techniquement il suffit d'initialiser Genlib, de recupere l'adresse de son vecteur, puis d'initialiser polysnd. Puis il faut installer une interruption personnelle de l'int 5 en asm.

jsr genlib::init
move.l $74,GenLibInt
jsr polysnd::init
move.l $74,PolySndInit
move.l #MyInt5,$40074
move.w #INITIAL_VALUE,Int5Timer

MyInt5:
; Call PolySnd
pea \Return1(pc)
move.w SR,-(a7)
move.l PolySndInit,a0
jmp (a0)
\Return1:
; Call Genlib if needed.
subq.w #1,Int5Timer
bne.s \Return
move.w #INITIAL_VALUE,Int5Timer
pea \Return(pc)
move.w SR,-(a7)
move.l GenLibInit,a0
jmp (a0)
\Return
rte

1. INITIAL_VALUE doit valoir exactement FrequencePolySnd/FrequenceGenlib.
2. Si c'est pas un entier, je recommande d'utiliser des fixed (Pas plus complique).

4

Je rappelle que toutes les interruptions doivent etre finis par un rte...

Pour des timer fixed:
Tu travailles avec des long.
INITIAL_VALUE = PolySndFreq*65536/GenLiBFreq = 3640889
GenLibFreq=90Hz
PolySndFreq=5000Hz.

sub.l #65536,Int5Timer
bgt.s \return
add.l #INITIAL_VALUE,Int5Timer

Voila. Ca devrait marcher peut etre.

5

Et je rappelle que TeOs utilise aussi l'int5.

6

L'interruption de PolySnd tourne à 5000 Hz et l'interruption en interne à PolySnd à 8192 Hz sur HW2 et 11569 sur HW1. Donc le cas ce simplifie.

J'aurais pensais qu'il été plus simple d'utiliser la fonction interrupt5 de PolySnd et executer à 90 Hz dans celle-ci l'interurption de GenLib.
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

7

Ben c'est ce que je fais.

8

Non toi tu créer une nouvelle interruption, tu intercepte les fonctions de PolySnd et de Genlib et dans cette interruption tu approxime le temps d'execution 5 Khz pour PolySnd et 90 Hz pour Genlib, c'est bon ausf que PolySnd à besoin de 8192 Hz sur HW2 et 11569 sur HW1.

Moi je propose ça:
InitGenLib et interception de l'interruption, sauver $74 dans une variable.

EnableSound();
InstallSound ();

Interrupt5(intgen);

....

Dans DEFINE_INT_HANDLER (intgen)
approximer le temps en passant de 5 Khz à 90 Hz et executer l'interruption de GenLib.
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

9

Heu........
J'approxime rien me semble-t-il pour PolySnd. C'est juste un couche supplementaire gerant l'appel a 90Hz de Genlib.

MyInt5:
; Call Genlib if needed.
sub.l #65536,Int5Timer
bgt.s \Return
add.l #INITIAL_VALUE,Int5Timer
pea \Return(pc)
move.w SR,-(a7)
move.l GenLibInit,-(a7)
rts
\Return
; Call PolySnd
move.l PolySndInt(pc),-(a7)
rts

J'en ai profite pour corriger un gros bug et optimise un peu.

10

Juste une petite question, il est possible de programmer en C avec Genlib??
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

11

Oué depuis que tigcc existe grin
Mais un truc comme ca, il faut le faire en ASM.

12

Oui bien sûr faut faire ça en ASM, j'imagine pas Genlib ou PolySnd en C. grin

Merci, ce topic démontre que Genlib est compatible avec PolySnd, je vais donner cette fonction dans ma documentation. wink

Au niveaux des ressources maximales prise par PolySnd, j'arrive à 52%.
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

13

C vE dire que je dois recoder tout mon SM en ASM ou seulement utiliser cette fonction (poste 8)?

14

Tu n'ai pas obliger de coder en ASM, il y a une autre méthode.


INT_HANDLER genlibint = NULL;

//5000 Hz
DEFINE_INT_HANDLER (polysndint)
{
  counter+=590;    //90/5000*32768
  
  if (counter>32473)  //32768-590/2
  {
    counter-=32768;
    ExecuterHandler(Genlibint);
  }
}

void _main (void)
{
  GenLibInit ();
  SetIntVec (AUTO_INT_5,genlibint);

  EnableSound ();
  InstallSound ();

  Interrupt5(polysndint);
  ...
}


Le principe y est. smile
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

15

GenLibInit (); c'est gl_init();

ExecuterHandler(...); c'est une fct de PolySnd ?
C'est pas plutot genlibint = GetIntVec(AUTO_INT_5);

16

Iros a enfin réussit à faire fonctionner PolySnd avec Genlib mais il reste un problème assez génant qui ,empêche de faire fonctionner correctement les niveaux de gris avec PolySnd.

Je pense que le problème vient de Genlib avec le mask dans sr situé dans l'interruption 1 qui doit possèder une valeur >=0x2205. Il faudrait être capable de modifier avec une simple ligne après initialisation de Genlib le contenus de ce registre ou créer une fonction dans Genlib comme le fait PolySnd permettant de modifier comme on veut la valeur de SR.


Le problème est simple, l'interruption 1 déclenché moins souvent que l'interruption n°5 retire des cycles de l'interruption n°5 et la fait passer de 8192 Hz à 6 Khz et donc ralentie le son et devient plsu grave, dans le cas de l'int n°1 c'est pareil, l'interruption est plus len te et donc provoque des clignotement.
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

17

Je pense qu'il faudra faire un hack de l'AI1 comme pour celle de gray.s.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

18

1. Je comprend pas ton truc. Genlib fixe le masque de SR comme tu dis a $2200, donc l'int 1 n'est pas activee.
2. L'int 1 ne peut pas interrompre l'int 5. Mais lorsque l'int 1 est active elle est souvent avec le masque $2700, donc l'int 5 n'est pas activable: il ne faut donc pas utiliser du tout l'int1.
3. Le probleme provient peut etre du fait que la copie de genlib du tiers de l'ecran prend trop de temps (Elle est ininterrupable par l'int5). Pour savoir si c'est ca, il faut tester sur HW1.

19

Oui, la copie du tiers d'écran prend nettement trop de temps. Il a aussi dû patcher les routines de gris de TIGCCLIB (avec un hack affreux d'ailleurs, mais il n'y a pas mieux sad) pour qu'il puisse interrompre notre AI1 avec son AI5 (PolySnd patche le masque: 0x2700 -> 0x2400) à cause de la recopie du tiers d'écran.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

20

Au fait j'ai mis plutôt 0x2200 car 0x2400 semble désactiver l'auto int 3.
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

21

Mais 0x2200 laisse activé l'AI4 qui peut créer des ennuis. sad (Mais l'AI4 peut être désactive globalement à travers un port I/O. Je t'ai déjà donné la valeur à mettre.) Et comme déjà dit, l'AI3 est aussi désactivé avec le masque 0x2700 d'origine, et AMS lui-même met aussi un masque 0x2700 à plusieurs endroits, donc je ne pense pas que ce soit un problème.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

22

L'auto int 4 est désactivé dès l'appel de la fonction EnableSound, donc c'est pas un problème, j'imagine pas si je joue du son avec cette interruption. grin


avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.