demande de code assembler en C (_asm) pour emulation via usb

demande de code assembler en C (_asm) pour emulation via usb - ASM - Programmation

Marsh Posté le 18-08-2004 à 18:02:32    

bonjour
j'ai le bloc:
_asm{  
mov dx, LPTDataPort  
mov al, DataVal  
out dx, al  
}  
 
d'apres moi: mettre la valeur LPTDataPort dans dx, pareil pour DataVal dans al, et faire un truc entre dx et al.  
Exacte? ou pas? Que renvoi il? dans quoi? que fait exactement out? (qu'est ce que c'est que out?) je pense qu'il sert a renvoyer al sur un port dx mais.........
dx est un registre general, mais al?
 
merci


Message édité par Ledjlale le 20-08-2004 à 10:58:00
Reply

Marsh Posté le 18-08-2004 à 18:02:32   

Reply

Marsh Posté le 18-08-2004 à 18:05:10    

al est aussi un GPR, c'est les 8 bits du bas de EAX

Reply

Marsh Posté le 18-08-2004 à 18:08:02    

quant à "out"?

Reply

Marsh Posté le 18-08-2004 à 18:16:11    

out sert à envoyer une donnée dans un registre matériel


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 18-08-2004 à 18:26:39    

mmmmhh. merci
je suppose que pour avoir une liste exhaustive des registres materielles, il faut faire un REGEDIT.EXE.
Ou alors ils correspondraient à la plage d'E/S (pour mon cas) dans le gestionnaire de périph.
Si le deuxième cas est correct, alors comment se fait il que mon programme plante avec ces valeurs?
 
Mon but, c'est d'envoyer des données sur un port USB


Message édité par Ledjlale le 18-08-2004 à 18:54:41
Reply

Marsh Posté le 18-08-2004 à 18:55:10    

ledjlale a écrit :

mmmmhh. merci


De rien
 

ledjlale a écrit :


je suppose que pour avoir une liste exhaustive des registres materielles, il faut faire un REGEDIT.EXE.


pas du tout, ça n'a strictement rien à voir !
tu peux trouver la liste des registres et de leurs ports associés ici :
http://members.tripod.com/~oldboard/assembly/
 

ledjlale a écrit :


Si le deuxième cas est correct, alors comment se fait il que mon programme plante avec ces valeurs?


ton programme plante car tu écris surement une valeur fausse sur le port du registre. ce sont des trucs très sensibles, et si tu fais une connerie, dans le meilleur des cas tu plantes le programme, dans le pire des cas tu flingues ton matériel (véridique ! une écriture bidon dans un registre de la carte VGA par exemple, et tu dis adieu à ton moniteur)
regarde à quel port de registre correspond ta variable LPTDataPort, et rectifie ton programme en conséquence
vu le nom, ça doit être le registre du port parallèle


Message édité par Harkonnen le 18-08-2004 à 18:56:11

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 18-08-2004 à 18:58:32    

j'oubliais : selon ton OS, il est possible que l'accés direct au matériel te soit refusé (tous les OS à noyau NT et Linux)


Message édité par Harkonnen le 18-08-2004 à 18:58:44

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 18-08-2004 à 19:00:12    

ouffffff  :o j'espere pas avoir flingué quoi que ce soit
 
Au debut, c'est un programme pour envoyer sur port parallele, mais je voudrais envoyer sur un port usb.
 
os NT? je suis sur 2000 et XP. Comment faire pour forcer le passage?


Message édité par Ledjlale le 18-08-2004 à 19:01:48
Reply

Marsh Posté le 18-08-2004 à 19:02:03    

ledjlale a écrit :

ouffffff  :o j'espere pas avoir flingué quoi que ce soit
 
Au debut, c'est un programme pour envoyer sur port parallele, mais je voudrais envoyer sur un port usb.


ben faut pas t'étonner si ça marche pas hein, c'est pas du tout la même chose [:heink]
faut que tu regardes si tu peux accéder aux ports USB directement par un registre, le site que je t'ai donné ne le mentionne pas


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 18-08-2004 à 19:03:11    

ledjlale a écrit :


os NT? je suis sur 2000 et XP. Comment faire pour forcer le passage?

je sais pas si c'est possible... essaie éventuellement de passer en RING 0, sans garantie


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 18-08-2004 à 19:03:11   

Reply

Marsh Posté le 18-08-2004 à 19:04:59    

Sorry mais que veut dire : "passer en RING 0"?
En fait, depuis deux jours que je cherchent les ports USB: ils passent par un controlleur et c'est tout...


Message édité par Ledjlale le 18-08-2004 à 19:09:11
Reply

Marsh Posté le 18-08-2004 à 22:21:41    

[:abnocte invictus]
 
accéder directement à l'USB comme on le fait pour le port // me paraît pas gagné
Va falloir jeter un œil du côté des drivers linux :jap:
+ rassembler un max d'infos sur ton contrôleur USB (regarder dans la datasheet)
 
(edit : et ptêt renommer le topic :D )


Message édité par beel1 le 18-08-2004 à 22:23:53
Reply

Marsh Posté le 18-08-2004 à 22:41:57    

USB est un bus, c'est un poil plus complexe à interfacer qu'un LPT :D (sauf si on utilise un circuit FTDI).

Reply

Marsh Posté le 19-08-2004 à 09:17:15    

