[DCALICE] Bug interruptions
Modérateurs : Papy.G, fneck, Carl
[DCALICE] Bug interruptions
Lors du développement d'un jeu pour Alice 32/90 il est apparu une anomalie dans la musique avec l'émulateur dcalice (des parasites).
Cette anomalie est liée à l'activation très brève des interruptions pour lire le clavier. Elle n'est pas audible avec la vraie machine.
Il y a donc un bug lié aux interruptions dans dcalice. La cause probable est la persistance trop longue du signal d'interruption après son activation.
Je cherche une solution en consultant la documentation. Vous pouvez m'aider si vous savez ce qui provoque la fin du signal d'interruption.
Cette anomalie est liée à l'activation très brève des interruptions pour lire le clavier. Elle n'est pas audible avec la vraie machine.
Il y a donc un bug lié aux interruptions dans dcalice. La cause probable est la persistance trop longue du signal d'interruption après son activation.
Je cherche une solution en consultant la documentation. Vous pouvez m'aider si vous savez ce qui provoque la fin du signal d'interruption.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: [DCALICE] Bug interruptions
Le problème est plutôt lié à la desactivation très brève des interruptions
Re: [DCALICE] Bug interruptions
J'ai une piste : Dans dcalice, lorsque l'interruption timer est déclenchée, elle est perdue si les interruptions sont masquées.
En réalité elle reste active pendant quelques cycles. Si les interruptions sont rétablies très vite elle doit être exécutée.
Reste à trouver jusqu'à quand elle doit rester active. C'est sûrement écrit dans la documentation, il suffit de chercher...
En réalité elle reste active pendant quelques cycles. Si les interruptions sont rétablies très vite elle doit être exécutée.
Reste à trouver jusqu'à quand elle doit rester active. C'est sûrement écrit dans la documentation, il suffit de chercher...
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: [DCALICE] Bug interruptions
Vu le schéma et la doc du 6803 je suppose que l'interruption est déclenchée via le port P21 du 6803
mais ensuite il faut émuler la totalité du bloc port 2
Ce qu'il est possible de faire c'est déjà de regarder à l'analyseur logique comment se comporte le port P21 lors de l'appui de touche (est il programmé comme entrée ou sortie).
mais ensuite il faut émuler la totalité du bloc port 2
Ce qu'il est possible de faire c'est déjà de regarder à l'analyseur logique comment se comporte le port P21 lors de l'appui de touche (est il programmé comme entrée ou sortie).
Re: [DCALICE] Bug interruptions
J'avais cru comprendre que l'interrogation du clavier ne nécessite pas la gestion des interruptions.
Dans mon cas je suis obligé de couper les interruptions pour lire le clavier car je gère en même temps mon player de musique sous interruption . Et comme c'est la même adresse pour produire un son, ou pour lire le clavier je suis obligé de les couper juste le temps d'interroger le clavier. Sinon c'est le conflit.
Dans mon cas je suis obligé de couper les interruptions pour lire le clavier car je gère en même temps mon player de musique sous interruption . Et comme c'est la même adresse pour produire un son, ou pour lire le clavier je suis obligé de les couper juste le temps d'interroger le clavier. Sinon c'est le conflit.
Re: [DCALICE] Bug interruptions
donc ce serait plutôt la possibilité de lire le clavier en polling seul et sans passer par l'interruption le réél "défaut". En soi c'est surtout un ajout de fonctionnalité et pas strictement un bug.
Re: [DCALICE] Bug interruptions
Si c'est un bug, car sur la vraie machine j'ai pas de bug, seulement sur l'emulateur, j'ai le son qui est perturbé par la lecture du clavier car l'interruption n'est pas coupé
Re: [DCALICE] Bug interruptions
en émulation on fait souvent des choix et des simplifications. Et puis un jour, un programme nécessite de revoir sa méthode et de la compléter. L'utilisateur voit un bug, pour le développeur c'est un ajout de fonction.
Re: [DCALICE] Bug interruptions
Oui ça dépend du point de vue
Re: [DCALICE] Bug interruptions
Comme annoncé j'ai repris toute la programmation du timer avec la documentation sous les yeux. Il y avait quelques simplifications abusives, je les ai corrigées. Malheureusement le bug est toujours présent. Quelque chose m'échappe encore, je vais continuer les recherches.
En attendant de trouver la vraie cause, j'ai fait un petit patch pour résoudre le problème provisoirement :
[EDIT 20:30]
Finalement la dernière anomalie a été corrigée et l'émulateur fonctionne maintenant sans patch. Je publierai une version "propre" demain.
L'erreur était bien ce que je supposais :
Les interruptions timer TOF et OCF étaient actives pendant une seule instruction. Elles n'étaient jamais exécutées si à ce moment là les interruptions étaient masquées.
En réalité elles doivent rester actives jusqu'à ce qu'une condition soit remplie, et si entre temps les interruptions ne sont plus masquées elles peuvent s'exécuter. La condition est assez complexe :
En attendant de trouver la vraie cause, j'ai fait un petit patch pour résoudre le problème provisoirement :
[EDIT 20:30]
Finalement la dernière anomalie a été corrigée et l'émulateur fonctionne maintenant sans patch. Je publierai une version "propre" demain.
L'erreur était bien ce que je supposais :
Les interruptions timer TOF et OCF étaient actives pendant une seule instruction. Elles n'étaient jamais exécutées si à ce moment là les interruptions étaient masquées.
En réalité elles doivent rester actives jusqu'à ce qu'une condition soit remplie, et si entre temps les interruptions ne sont plus masquées elles peuvent s'exécuter. La condition est assez complexe :
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: [DCALICE] Bug interruptions
Super merci
Re: [DCALICE] Bug interruptions
La version 2024.03.19 de l'émulateur dcalice est disponible ici --> http://alice32.free.fr/emulateur/index.html
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.