Le Temps et Dos/Bios - ASM - Programmation
Marsh Posté le 27-05-2005 à 11:01:55
bin faut savoir tu veux ça sous DOS ou sous Xp ?
de mémoire:
sous DOS pur, le mieux c'est de détourner le timer rapide, reprogrammer sa fréquence pour passer de 18.2 interruptions/secs à quelque chose vers le milier d'interruption, et faire un décompteur dans ta routine d'interruption pour appeller la précédente dans les 18.2hz.
sous Xp:
y'a les timers multimédia je crois pour un truc stable, voir msdn.
Dos sous Xp: mmmm... j'ai des doutes que la machine virtuelle n'introduise pas de glissement.
Marsh Posté le 27-05-2005 à 11:45:43
Au fait je suis encore débutant en assembleur... Qu'est-ce que le "timer rapide" ? Suis-je obligé de créer ma propre interruption ? Quels sont les noms des interruptions BIOS qui gèrent le temps ?
Tout ce que je cherche c'est quelque chose de plus précis que les fonction de Turbo Pascal 7 (qui sont celles du DOS aussi je crois).
ps: je fais tourner DOS sous win98, j'ai deux ordis différents donc pas de DOS sous XP.
Marsh Posté le 27-05-2005 à 14:02:11
si tu veux éxécuter du code à une fréquence stable c'est par le timer rapide (irq 0) que tu le feras.
c'est pareil DOS sous w98, il peut y avoir des blagues, mais ça devrait être moins problématique que sous Xp.
Marsh Posté le 27-05-2005 à 14:29:52
Citation : si tu veux éxécuter du code à une fréquence stable c'est par le timer rapide (irq 0) que tu le feras. |
Et comment exactement ? Tu pourrais me poster un petit bout de code stp ?
Marsh Posté le 27-05-2005 à 22:19:41
le listing pour l'interruption en mode protégé sous Watcom C (avec dos4gw)
à toi d'adapter pour le mode réel
Citation : |
le header qui va avec:
Citation : |
un exemple d'utilisation avec mon timer et mon driver clavier maison (que je peux te poster le code mais ça servira à rien c'était pour faire un xwing sous dos)
tant que tu appuyais pas sur ESC, le truc boucle à afficher le compteur haute vitesse (2048hz) et le compteur bios (à 18.2hz)
Code :
|
Marsh Posté le 27-05-2005 à 22:26:23
à oui j'oubliais: a toi d'adapter en mode réel et en plus d'inserer ce que tu veux faire.
après pour ce que tu veux il n'y a peut être pas forcément besoin de détourner le timer système, pour une animation tu peux boucler sans fin en retraçant ton animation et en mesurant ton temps par frame puis en actualisation les états de ton truc.
les timers qui te permettent d'éxécuter du code à une fréquence précise c'est plus pour la musique (player de mod/midi/pcspeaker etc etc...)
Marsh Posté le 27-05-2005 à 22:28:54
et oui et quand tu joues avec le timer rapide, il faut vraiment actualiser le la variable du bios (moi j'y allait à la bourrin en l'incrémentant directement), ou d'appeller l'ancienne routine (ce qui est plus propre après réflexion je suis que ce code marchait très bien )
si tu le fais pas, le temps du dos accélère, et tu peux générer des time-out à tire-larigot.
Marsh Posté le 28-05-2005 à 01:33:20
Je vais essayer de comprendre tout ça et je reviens demain la tête toute pleine
Marsh Posté le 29-05-2005 à 11:39:27
tention y'a ptet des truc propres au mode protégé, ce qui est lié à l'int 31h c'est le serveur DPMI (dos4g/pmode)
Marsh Posté le 27-05-2005 à 10:50:25
Salut les futurs amis je suis un nouveau,
Je sors tout juste de ma grotte où je cherche depuis 1991 un réponse à une question, et voila-t-y pas que je découvre internet et windows. Hum, voila ma question :
Sauriez-vous quelles sont les interruptions du Bios ou de DOS (mode réel 16 bit of course) qui permettent un timing au centième de seconde au moins, par exemple pour des animations, ou dans mon cas pour un sampler de PC Speaker ?
Le programme doit répéter exactement (il s'agit de musique, donc au centième de seconde près) ce que j'aurais joué préalablement au clavier (d'ordinateur bien entendu). J'avais utilisé les fonction d'heure système de T Pascal qui ne s'avèrent pas très précises au centième - d'où une mise en place pas très funky du coup.
Ou alors en admettant que mes outils sont un peu rrrooots (ce qui ne se fera pas facilement), quelles fonctions sous C++ et XP pour tout ça ?
Merci !