1

Je programme avec C++ Builder 4 et je suis en train d'étudier les interrutions et leur manipulation en C. Cepandant , pour pouvoir compiler le code il semble falloir désactiver le "Test Stack Overflow". Comment le faire?
Voila un expemple de code extrait de c++ builder :

/* * * * * * * * * * * * * * *
NOTE: This is an interrupt service routine.
You can NOT compile this program with
Test Stack Overflow turned on and get an
executable file that will operate correctly.
* * * * * * * * * * * * * * */
#include <stdio.h>
#include <dos.h>
#include <conio.h>

#define INTR 0X1C /* The clock tick interrupt */

#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif

void interrupt ( *oldhandler)(__CPPARGS);

int count=0;

void interrupt handler(__CPPARGS)
{
/* increase the global counter */
count++;

/* call the old routine */
oldhandler();
}


int main(void)
{
/* save the old interrupt vector */
oldhandler = getvect(INTR);

/* install the new interrupt handler */
setvect(INTR, handler);

/* loop until the counter exceeds 20 */
while (count < 20)
printf("count is %d\n",count);

/* reset the old interrupt handler */
setvect(INTR, oldhandler);

return 0;
}


//--------------------------------------------------------------------------

De plus , le voudrais travailler avec l'interruption "09h" (celle du clavier). Celle ci utilise le port "60h". Les information que j'ai trouvé sur le port 60h ne sont pas très clair.
Je cherche donc de la documentation sur :
-les interruptions (plus spécialement celle du clavier).
-la structure du port 60h.
-des exemples éventuelles d'utilisation de l'interruption 09h.

Merci d'avance.

2

Vive le coding gba.
www.codegba.fr.st

3

Oui je connais ce site. Mais je ne comprends pas le shéma de la structure du port 60h.
Et j'ai toujours ce problème de "test stack buffer overflow" sad

4

Le shéma il me parait simple...

Tu à 1 dans le dernier bit si la touche est appuyée, et le numéro de la touche dans le reste.

Suffit que tu le lise et pis tu agis en conséquence.

Par contre le buffer overflow c'est quoi, et pourquoi le desactiver?
Vive le coding gba.
www.codegba.fr.st

5

C'est le compilo qui veux à tout pris désactiver le "test stack buffer overflow" pour compiler. Vu que je commence à peine à travailler avec les interruptuions , je peux pas t'expilquer pk.

6

PS : le nombre d'octets du port 60h est le nombre de touches du clavier je suppose.

7

je pense que le code d'une touche est tout simplement un nombre compris entre 0 et (2^7)-1. (7 bits)

Et ce code est présent sur les 7 premiers bits du port quand la touche est appuyée. Par contre je ne comprends pas ce qui se passe dans le cas de l'appui de plusieurs touches.
Vive le coding gba.
www.codegba.fr.st

8

ui moi aussi. confusconfus
Voila le problème.

Pour le test stack buff overflow je vais regarder dans la notice de Borland (qui fais pas loin d'un carton entier smile)

9

Bonjour à tous, et plus spécialement à nmatrice ( my cousin ) à qui je fais un petit coucou !!

Moi je n'ai aucune notion en informatique puisque ma passion est tournée vers le ciel !
en effet, je suis élève-pilote !

En tout cas votre domaine, est trés interessant, et me semble compliqué ! n'est-ce pas Liii !! lol

@+ à tous !!

10

J'ai trouvé comment régler le "test stack overflow". Mais jai un problème de compilation : voila le nouveau code j'ai viré les "interrupt" :
/* * * * * * * * * * * * * * * NOTE: This is an interrupt service routine.   You can NOT compile this program with Test Stack Overflow turned on and get an  executable file that will operate correctly.  * * * * * * * * * * * * * * */ #include <stdio.h> #include <dos.h> #include <conio.h> #define INTR 0X1C    /* The clock tick interrupt */ #ifdef __cplusplus     #define __CPPARGS ... #else     #define __CPPARGS #endif void (*oldhandler)(__CPPARGS); int count=0; void handler(__CPPARGS) { /* increase the global counter */    count++; /* call the old routine */      oldhandler(); }      int main(void) { /* save the old interrupt vector */    oldhandler =(void (*)(__CPPARGS)) getvect(INTR); /* install the new interrupt handler */    setvect(INTR, handler); /* loop until the counter exceeds 20 */      while (count < 20)       printf("count is %d\n",count); /* reset the old interrupt handler */    setvect(INTR, oldhandler);    return 0; }

Voila les messages d'erreur de compilation :

E2268 Appel à une fonction non définie 'getvect'.
E2268 Appel à une fonction non définie 'setvect'.

11

Je suppose qu'il y a un #include que tu as oublié de mettre. Mais je ne peux pas te dire le nom, regarde dans la documentation, je n'ai pas BCB4.
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é