Oulah oulah! Pas la peine d´insulter le monde jarose. Chris n´a pas juste pas vu de lien avec Objective C, et Mathieun t´as juste fait remarquer que c´était totalement sans sens d´insulter Chris pour ça.
Sinon, pour l´objective C, non, t´as du mal comprendre ou alors je me suis mal fait comprendre ou tout simplement mal exprimé. Bon.
Il avait pratiquement créé un nouveau language:
il avait fait une sorte de " C with classes" comme il dit, avec des instructions du préprocesseur qui camouflait du pur code C.
Il ne donne pas trop de détails, mais je l´imagine dans le genre:
class B { herit(A)
class_prefix;
void private(function());
}
void B.class_member(function())
{
}
ect... tout camouflé sous une tonne de code de préprocesseur, et ça devait pas être super aisé, ni produire du code optimisé, à mon avis...
Vous comprenez ce que je voulais dire, maintenant?
Pas la peine d´en faire une troisième guerre mondiale quand même ^^
Kelios
---------
Sans vouloir mettre de l´huile sur le feu, c´est à peu près ce que j´avais compris
Pour la définition de printf, donc le corps de la fonction, ça dépend des systèmes d´exploitation, de leurs versions etc... La seule chose imposée par la norme je_sais_plus_quoi du C c´est la primitive de printf ( à savoir le machin " int printf(.....);")
Sinon, le hello world de JY² du début, c´est de l´assembleur 16 bits, en mode Réel. Les systèmes d´exploitation actuels fonctionnent en mode protégé ( 32 bits), et mis à part le fait que le passage en mode protégé est super chiant à faire, il ( le mode protégé) interdit l´utilisation des interruptions du BIOS. ( A cause notemment du changement d´adresses : une adresse 16 bits n´a pas le même format qu´une adresse 32 bits.)
Résultat le hello world 32 bits est en fait encore plus complexe que ça. Ca fait trop longtemps que j´en ai pas fait malheureusement. Enfin, le principe n´est pas de lancer une fonction pour afficher un message, mais plutôt de copier le message dans une zone mémoire, 0xb8000 il me semble, qui correspond en fait à ce qui est affiché à l´écran. Sachant que l´adresse change si on change la résolution de l´écran. Enfin bref, c´est vraiment pas un truc à conseiller aux débutants
Le hello world sous windows n´est pas bien plus complique
. 386
. model flat,stdcall
option casemap:none
include include\windows.inc
include include\kernel32.inc
includelib lib\kernel32.lib
include include\user32.inc
includelib lib\user32.lib
. DATA
MBTitre db " bouh",0
MBTexte db " hello world!",0
. CODE
start:
invoke MessageBox, NULL, addr MBTexte, addr MBTitre , MB_OK
invoke ExitProcess, NULL
END start
ha ha ha salut le monde
ben dis donc I_AM_THE_LAW t´es pas mauvais, un collègue m´as dit que tu étais assez ´vieux´ dans le monde de la prog, c´est vrai t´es une momie ? tu jouais au pog en asm à l´école ? ( c´est impressionant le nombre de c0nnerie que je peux sortir à la seconde...)
jarose, ça va ?
" et mis à part le fait que le passage en mode protégé est super chiant à faire"
cli
lgdt [daGDTDesc]
lidt [daIDTDesc]
mov eax, cr0
or eax, 1
mov cr0, eax
Ou est la difficulté là dedans?
Le plus dur c´est de faire le GDT et l´IDT eux même
" Résultat le hello world 32 bits est en fait encore plus complexe que ça. Ca fait trop longtemps que j´en ai pas fait malheureusement. Enfin, le principe n´est pas de lancer une fonction pour afficher un message, mais plutôt de copier le message dans une zone mémoire, 0xb8000 il me semble, qui correspond en fait à ce qui est affiché à l´écran. "
Dans les OS actuels comme tu le spécifiais, ce n´est pas possible, à moins de casser le paging lui même:
C´est une adresse physique, donc avec la mémoire virtuelle, ça sera tout vraisemblablement soit irréférencable, soit référençable par une page inconnue.
mais sinon c´est le pur texte VGA, c,est ce que j´utilise dans mon OS.
Un octet pour la lettre, une autre pour le choix de 9 couleurs comme couleur de lettre et de fond, et deux bits pour des trucs spéciaux.
Et là encore: on y préférera, chez les OS évolués, utiliser des pixels. Y´a un buffer VGA à l´adresse 0xA0000, ou sinon avec un driver de carte graphique on peux utiliser le DMA pour envoyer le tout à la carte graphique.
Kelios
---------
Je voudrais aussi rajouter que le soit-disant hello world asm win32 de i am the law ne contient pas une seule instruction d´assembleur ; ) c´est plutot un hello world masm32 disons pour clarifier les choses
chris>
T´as raison c´est du masm, a l´heure actuelle l´asm ne se limite plus seulement a appeler des instruction du processeur.
Masm rend la programmation plus facile et plus claire. Ne serait-ce que l´ajout des . if . while.. etc Ca fait moins " puriste" mais le code genere reste le meme que des jmp a la main.
Si tu critiques le invoke, c´est a peu pres la meme chose qu´un call... Tu aurais prefere quoi? pousser les parametres la main et faire le saut a la main a l´adresse de la fonction? La encore c´est se compliquer la vie pour pas grand chose.
Et si c´est l´appel d´une fonction windows que tu aimes pas ben...
Appeler les fct windows ou appeler les interruptions, c´est du pareil au meme. Alors pk ne pas utiliser des fct de kernel32.dll?
En fait c´est de l´asm que j´ai ecrit. La seule difference c´est que j´appelle des fonctions qui n´ont pas ete ecrites par moi. Tout comme toi tu utiliserais des interruptions.
P-e que le code de la messagebox n´est pas optimise mais c´est la meme difference sous dos entre appeler int 21 ou bien ecrire dans 0xb800 directement..
Et puis je vois mal qqn creer sa message box pixel par pixel sous windows sous pretexte que c´est pas du pur asm pour l´optimiser a mort.
gollumkawder>
c´est qui ce " collegue"?
Le passage en mode protégé, c´est pas simplement la modification du registre cr0, y´a la gdt, l´idt, l´ouverture de la porte A20, la création d´une patate de drivers pour tous les aspects de ton ordi, etc... C´est en ça que c´est chiant.
i am the law je n´ai rien contre masm au contraire, je m´en sers beaucoup. Simplement le topic c´est " l´asm ? " et je pense pas que ça soit une bonne introduction à l´asm de montrer une source qui ne contient pas d´asm, mais que des macros et des pseudo-instructions. Et un invoke ça peut être chiant, regarde ce code par exemple :
fonction PROC
LOCAL p:LPVOID
mov eax,size
invoke VirtualAlloc,ADDR p,eax,MEM_COMMIT,PAGE_READWRITE
fonction ENDP
ça parait bien, pourtant à la compilation ça va faire " error : register value overwritten by INVOKE" parce que invoke utilise obligatoirement eax pour calculer l´adresse d´une variable locale. Dans mon exemple c´est facilement contournable, mais des fois c´est tellement chiant que je préfère faire un call.
Evanescence, comme dit kelios c´est tres simple de passer en mode protégé, je confirme. la gdt ? tu peux la réduire au strict minimum, un descripteur nul, un de code et un de donnée et ça roule, l´idt ? facultatif. Ouverture de la porte a20 ? aucun rapport avec le mode protégé, facultatif aussi. Création de drivers ? ? alors là tu confonds mode protégé et écriture d´un OS. Il suffit juste de modifier cr0 et de faire un far jump pour passer en mode protégé
A priori si on code un passage en mode protégé, c´est qu´on écrit un OS non ? Enfin, moi je parlais de tout ceci dans ce sens.
Et c´est vrai que tout ce que j´ai ajouté à propos du passage en mode protégé est facultatif, mais que feras-tu une fois en mode protégé, si t´as rien fait pour bosser avec après ?
Kelios j´aimerai savoir avec quel livres/sites tu a appris l´asm
de plus j´aimerai savoir quel compilateur tu prend
merci ![]()
ça m"interrese un peu l´assembleur, vous savez ou je peu trouver des tuto?
Il y a un compilo assembleur sous linux ?
merci.
" A priori si on code un passage en mode protégé, c´est qu´on écrit un OS non ? Enfin, moi je parlais de tout ceci dans ce sens. "
Pas nécessairement. On veux peut-être par exemple faire un programme pour dialoguer avec une machine par un port, et voulant avoir une certaine protection. C´est tout à fait plausible.
Exemple une interface ordinateur pour controller un robot par le port parrallèle. Pas de besoin d´un gros OS autour et tout et tout...
" Et c´est vrai que tout ce que j´ai ajouté à propos du passage en mode protégé est facultatif, mais que feras-tu une fois en mode protégé, si t´as rien fait pour bosser avec après ? "
Dans cet exemple, je foutrais un IDT pour pouvoir accéder aux IRQs, pas de drivers, pas d´a20 si le prog est pas gros ( pas nécessaire), et un gdt minimal.
Kelios j´aimerai savoir avec quel livres/sites tu a appris l´asm -> un vieux truc, Art Of Assembly language, en 16 bits cepandant. Mais ça m´a permi de me familiariser avec le vieux truc, et le passag en 32 bits n´a causé aucune grosse difficultée.
http://webster.cs.ucr.edu/AoA/DOS/index.html
Le prob c,est que les versions 32 bits ne parlent que du HLA, High-level Assembly, ce que je ne voulais pas. J´imagine que rien ne vaut un bon bouquin cepandant.
Il faut savoir aussi un truc: on ne dit pas vraiment un compilateur pour de l´asm: on dit un assembleur. En fait le vrai terme pour le language c´est le language assembleur, et on assemble avec un assembleur ![]()
mais bon, ça porte à confusion pas mal...
En tout cas, mon assembleur préféré est nasm. Il est portable, avec une belle syntaxe, mais il est nu, il n´a même pas de linker, alors sous windows, si je dois dévelloper une application windows, je préfère masm.
Pour mon os je prend nasm, cepandant.
Pour l´assembleur sous Lniux, y´a Nasm.
Fasm aussi je crois.
Kelios
---------
Pour trouver des tutos : http://www.developpez.com/
C´est de quel auteur " Art Of Assembly language" ? ( je le cherche presentement sur le site d´une librairie ) ![]()
ok laise faire lol jai vue sur le site
Y´a aussi As sous linux.
Sinon deux bonnes adresses qui devraient t´intéresser Kelios :
http://membres.lycos.fr/dreamos/pages/docs.php
http://www.nondot.org/sabre/os/articles
Merci.
Pour l´OSRC, je connaissait déjà, je l´avais même déjà donné en lien à lagit un peu plus tôt. ( quelques semaines)
L´autre je connaissait pas. Mais de toute façon, je ne suis pas très intéressé par le boulot des autres, plus par le mien. Ce n´est pas tant de l´égocentrisme que du respect. Ce que je cherche à faire, c´est pratiquement tout faire moi même. Bon c´est sur j´ai pas fait mon propre compilo/assembleur, voir mon propre language de prog ( je suis pas si débile), mais en général c´est le principe de se mettre dans le cambouis jusqu´aux oreilles pour en apprendre un max, et pour le fun^10.
Alors c´est sur, dans cette politique, ce n´est que mon travail qui compte vraiment, et je ne cherche à m´insipirer le moins possible afin de produire un travail, une oeuvre si tu considère la programmation comme un art plutôt qu´une science, qui soit une véritablement original, le plus possible au moins.
C´est pas la solution la plus aisée, bien sur. En fait c´est peut-être un défaut, de toute façon je ne peut pas en juger, étant dans le phénomène. J´ai trop de scrupules à utiliser des trucs des auutres, trop de curiosité à savoir vraiment ce qui se passe dessous.
Ce que je cherche à réaliser, c´est un truc dont je puisse en être fier, dont je peux dire, oui, j´ai tout fait tout seul, tout est de moi.
Ce n´est pas à confondre avec de la vanité: bon évidemment je ne suis pas parfait, et je ressent toujours le plaisir de dire, moi j´ai fait ça et toi t´en est même pas capable. Mais je ne suis pas con, je sais très bien que face à l´absolu, face à toutes les réalisation de tous les autres programmeurs, mon travail est minuscule, d´une importance nulle. Dans un sens c´est égocentrique alors: un dur labeur dans le seul intéret de ma personne.
M´enfin bon, il me reste à philosopher là dessus. En attendant que je me trouve une description logique du sens de mon travail, je vais considérer de regarder comment d´autres OS sont conçus comme innacceptable.
Je suis désolé: je n´ai pas l´ouverture d´esprit nécessaire pour comprendre l´idée d´utiliser le travail des autres pour soi, d´accepter ton lien. J´avais vu lapintade dire à un endroit que il avait passé l´âge de faire tout, et qu´il n´avait plus de scrupules à utiliser des librairies haut-niveau par dessus OGL ou DX. Eh bien, cher lapintade, you diserve my most sincere respect(à vous de tradiure, c´est sorti en anglais). Parce que il est capable de réaliser des jeux super, et que moi, par mentalité, je ne peux. À tous ceux qui sont capables de faire un programme sans se soucier du fait que quelqu´un d´autre ait fait une partie de ton travail, je vous lève mon chapeau. Bonne chance dans tous ces merveilleux domaines! J´en reste au mien, n´en déplaise qu´à moi.
Kelios
---------
En même temps, tu n´as pas fait ton bootloader tout seul. Enfin, si je prends le terme " tout seul" dans le sens que tu sembles lui donner : sans l´aide de documentation.
C´est sûr que recopier du code sans le comprendre est pas très fun. Mais concernant dreamos/owl, l´idée que j´avais en te filant le lien n´était pas de te donner une source de plagiat, mais une source d´inspiration. Un peu comme la documentation que tu as déjà utilisée jusqu´ici pour réaliser ton bootloader, et autres trucs.
La prog, j´ai l´impression que de plus en plus de gens en font un art plus qu´une science ou une technique. La musique en elle-même est-elle un art ou est-ce ce qu´on en fait qui fait de la musique un art ?
Autrement dit : si je joue une gamme au piano, c´est de l´art ou de la technique ? Et si je joue un morceau de Bach, c´est de l´art ou la technique ?
Et si je compose un truc, c´est de l´art ou de la technique ?
Pas mal le débat quand même.
Sinon un truc qui m´a fait bien rire :
" Ce n´est pas à confondre avec de la vanité: bon évidemment je ne suis pas parfait, et je ressent toujours le plaisir de dire, moi j´ai fait ça et toi t´en est même pas capable."
Genre : " C´est pas de la vanité, mais j´en ai une plus grosse que toi" :p lol