Ports PC

Signaler
Messages postés
93
Date d'inscription
mercredi 18 septembre 2002
Statut
Membre
Dernière intervention
20 juillet 2006
-
cs_patatalo
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
-
Bonjour,
voilà je voudrias apprendre dans le cas général à utiliser les ports PC : je sais que pour le clavier c'est 60h et 64h, pour la carte réseaux c'est C000h à C0FFh. IL ya aussi des irq à controler et des plages mémoires ?! (sous windaube, panneau de config, system, propriété du périph, ressource) Bon je veux juste savoir comment on fait en général !
Cordialement
TRAX

__________________________________________________
Les mots ont la valeurs que l'on veux bien leur accorder (TRAX)

9 réponses

Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,

renseigne toi sur le bus PCI.

c'est dans ces structures que tu trouvera toutes les informations que tu souhaite.

struc PCIHEADER
.vendorID: resw 1
.deviceID: resw 1
.command_reg: resw 1
.status_reg: resw 1
.revisionID: resb 1
.progIF: resb 1
.subclass: resb 1
.pciclass: resb 1
.cacheline_size:resb 1
.latency: resb 1
.header_type: resb 1
.bist resb 1
endstruc

struc PCINONBRIDGE
.base_address0: resd 1
.base_address1: resd 1
.base_address2: resd 1
.base_address3: resd 1
.base_address4: resd 1
.base_address5: resd 1
.CardBus_CIS: resd 1
.subsystem_vendorID: resw 1
.subsystem_deviceID: resw 1
.expansion_ROM: resd 1
.cap_ptr: resb 1
.reserved1: resb 3
.reserved2: resd 1
.interrupt_line: resb 1
.interrupt_pin: resb 1
.min_grant: resb 1
.max_latency: resb 1
.device_specific: resd 48
endstruc

@++
Messages postés
93
Date d'inscription
mercredi 18 septembre 2002
Statut
Membre
Dernière intervention
20 juillet 2006

Sur le forum c++, j'ai vu kk1 qui faisait avec winsock (la dll) Mais g pas compris et l'auteur de la source ne répond pas ?
J'ai pas très bien compris le msg précedent!

Cordialement
TRAX

_________________________________________________
Les mots ont la valeurs que l'on veux bien leur accorder (TRAX)
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,

il faudrait que tu te renseigne un peu de ton coté quand meme.

Les ports winsocks et les ports de ton pc ne sont pas les memes.

Les ports winsocks sont des ports virtuels ( utilisés afin d'avoir plusieurs requete simultanées sur le peripherique réseau ) alors que les ports de ton pc sont des ports reels.

le fonctionnement de ces ports n'est pas dépendant de ta carte mere mais du materiel qui est rattaché derrière.

si tu veux une information concernant un de ces ports, tu dois trouver la documentation du materiel connecté a ce port.

l'acces aux ports E/S se fait par les commandes processeur "in" et "out"

@++
Messages postés
93
Date d'inscription
mercredi 18 septembre 2002
Statut
Membre
Dernière intervention
20 juillet 2006

Oui pardon, je me suis tromper entre les réponses de deux messages différents. J'ai effectivement faits mes recherche mais je ne trouve pas d'explication en général, que des exemples. J'ai pas très bien compris les redirection d'irq

Cordialement
TRAX
___________________________________________________
Les mots ont la valeurs que l'on veux bien leur accorder (TRAX)
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
re,

ce n'est plus tout a fait la meme question.

alors, tu va voir que c tres simple et qu'une redirection d'irq equivaut a une redirection de fonction.

en mode réel ( 16 bits ) il y a un tableau de 256 pointeurs far vers les fonctions d'interruption a l'adresse 0000:0000 et qui occupe 4*256 = 1024 octets

0000:0000 = pfintr[256]
0000:0400 = ?

lorsque le processeur rencontre une interruption, il empile les registres flags,cs et ip puis jump vers le pointeur donné par le tableau et le N° d'interruption ( de 0 a 255 ).

simule_int:;(iid:DWORD)
pushf
push cs
call pfintr[iid]

une redirection d'interruption va donner:
on lit la valeur du pointeur donné par le tableau "pfintr" et le n° d'interruption que l'on veut rediriger.
on sauvegarde cette valeur dans une variable que l'on appelera "pfold"
on change la valeur du pointeur "pfintr[iid]" pour que l'interruption aille vers notre fonction et voilà, le tour est joué, l'interruption est redirigée.

si tu veux appeler le gestionnaire original, tu n'as plus qu'a cleaner ta pile et finir ton handler par un jmp far [pfold]

quand tu quitte ton programme, tu dois restorer le vecteur d'interruption original.

@++
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
scuse,

simule_int:
pushf
call far pfintr[iid]

ca marchera mieux.

@++
Messages postés
93
Date d'inscription
mercredi 18 septembre 2002
Statut
Membre
Dernière intervention
20 juillet 2006

Bonjour,

j'ai trouvé ce code


mov al, 0x20
out 0x20, al

cli
xor cx, cx
testloop:
in al, 64h
test al, 1
loopz testloop
jz pascar
mov ah, 1
in al, 60h
jmp fin
pascar:
xor ax, ax
fin:
sti 


je comprends pas les deux première ligne

Les mots ont la valeurs que l'on veux bien leur accorder (TRAX)
Messages postés
93
Date d'inscription
mercredi 18 septembre 2002
Statut
Membre
Dernière intervention
20 juillet 2006

g oublié l'adresse du code

http://www.asmfr.com/forum.v2.aspx?ID=135983

Les mots ont la valeurs que l'on veux bien leur accorder (TRAX)
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
re,

tu viens de trouver la commande EOI du pic ( END OF INTERRUPTION )

lorsque ton peripherique a quelque chose a dire, il declenche sa ligne d'IRQ.
le pic detecte la ligne irq du peripherique et declenche l'irq aupres du processeur.

ce code:
mov al,0x20; = commande EOI
out 0x20,al; = Envoi sur le port rattaché au pic la commande EOI

permet de dire au pic qu'il peut mettre sa requette d'interruption sur 0 (OFF) afin de pouvoir accepter d'autre requetes d'interruption auprès d'autres ou du meme peripherique.

je pense que tu devrais pouvoir trouver des informations sur le fonctionnement du pic assez facilement car c'est vieux et connu.

@++