Inscription : 15 Août 2008, 13:00 Message(s) : 968 Localisation : Troyes, France
Salut !
Je suis en train de patcher un jeu pour y ajouter des features +.Ca roulait sur du velour mais au moment d'ajouter le gestionnaire de son DMA, j'ai passé les interruptions en IM2 dans les formes en utilisant une table et en laissant la validation automatique des interruptions (bit 0 de IVR à 0) et j'ai constaté quelque chose de bizarre, qui n'arrive pas sous WinApe mais sur un vrai CPC+.
En fait, les interruptions arrivent bien mais le CPC a tendance à en sauter, alors qu'elles marchent parfaitement en IM1 (que ce soit en int par défaut ou avec PRI).J'ai fait un raster pour essayer de visualiser le problème et j'ai constaté que, contrairement à IM1 où les int peuvent être exécutées un peu après, en IM2 l'interruption a toujours lieu au même moment ou n'arrive pas du tout.
J'ai essayé de reproduire le problème avec mon propre code, en vain.J'ai essayé aussi de chercher dans la doc du Z80 mais je n'ai rien trouvé qui puisse me mettre sur la piste.
Est ce que quelqu'un à déjà eu ce genre de problème ou sait si certaines instructions ou séries d'instructions (autres que les classiques DI/EI/IM/RETI/RETN) sont susceptibles d'influer sur le comportement des interruptions et de les perturber à ce point (en modifiant la longueur du signal par ex.) , ou encore l'accès à certains ports (à ma connaissance le code ciblé n'accède qu'au PPI pour le clavier)
Enfin si quelqu'un a des infos pouvant me permettre de comprendre cette différence de comportement entre IM1 et IM2, merci d'avance.
_________________ "NOP" tel est le programme parfait ! court, rapide, lisible et sans bugs (connus)
Inscription : 28 Août 2008, 23:41 Message(s) : 258
Ton prb est sans doute un lié à ce que offset a découvert assez tôt (début années 90) sur le plus, à savoir qu'en mode vectorisé, le plus se plante et confond interruption raster et dma0. Je t'invite à voir ça ici : http://quasar.cpcscene.com/doku.php?id=dossier:plus Vu qu'on ne sait pas exactement dans quel contexte il y a confusion, normal que l'émulateur ne puisse pas encore reproduire ce bug.
Inscription : 15 Août 2008, 13:00 Message(s) : 968 Localisation : Troyes, France
Merci Longshot !
Super ! c'était bien ça, c'est pas génant dans le sens où j'ai besoin que d'un canal DMA. Par contre, sacrément buggué l'ASIC je comprends mieux pourquoi Amstrad a pas donné les plans
En tous cas , je m'en vais continuer à essayer d'implémenter ça et encore merci pour ta réponse et pour le lien vers l'article !
_________________ "NOP" tel est le programme parfait ! court, rapide, lisible et sans bugs (connus)
C'est le problème de l'Asic... Si y'avais pas un mode "émulation de CPCold" bin ça aurait bien simplifié, lol... Après bin il me semble que c'est quand même supérieur en bien des points au old... Faut juste pas trop lui en demander quoi.
Inscription : 28 Août 2008, 23:41 Message(s) : 258
C'est pas une question qu'il soit ou non supérieur au old, ni même une question de compatibilité. La c'est quand même un bug assez grave. Appeler la routine de dma0 lorsqu'on a une interruption raster ou l'inverse, ça fait vraiment très désordre.
Inscription : 15 Août 2008, 13:00 Message(s) : 968 Localisation : Troyes, France
A ce que j'ai compris c'est ne pas utiliser la validation automatique (si elle est pas buggué elle aussi ) et detecter si on a affaire à une interruption Raster ou DMA, ou effectivement ne pas utiliser DMA0 et mettre le meme vecteur raster et DMA0, ou encore utiliser IM1 mais de toute façon, on en revient à ne pas utiliser la validation automatique et devoir detecter le type d'interruption
_________________ "NOP" tel est le programme parfait ! court, rapide, lisible et sans bugs (connus)
Inscription : 15 Août 2008, 13:00 Message(s) : 968 Localisation : Troyes, France
L'acquittement automatique, c'est le bit 0 de IVR (#6805), un simple EI acquitte l'interruption.D'après le tuto d'Ast sur IM2, l'acquittement manuel est buggué.
J'ai lu trop vite, il semble que ce n'est qu'en mode IM1 que les bits de DSCR ne sont pas mis à jour en cas de validation automatique donc effectivement, il doit être possible de distinguer DMA0 de RASTER par DSCR en mode 2 avec acquittement automatique.
_________________ "NOP" tel est le programme parfait ! court, rapide, lisible et sans bugs (connus)
pour contourner ce bug, plusieurs possibilites... utiliser seulement les dma1 et 2, utiliser im1 au lieu d'im2, dediriger les interruption a bon port en utilisant les bits du dcsr... voila, voila... j'espere ne pas en avoir trop dit.
Inscription : 15 Août 2008, 13:00 Message(s) : 968 Localisation : Troyes, France
Je vais encore vérifier mon code mais bizarement après avoir fait un branchement sauvage de DMA0 sur RASTER j'ai constaté un problème de synchro du programme qui utilise justement les interruptions pour caler sa vitesse quand je joue un sample sur DMA1 (il accélère!).Je vais vérifier encore mon code pour être sur, et je vais quand même me donner la peine de vérifier qui appelle l'interruption.
@AST Sinon, maintenant je comprend bien pourquoi tu préfères coder sur un vrai CPC+. Quand tout marche nickel sur WinApe et foire (ou est différent) sur CPC+, c'est quand même méchamment chiant (euphémisme!).
_________________ "NOP" tel est le programme parfait ! court, rapide, lisible et sans bugs (connus)
pour la petite histoire, quand j'ai commence la synergy, j'avais commence le code sur winape. quand le travail fut bien entamme, je me decidais, enfin, a lancer la demo sur mon plus et, plus rien ne concordait... donc recherche de bugs eventuels, tout ca pour m'apercevoir que le pb venait bien de winape... donc, j'ai tout repris de a a z directement sur mon plus, et j'ai continue...
Inscription : 15 Août 2008, 13:00 Message(s) : 968 Localisation : Troyes, France
J'ai eu le même genre d'expérience mais faut tout de même avouer qu'il y a un certain confort à developer sous WinApe qu'il est difficile de retrouver sur un vrai CPC+ (bah oui, à croire que je deviens vieux, j'aime bien mon confort ).Tu utilise quoi sur un vrai CPC+ comme outils ?
_________________ "NOP" tel est le programme parfait ! court, rapide, lisible et sans bugs (connus)
Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 76 invité(s)
Vous ne pouvez pas publier de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas insérer de pièces jointes dans ce forum