LECTURE DU SCANCODE [TASM, PORT 60H, DÉTOURNEMENT D'INT]
mikevador02
Messages postés5Date d'inscriptionmercredi 15 janvier 2003StatutMembreDernière intervention16 janvier 2003
-
25 juin 2003 à 13:02
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 2016
-
9 mai 2007 à 15:09
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 9 mai 2007 à 15:09
mikevador02 pour trouver l'int correspondant à une IRQ tu doit faire :
pour le 1er 8259 , numero d'IRQ + 8h : exemple IRQ6 (la disquette) 6h + 8h = 0Eh
pour le 2ième 8259 , numero d'IRQ + 70h : exemple IRQ14 (disk principal) 14h + 70h = 76h
Le 8259 est un controleur d'interruption.
zinotron
Messages postés65Date d'inscriptionvendredi 14 février 2003StatutMembreDernière intervention11 septembre 2004 12 mai 2004 à 07:56
Bonjour et plop a vous :-)
En ce moment, je me suis lancé dans un projet delirant : ecrire un OS (tout petit :-) ).
J'ai une fonction print qui prend en argument un char* et deux int (position du texte a l'ecran).
Dans la foulée, je me suis dit qu'utilisé le clavier pourrait etre une bonne idée a l'utilisateur de mon Kernel (donc moi en gros :-) ).
Alors j'ai reussi a faire une macro en ASM qui ecoute sur le port 0x60 (clavier) et je detourne ce qu'elle raconte pour le faire afficher par la fonctione print.
Bon, premier resultat : le PC reagit quand j'appuis sur une touche (ca c'est bon !)
Deuxieme resultat : le PC n'affiche pas du tout ce que je tape au clavier, mais affiche des choses assez bizard....
Donc je recherche le moyen de convertir le code que je choppe (qui n'est pas beau du tout, je pense à de l'hexa, mais rien n'est moins sur) en joli charactere ascii pour le mettre dans un joli tableau et que ca fasse quelque chose de beau a l'ecran.
si quelqu'un a le courage de me repondre :-)
ZiNoTrOn
PS: j'ecrit en C mais la macro est bien en ASM
cs_GuruMeditation
Messages postés69Date d'inscriptionsamedi 28 octobre 2000StatutMembreDernière intervention15 octobre 2004 25 juin 2003 à 17:46
les interruptions sont géré par les 2 PIC du PC branché en cascade qui fait la correspondance IRQ-INT. En mode réel il existe effectivement une table de vecteur d'interruption que l'on appelle IVT (Interrupt Vector Table) chaque entrée correspond a une adresse FAR donc 4 octets, il y a 256 int donc la taille de la table est de 4*256= 1024 octets et elle commence à l'adresse 0000:0000 c'est d'ailleurs le pourquoi j'avais gs=0 et un offset = 09h*4 pour détourner l'int 09h
Oui bien sur que faire reset ça remet l'ancienne table, car cette table se situe dans la RAM
mikevador02
Messages postés5Date d'inscriptionmercredi 15 janvier 2003StatutMembreDernière intervention16 janvier 2003 25 juin 2003 à 13:14
Merci pour la reponse SCSI (rapide) :)
ha ok mais donc en fait chaques irq de base pointe sur une interuption alors? ex sir irq2 est attribuer au port com1 et qu'une donnee arrive dessus irq2 possède alors aussi une interuption? y a t-il des tables pour ceux-ci alors? j'ai celle de toute les interuptions.
Et donc qd on reset un pc c'est de nouveau l'ancienne table qui revient je suppose? Je suis debutant en asm
cs_GuruMeditation
Messages postés69Date d'inscriptionsamedi 28 octobre 2000StatutMembreDernière intervention15 octobre 2004 25 juin 2003 à 13:07
bon c'est irq1 pas IRQL mais c'est tout à fait comme ça que ça fonctionne!!
mikevador02
Messages postés5Date d'inscriptionmercredi 15 janvier 2003StatutMembreDernière intervention16 janvier 2003 25 juin 2003 à 13:02
Si je comprend bien en fait l'interuption 9H de base est appelée dès que l'on presse sur une touche donc si tu la déroute comme tu fait on dis que 9h maintenant pointe sur le code IRQL donc dès qu'une touche est pressée oupss le cpu s'arrete la ou il était et passe la main a ce programme IRQL et ensuite revient ds le programme normal?
9 mai 2007 à 15:09
pour le 1er 8259 , numero d'IRQ + 8h : exemple IRQ6 (la disquette) 6h + 8h = 0Eh
pour le 2ième 8259 , numero d'IRQ + 70h : exemple IRQ14 (disk principal) 14h + 70h = 76h
Le 8259 est un controleur d'interruption.
12 mai 2004 à 07:56
En ce moment, je me suis lancé dans un projet delirant : ecrire un OS (tout petit :-) ).
J'ai une fonction print qui prend en argument un char* et deux int (position du texte a l'ecran).
Dans la foulée, je me suis dit qu'utilisé le clavier pourrait etre une bonne idée a l'utilisateur de mon Kernel (donc moi en gros :-) ).
Alors j'ai reussi a faire une macro en ASM qui ecoute sur le port 0x60 (clavier) et je detourne ce qu'elle raconte pour le faire afficher par la fonctione print.
Bon, premier resultat : le PC reagit quand j'appuis sur une touche (ca c'est bon !)
Deuxieme resultat : le PC n'affiche pas du tout ce que je tape au clavier, mais affiche des choses assez bizard....
Donc je recherche le moyen de convertir le code que je choppe (qui n'est pas beau du tout, je pense à de l'hexa, mais rien n'est moins sur) en joli charactere ascii pour le mettre dans un joli tableau et que ca fasse quelque chose de beau a l'ecran.
si quelqu'un a le courage de me repondre :-)
ZiNoTrOn
PS: j'ecrit en C mais la macro est bien en ASM
25 juin 2003 à 17:46
Oui bien sur que faire reset ça remet l'ancienne table, car cette table se situe dans la RAM
25 juin 2003 à 13:14
ha ok mais donc en fait chaques irq de base pointe sur une interuption alors? ex sir irq2 est attribuer au port com1 et qu'une donnee arrive dessus irq2 possède alors aussi une interuption? y a t-il des tables pour ceux-ci alors? j'ai celle de toute les interuptions.
Et donc qd on reset un pc c'est de nouveau l'ancienne table qui revient je suppose? Je suis debutant en asm
25 juin 2003 à 13:07
25 juin 2003 à 13:02