Problème bizarre en C - C++ - Programmation
Marsh Posté le 29-06-2002 à 12:20:49
Je viens de m'apercevoir que c'est la portion d'initialisation qui chie en C. 
Mais je ne sais toujours pas pourquoi.... 
 
;-- outportb(0x21,ADRESSE+0x00);  
mov dx,ADRESSE 
mov al,21h 
out dx,al 
;-- outportb(0x49,ADRESSE+0x0E);  
mov dx,ADRESSE 
add dx,0Eh 
mov al,49h 
out dx,al 
;-- outportb(0x02,ADRESSE+0x0D);  
dec dx 
mov al,02 
out dx,al 
;-- outportb(0x0C,ADRESSE+0x0A);  
mov dx,ADRESSE 
add dx,0Ah 
mov al,0Ch 
out dx,al 
;-- outportb(0x00,ADRESSE+0x0B);  
inc dx 
xor al,al 
out dx,al 
;-- outportb(0x00,ADRESSE+0x08);  
mov dx,ADRESSE 
add dx,08h 
out dx,al 
;-- outportb(0x00,ADRESSE+0x09);  
inc dx 
out dx,al 
;-- outportb(0x0A,ADRESSE+0x00);  
mov dx,ADRESSE 
mov al,0Ah 
out dx,al 
add dx,10h 
;-- mac0=inportb(ADRESSE+0x10);  
in al,dx 
mov mac0,al 
;-- mac1=inportb(ADRESSE+0x10);  
in al,dx 
mov mac1,al 
;-- mac2=inportb(ADRESSE+0x10);  
in al,dx 
mov mac2,al 
;-- mac3=inportb(ADRESSE+0x10);  
in al,dx 
mov mac3,al 
;-- mac4=inportb(ADRESSE+0x10);  
in al,dx 
mov mac4,al 
;-- mac5=inportb(ADRESSE+0x10);  
in al,dx 
mov mac5,al
Marsh Posté le 30-06-2002 à 00:24:27
C'est quoi au juste ton ADRESSE ? 
L'adresse d'un structure ? 
Car si tu definis ta structure, le compilo peut pour optimiser l'acces memoire effectuer des alignements et tout te décaler. J'ai déjà eu ce problème et il faut entourer la déclaration de la structure d'une directive de compilation propre a chaque compilo (#pragma pack(1)), a condition que l'erreur vienne de là biensûr ...
Marsh Posté le 30-06-2002 à 09:36:40
En fait, il s'agit juste de l'adresse de la carte réseau. 
#define ADRESSE 0xB800
Marsh Posté le 28-06-2002 à 22:12:34
J'ai un problème vraiment bizarre en C. J'aimerais savoir si vous avez déjà rencontré une chose semblable.
Je suis en train de programmer ma carte réseau en hard et j'ai ce problème :
Pour récupérer l'adresse MAC de la carte, je fais :
outportb(0x21,ADRESSE+0x00);
outportb(0x49,ADRESSE+0x0E);
outportb(0x02,ADRESSE+0x0D);
outportb(0x0C,ADRESSE+0x0A);
outportb(0x00,ADRESSE+0x0B);
outportb(0x00,ADRESSE+0x08);
outportb(0x00,ADRESSE+0x09);
outportb(0x0A,ADRESSE+0x00);
mac0=inportb(ADRESSE+0x10);
mac1=inportb(ADRESSE+0x10);
mac2=inportb(ADRESSE+0x10);
mac3=inportb(ADRESSE+0x10);
mac4=inportb(ADRESSE+0x10);
mac5=inportb(ADRESSE+0x10);
Cela ne fonctionne pas. Je cherche depuis 2 jours et je décide d'écrire la même chose mais en assembleur (in al,dx / out dx,al) et MIRACLE! Cela fonctionne.
Pourquoi est-ce que le programme en C déconne (valeurs aléatoires dans macX) ?
Je precise que j'ai essayé deux compilos (Turbo C++ 3.0 pour DOS et DJGPP 3.1)