linux? c'est le meme type de gestion d'usb qu'un wiwi?
Que me conseillez vous pour que je puisse simuler une souris sur un bus usb par ordinateur?(deux ordis qui se connectent par usb et dont l'un se fait passer pour une souris).
J'aimerais le coder en C (ce qui me permettrait d'avoir quelques blocs en asm, puisque qu'on peut tout faire en asm :))
 
(et puis si on parle plus d'asm, je bougerais de forum:))

Reply

Marsh Posté le 19-08-2004 à 09:35:16    

regarde ici, tu trouveras les infos qu'il te faut :
http://www.usb.org/developers/


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 19-08-2004 à 09:39:33    

merci, mais je connais deja, c'est meme la que j'ai recuperé le code qui contient le truc du haut ;).  
Il y a peut etre un rapport entre le fait d'envoyer sur un port LPT, et celui d'envoyer sur le port serie usb..... Faut que je cherche :heink:
 
pour choper un word à l'adresse 40:08, je fais:  
_asm
{
    movw ax, Donnees  
    movw dx, 0x4008  
    in ax,dx  
}
//??  


Message édité par Ledjlale le 19-08-2004 à 09:47:59
Reply

Marsh Posté le 19-08-2004 à 09:51:52    

Si ca peut t'aider: http://www.lvr.com/hidpage.htm

Reply

Marsh Posté le 19-08-2004 à 09:56:06    

arf, encore un site que je connais. merci quand meme.
Mais tu pourrais peut-etre m'aider: pour pouvoir faire ce qu'ils disent, il me faut le DDK pour windaube2K. Ils medisent que c'est gratuit et tout, me donnent des liens, mais quand je vais chez microchit, ils me demandent de payer..?? et pour un winserver2003.
Enfin bref, j'ai pas trouvé de DDK pour moi. J'ai bien le SDK, mais c'est pas celuila. Suaris tu ou je peux l'avoir? merci!
 
[edit]je vai demander dans le forum de soft


Message édité par Ledjlale le 19-08-2004 à 10:11:10
Reply

Marsh Posté le 19-08-2004 à 10:20:59    

Apparement le dernier ddk fonctionne aussi avec win2k d'après ce que j'ai compris à la faq. Pour l'avoir... tu peux essayer des moyens détournés, si tu vois ce que je veux dire.

Reply

Marsh Posté le 19-08-2004 à 10:29:03    

mouais, et il y a pas moyen d'avoir les anciens comptatible avec 2K?
[edit] me dites pas que c'est trop dur :lol: :  
 
pour choper un word à l'adresse 40:08, je fais:  (visual SC++6)
int Donnees;  
_asm  
{  
    movw ax, Donnees    
    movw dx, 0x4008    
    in ax,dx   ;ou bien : movw Donnees, 0x4008
}  
 :??:
 


Message édité par Ledjlale le 19-08-2004 à 16:09:08
Reply

Marsh Posté le 19-08-2004 à 10:38:19    

[:airforceone]

Reply

Marsh Posté le 19-08-2004 à 10:43:28    

ledjlale a écrit :

linux? c'est le meme type de gestion d'usb qu'un wiwi?
Que me conseillez vous pour que je puisse simuler une souris sur un bus usb par ordinateur?(deux ordis qui se connectent par usb et dont l'un se fait passer pour une souris).
J'aimerais le coder en C (ce qui me permettrait d'avoir quelques blocs en asm, puisque qu'on peut tout faire en asm :))
 
(et puis si on parle plus d'asm, je bougerais de forum:))


Bah intuitivement, si t'y vas à coup d'asm, nux ou win t'auras les mêmes grands principes.
Attention aussi, pour simuler une souris (device USB) par un PC (host USB) pour brancher sur un PC (host USB), renseigne toi bien : la norme USB interdit de relier 2 hosts entres eux (ouiiiiii... je sais... y'a des câbles USB qui existent pour faire des transferts entre 2 PCs... mais pour savoir comment c'est foutu... :/ intuitivement je me dis que c'est un device qui fait le pont entre les 2 hosts, et non directement 1 host qui parle à l'autre, mais bon...)

Reply

Marsh Posté le 19-08-2004 à 12:55:54    

Tu as de la chance, je suis tombé complètement par hasard sur ce site:  
http://www.alanmacek.com/usb/deviceAPI.html
http://www.alanmacek.com/usb/hostcode.html
 
:hello:

Reply

Marsh Posté le 19-08-2004 à 15:31:38    

gniark gniark.........   connais aussi!   :sol:  
merci quand meme, je suis en train de demander le ddk pour pouvoir tout faire fonctionner. Pour l'instant, j'essay de faire du reverse engenneering (scusez pour les fautes :) ) et je suis en train de remarquer qu'il pas si difficile que ca à dialoguer sur un port usb...pour l'instant :)
Donc, pour ce qui est de l'assembleur, il n'y a pas de ligne de code dans le code (c que du c!), alors si j'ai d'autres soucis, je passerais un petit bjr! :D  
 
Je tiens à remarquer que le code source fournit par lvr.com est très bien commenté (il manque juste un petit déscriptif des variables lors de leur déclaration, mais pour ce qui est de leur utilisation... c'est tres facile à comprendre)
 
En attendant, je voudrais bien avoir une petite reponse pour mon ptit bout du haut :sarcastic:


Message édité par Ledjlale le 19-08-2004 à 15:47:49
Reply

Marsh Posté le 19-08-2004 à 16:32:57    

Pas besoin de driver pour dialoguer avec un periph USB, voir les fonctions SetupDi* (1° lien de WhatDe).
http://groups.google.fr/groups?hl= [...] 26rnum%3D6
http://www.delcom-eng.com/downloads/USBPRGMNL.pdf


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 19-08-2004 à 17:09:33    

Pour la suite de l'usb; j'ai posté dans le forum de hradware et périph... num 8166 a moins que ce soit: 82002?


Message édité par Ledjlale le 19-08-2004 à 17:11:25
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed