char *a=(char *)(0xAdresse) explication

char *a=(char *)(0xAdresse) explication - C - Programmation

Marsh Posté le 17-11-2004 à 19:22:38    

je voudrai une explication sur
char *a=(char *)(0xAdresse)  
que fait se casting il force quoi :??:  
    merci

Reply

Marsh Posté le 17-11-2004 à 19:22:38   

Reply

Marsh Posté le 17-11-2004 à 19:23:51    

il transforme un nombre 32 bits en adresse mémoire pointant sur des char

Reply

Marsh Posté le 17-11-2004 à 19:29:22    

je veux savoir si il y a une adresse reserver pour les entier les char comme c est le cas pour l adresse de la vram 0xa0000000

Reply

Marsh Posté le 17-11-2004 à 19:33:02    

????? gne ?

Reply

Marsh Posté le 17-11-2004 à 19:44:06    

je programme un moteur 3d avec le mode 13h
je veux avoire une resolution superieur sans passer par directX ou opengl

Reply

Marsh Posté le 17-11-2004 à 19:44:22    

je programme un moteur 3d avec le mode 13h
je veux avoir une resolution superieur sans passer par directX ou opengl

Reply

Marsh Posté le 17-11-2004 à 19:51:51    

Achète toi un bon bouquin de programmation en C. Et ensuite, va voir ce document, qui est la référence des Vesa Bios Extensions.
 
Le lien: http://www.vesa.org/vbe3.pdf


Message édité par Lam's le 17-11-2004 à 19:53:46
Reply

Marsh Posté le 17-11-2004 à 20:01:56    

ya aussi le black book de Michael Abrash qui doit etre une reference
 

Reply

Marsh Posté le 17-11-2004 à 20:03:36    

ok mercie

Reply

Marsh Posté le 17-11-2004 à 20:04:21    

cris56 a écrit :

ya aussi le black book de Michael Abrash qui doit etre une reference


 
 
       CECI EST UN TOPIC COMPATIBLE HARKONNEN.


Message édité par Lam's le 17-11-2004 à 20:04:41
Reply

Marsh Posté le 17-11-2004 à 20:04:21   

Reply

Marsh Posté le 17-11-2004 à 20:07:45    

ca veut dire quoi ? (serieux j'ai pas compris)

Reply

Marsh Posté le 17-11-2004 à 20:12:29    

cris56 a écrit :

ca veut dire quoi ? (serieux j'ai pas compris)


 
Je te le fais en turbo pascal alors:
 
begin
if (topic=="AMIGA" ) or (topic=="DEMO-MAKING" ) or (topic=="ASSEMBLER" )
  then writeln ("Harkonnen compatible" );
end.


Message édité par Lam's le 17-11-2004 à 20:13:17
Reply

Marsh Posté le 17-11-2004 à 20:16:05    

ok, mais reconnais que ne connaissant pas harkonnen et ses penchants, ca m'aurais été difficile de deviner
 
je suis d'accord, c'est vieux tout ca (et surtout on s'en fou)

Reply

Marsh Posté le 23-11-2004 à 20:22:55    

tiens en parlant des types "char *", j'ai une question pour ma culture personnelle :
 
lorsqu'on on tape l'instruction :
 
char *chaine = "bonjour";
 
Comment marche les mécanismes de l'allocation memoire pour cette chaine derrière ? (il convertit cela en l'instruction de declaration avec un tableau :
 
char chaine[8]={'b','o','n','j','o','u','r', '\0'};
 
:??: )

Reply

Marsh Posté le 23-11-2004 à 20:30:28    

ben non, tableau != de pointeur
 
ton "chaine" pointe sur la chaine constante "bonjour"

Reply

Marsh Posté le 23-11-2004 à 20:31:55    

Giz a écrit :

tiens en parlant des types "char *", j'ai une question pour ma culture personnelle :
 
lorsqu'on on tape l'instruction :
 
char *chaine = "bonjour";
 
Comment marche les mécanismes de l'allocation memoire pour cette chaine derrière ? (il convertit cela en l'instruction de declaration avec un tableau :
 
char chaine[8]={'b','o','n','j','o','u','r', '\0'};
 
:??: )


Nope.
char *chaine1 = "bonjour";
char chaine2[8]={'b','o','n','j','o','u','r', '\0'};
 
sizeof(chaine1) = sizeof (char *) (probablement 4 sur un PC);
sizeof(chaine2) == 8;
 
D'autre part, chaine1 n'est qu'un pointeur, qui pointe vers une zone mémoire contenant bonjour. chaine2 est directement l'adresse d'une zone mémoire de 8 caractères.
 
 
Enfin, "bonjour" est du type const char * en théorie. Donc cela devrait être:
  const char * chaine = "bonjour";
Tout comme il est préférable d'avoir:
  char chaine[]="bonjour";  
plutôt que de donner la taille soi-même.
 

Reply

Marsh Posté le 23-11-2004 à 20:56:34    

cris56 a écrit :

ya aussi le black book de Michael Abrash qui doit etre une reference


 
Ouep, mais ce n'est pas forcément très accessible. mais rien que pour la démarche ça vaut le coup.
 

Reply

Marsh Posté le 24-11-2004 à 11:09:31    

tiens, un topic intéressant [:cupra]
 
anis_sg >> pour programmer dans une résolution supérieure à celle proposée par le mode 13h, tu dois utiliser le mode VESA comme le précise Lam's
 
tous les appels se font par la fonction 4Fh, que tu dois placer dans AH. dans AL, tu places la sous fonction correspondante, et tu balances le tout à l'interruption 10h
 
pour initialiser le mode VESA (je me base sur mes souvenirs du VESA 2.0):
- vérifier la disponibilité du mode souhaité via la sous fonction 00h (AH = 4Fh, AL = 00h). tu dois également fournir un pointeur FAR de 256 octets dans ES:DI. en retour, tu obtiens dans ce buffer des infos sur la carte. étape facultative, on peut supposer que toutes les cartes actuelles sont OK, mais bon, c'est mieux de passer par là
- récupère ensuite les infos du mode souhaité via la sous fonction 01h, avec là encore une structure à passer en ES:DI. cette structure doit être décrite dans le lien que t'as filé Lam's.  
- ensuite active ce mode via la sous fonction 02h, avec le mode souhaité dans BX. sauvegarde ensuite dans un tableau les adresses de départ des différentes fenêtres d'accés (via le champ Granularity de la structure précédente)
- change enfin de fenêtre d'accés à la RAM via la fonction 05h, avec en DX l'adresse de départ de la banque courante sauvegardée précédemment
 
c'est un résumé hein ! je suppose que le document linké par Lam's doit être assez indigeste, alors j'ai esssayé de te débroussailler un peu, mais tu devras de toutes façons le lire, vu que ce que je t'ai dit est valable pour le VESA 2.0, il est possible que ça ait été modifié pour la version 3.0


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

Sujets relatifs:

Leave a Replay

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