LECTURE DU SCANCODE [TASM, PORT 60H, DÉTOURNEMENT D'INT]

mikevador02 Messages postés 5 Date d'inscription mercredi 15 janvier 2003 Statut Membre Dernière intervention 16 janvier 2003 - 25 juin 2003 à 13:02
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Derniè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.

https://codes-sources.commentcamarche.net/source/15224-lecture-du-scancode-tasm-port-60h-detournement-d-int

deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
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és 65 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 11 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és 69 Date d'inscription samedi 28 octobre 2000 Statut Membre Dernière intervention 15 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és 5 Date d'inscription mercredi 15 janvier 2003 Statut Membre Dernière intervention 16 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és 69 Date d'inscription samedi 28 octobre 2000 Statut Membre Dernière intervention 15 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és 5 Date d'inscription mercredi 15 janvier 2003 Statut Membre Dernière intervention 16 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?
Rejoignez-nous