<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Contributions à KolibriOS</title>
	<atom:link href="http://trolly.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://trolly.wordpress.com</link>
	<description></description>
	<lastBuildDate>Sat, 10 Feb 2007 23:38:42 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='trolly.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Contributions à KolibriOS</title>
		<link>http://trolly.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://trolly.wordpress.com/osd.xml" title="Contributions à KolibriOS" />
	<atom:link rel='hub' href='http://trolly.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Dock version 0.1 (boite à icones pour lancer des app)</title>
		<link>http://trolly.wordpress.com/2007/01/22/dock-version-01-boite-a-icones-pour-lancer-des-app/</link>
		<comments>http://trolly.wordpress.com/2007/01/22/dock-version-01-boite-a-icones-pour-lancer-des-app/#comments</comments>
		<pubDate>Mon, 22 Jan 2007 21:42:37 +0000</pubDate>
		<dc:creator>trolly</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[Programmes]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://trolly.wordpress.com/2007/01/22/dock-version-01-boite-a-icones-pour-lancer-des-app/</guid>
		<description><![CDATA[Voici la première version du dock pour menuet. ce programme fonctionne comme le tracker, mis à part qu&#8217;il n&#8217;y a pas de nom mais des icones, et pas de sous menu. le fichier de config est comme pour le tracker, on écris le nombre d&#8217;app, et pour chaque app, on crée une structure programme. au [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trolly.wordpress.com&amp;blog=356883&amp;post=12&amp;subd=trolly&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Voici la première version du dock pour menuet.</p>
<p>ce programme fonctionne comme le tracker, mis à part qu&#8217;il n&#8217;y a pas de nom mais des icones, et pas de sous menu.</p>
<p>le fichier de config est comme pour le tracker, on écris le nombre d&#8217;app, et pour chaque app, on crée une structure programme. au lieu d&#8217;écrire le nom du programme, on écris le nom du fichier icone à afficher.</p>
<p><a href="http://stephaneweg.cabspace.com/files/dock.zip">dock.zip</a></p>
<p>à faire:</p>
<p>- modifier pour que la config est un fichier pur texte</p>
<p>- optimiser le code</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/trolly.wordpress.com/12/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/trolly.wordpress.com/12/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trolly.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trolly.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/trolly.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/trolly.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/trolly.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/trolly.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/trolly.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/trolly.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/trolly.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/trolly.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/trolly.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/trolly.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/trolly.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/trolly.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trolly.wordpress.com&amp;blog=356883&amp;post=12&amp;subd=trolly&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trolly.wordpress.com/2007/01/22/dock-version-01-boite-a-icones-pour-lancer-des-app/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/62c546028fea49fed9be85cfe97be3a2?s=96&#38;d=identicon" medium="image">
			<media:title type="html">trolly</media:title>
		</media:content>
	</item>
		<item>
		<title>Tracker Version 0.1</title>
		<link>http://trolly.wordpress.com/2007/01/21/tracker-version-01/</link>
		<comments>http://trolly.wordpress.com/2007/01/21/tracker-version-01/#comments</comments>
		<pubDate>Sun, 21 Jan 2007 20:44:57 +0000</pubDate>
		<dc:creator>trolly</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[Programmes]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://trolly.wordpress.com/2007/01/21/tracker-version-01/</guid>
		<description><![CDATA[1) introduction tracker est un lanceur d&#8217;application pour MenuetOS ont apparence est similaire au tracker de BeOS. Il se présente sous la forme du boite à bouton. chacun d&#8217;eux ouvre un menu résentant les probrammes à lancer. 2) fonctionnement: la configuration se trouve dans un fichier binaire don le format est comme suit: dd nombre_de_menu [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trolly.wordpress.com&amp;blog=356883&amp;post=11&amp;subd=trolly&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>1) introduction</strong></p>
<p>tracker est un lanceur d&#8217;application pour MenuetOS ont apparence est similaire au tracker de BeOS.<br />
Il se présente sous la forme du boite à bouton. chacun d&#8217;eux ouvre un menu résentant les probrammes à lancer.</p>
<p><strong>2) fonctionnement:</strong></p>
<p>la configuration se trouve dans un fichier binaire don le format est comme suit:</p>
<p>dd nombre_de_menu<br />
menu1 menuitem &#8216;texte du menu1&#8242;<br />
menu2 menuitem &#8216;texte du menu1&#8242;<br />
&#8230;<br />
dd nombre_de_prog_du_menu_n<br />
prog_N.X programme &#8216;texte du programme X&#8217;,'commande_du_programme_X&#8217;<br />
&#8230;</p>
<ul>
<li>menuitem  est une chaine de 60 caractères</li>
<li>programme sont deux chaines de 60 caractères (60 pour le nom, 60 pour la command)</li>
</ul>
<p>pour chaque chaine de caractères de menuitem et programme, les bytes 0 sont ajoutés pour ompléter l&#8217;espace restant</p>
<p>en analysant le fichier source de la configuration (cfgfile.asm) vous comprendrez mieux</p>
<p>attention!!! il faut être vigilant à ne pas faire d&#8217;erreur dans la configuration sinon le programme plante</p>
<p><strong>3) liste des fichiers</strong></p>
<ul>
<li> cfgfile.asm   ;source de la configuration</li>
<li> cfgfile.inc   ;fichier inclus dans la source de la config</li>
<li> tracker.asm   ;source du programme principal</li>
<li> tmenu.asm     ;source du programme de sous menu</li>
<li> parser.inc    ;fichier inclus dans la source des programmes</li>
<li> meos.inc      ;fichier inclus dans la source des programmes</li>
<li> tracker.dat   ;fichier de configuration</li>
<li> @tracker      ;binaire du programme principal</li>
<li> @tmenu        ;binaire du sous menu</li>
<li> build.bat     ;script de conpilation et d&#8217;installation</li>
<li>readme.txt    ;fichier d&#8217;informations</li>
</ul>
<p><strong>4) installation</strong></p>
<p>lancer &#8220;build.bat&#8221; depuis msdos ou windows ou alors:</p>
<p><strong>a) compiler les sources</strong></p>
<p>tracker.asm =&gt; @tracker<br />
tmenu.asm   =&gt; @tmenu<br />
cfgfile.asm =&gt; tracker.dat</p>
<p><strong>b) copier les fichiers compilés</strong><br />
tracker.dat =&gt; &#8220;c:\kolibri\etc\tracker.dat&#8221; (&#8220;/hd0/1/kolibri/etc/tracker.dat&#8221;)<br />
@tracker    =&gt; &#8220;c:\kolibri\bin\@tracker&#8221;    (&#8220;/hd0/1/kolibri/bin/@tracker&#8221;)<br />
@tmenu      =&gt; &#8220;c:\kolibri\bin\@tmenu&#8221;      (&#8220;/hd0/1/kolibri/bin/@tmenu&#8221;)</p>
<p><strong>5) A faire</strong></p>
<ul>
<li> a) Include un logo à afficher en tête de la boîte à boutons</li>
<li>b) Modifier le parser afin de pouvoir lire la config d&#8217;un fichier pure texte</li>
<li>c) faire en sorte que le sous menu à afficher sois passé en paramètre pluto que d&#8217;être    inscrit dans un fichier temporaire</li>
<li>d) mettre tmenu comme thread du programme principal (un seul binaire pour l&#8217;ensemble)</li>
</ul>
<p><a href="http://stephaneweg.cabspace.com/files/tracker.zip" title="tracker">tracker.zip</a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/trolly.wordpress.com/11/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/trolly.wordpress.com/11/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trolly.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trolly.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/trolly.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/trolly.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/trolly.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/trolly.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/trolly.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/trolly.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/trolly.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/trolly.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/trolly.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/trolly.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/trolly.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/trolly.wordpress.com/11/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trolly.wordpress.com&amp;blog=356883&amp;post=11&amp;subd=trolly&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trolly.wordpress.com/2007/01/21/tracker-version-01/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/62c546028fea49fed9be85cfe97be3a2?s=96&#38;d=identicon" medium="image">
			<media:title type="html">trolly</media:title>
		</media:content>
	</item>
		<item>
		<title>Librairie Dynamique</title>
		<link>http://trolly.wordpress.com/2007/01/16/librairie-dynamique/</link>
		<comments>http://trolly.wordpress.com/2007/01/16/librairie-dynamique/#comments</comments>
		<pubDate>Tue, 16 Jan 2007 09:22:27 +0000</pubDate>
		<dc:creator>trolly</dc:creator>
				<category><![CDATA[Pilotes, Serveurs et modules]]></category>
		<category><![CDATA[Programmes]]></category>
		<category><![CDATA[Routines utiles]]></category>

		<guid isPermaLink="false">http://trolly.wordpress.com/2007/01/16/librairie-dynamique/</guid>
		<description><![CDATA[Voici la nouvelle version de mes librairies dynamiques. Maintenant, vous rechercher l&#8217;adresse d&#8217;une fonction grâce à son nom (chaine de caractère au forma ascii) Le nom des fonction est: macro dlopen path : path est le chemin vers la librairie à charger elle renvoie dans la pile le handler de la librairie (pointeur vers la [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trolly.wordpress.com&amp;blog=356883&amp;post=10&amp;subd=trolly&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Voici la nouvelle version de mes librairies dynamiques.</p>
<p>Maintenant, vous rechercher l&#8217;adresse d&#8217;une fonction grâce à son nom (chaine de caractère au forma ascii)</p>
<p>Le nom des fonction est:</p>
<p>macro dlopen path : path est le chemin vers la librairie à charger<br />
elle renvoie dans la pile le handler de la librairie (pointeur vers la zone chargée)</p>
<p>macro dlclose handler: handler est le handler (adresse) d&#8217;une librairie déjà chargée</p>
<p>macro dlsym handler,symbol : handler est le pointeur de la librairie et symbol est un pointeur vers le nom de la fonction dans le programme</p>
<p>pour charger une lib vous faite:</p>
<p>dlpath db &#8216;/hd0/1/kolibri/lib/mylib.mdl&#8217;,0<br />
sym_fonction1 db &#8216;fonction1&#8242; ,0<br />
dlhandler dd 0<br />
fonction1 dd 0</p>
<p>dlopen dlpath<br />
pop [dlhandler]<br />
dlsym [dlhandler], sym_fonction1<br />
pop [fonction1]</p>
<p>;eventuellement<br />
;push [param1]</p>
<p>call [fonction1]</p>
<p>la structure des lib est comme suite:</p>
<p>org adresse<br />
dd adresse<br />
dd sym_fn_1 , fn_1<br />
dd sym_fn_2, fn_2<br />
dd 0</p>
<p>fn_1:<br />
&#8230;<br />
ret</p>
<p>fn_2:<br />
&#8230;<br />
ret</p>
<p>;le programme trouve l&#8217;adresse d&#8217;une fonction en comparant la chaine de caractère pointée ;pointeur dans le programme (paramètre de la macro)  avec chacunes de celles pointées ;dans l&#8217;antête de la lib jusqu&#8217;à avoir trouvé la correspondance où être arrivé à la fin de ;l&#8217;en-tête (indiqué par un zero)</p>
<p>;char** chaine1 = handler+(8*numero)-4 donc</p>
<p>mov [numero],1</p>
<p>debut_boucle:</p>
<p>mov eax,handler<br />
mov ebx,[numero]<br />
shl ebx,3<br />
sub ebx,4<br />
add eax,ebx</p>
<p>cmp [eax] ,0   ;si on est tombé sur un zero alors c&#8217;est la fin du tableau<br />
jna calerror    ;on a pas trouve de correspondance</p>
<p>mov esi,[eax]    ;l&#8217;adresse est mise dans esi<br />
mov edi,symbol<br />
mov ecx,[strlen]   ;strlen a été calculé plus tod dans la macro<br />
repe cmpsb<br />
jnz suivant<br />
jmp trouve</p>
<p>suivant:</p>
<p>inc numero<br />
jmp debut_boucle</p>
<p>;une fois le nom trouvé, on a le numéro corespondant (= le compteur)</p>
<p>mov eax,handler<br />
mov ebx,[numero]<br />
shl ebx,3<br />
add eax,ebx</p>
<p>push [eax]  ;on sauve le resultat dans la pile<br />
jmp fin</p>
<p>callerror:</p>
<p>push [0]  ;on renvoie la valeur null dans la pille</p>
<p>fin:</p>
<p><a href="http://stephaneweg.cabspace.com/files/mdl4.zip"> mdl4.zip (programme d&#8217;exemple de cette nouvelle librairie)</a></p>
<p><a href="http://stephaneweg.cabspace.com/files/ipc3.zip" title="ipc3.zip">ipc3. zip  (Programme de démo pour l&#8217;utilisation de l&#8217;IPC avec la denière version de la librairie</a></p>
<p>nouvelle version:</p>
<ul>
<li>Les adresses des fonctions sont exportées au moment du chargement de la librairie (avec la macro &#8220;dl_load &#8216;fichier&#8217;, table d&#8217;export; en utilisant les symboles (chaine de caractères pour nomer la fonction));</li>
<li>pour appeler une fonction, vous pouvez utiliser &#8220;dllcal [fonction],[valeur de retour],parm1,&#8230;,param4; (la macro va automatiquement placer les paramètres dans la pile et enregistrer la valeur de retour)</li>
<li>la fonction dl_load est améliorée, on ne charge que 2 fois le fichier, et lors de la première fois, le buffer est automatiquement updaté; les variables sont des adresses (fileinfo eq 0&#215;1000 et dbid eq 0&#215;1100 au lieu de &#8220;dd&#8221;); ça a réduit d&#8217;autant la taille du fichier exécutable</li>
</ul>
<p><a href="http://stephaneweg.cabspace.com/files/ipc4.zip">ipc4.zip</a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/trolly.wordpress.com/10/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/trolly.wordpress.com/10/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trolly.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trolly.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/trolly.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/trolly.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/trolly.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/trolly.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/trolly.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/trolly.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/trolly.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/trolly.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/trolly.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/trolly.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/trolly.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/trolly.wordpress.com/10/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trolly.wordpress.com&amp;blog=356883&amp;post=10&amp;subd=trolly&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trolly.wordpress.com/2007/01/16/librairie-dynamique/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/62c546028fea49fed9be85cfe97be3a2?s=96&#38;d=identicon" medium="image">
			<media:title type="html">trolly</media:title>
		</media:content>
	</item>
		<item>
		<title>Pilotes de type serveur (à la manière de QNX)</title>
		<link>http://trolly.wordpress.com/2006/11/22/pilotes-de-type-serveur-a-la-maniere-de-qnx/</link>
		<comments>http://trolly.wordpress.com/2006/11/22/pilotes-de-type-serveur-a-la-maniere-de-qnx/#comments</comments>
		<pubDate>Wed, 22 Nov 2006 20:47:55 +0000</pubDate>
		<dc:creator>trolly</dc:creator>
				<category><![CDATA[Pilotes, Serveurs et modules]]></category>

		<guid isPermaLink="false">http://trolly.wordpress.com/2006/11/22/pilotes-de-type-serveur-a-la-maniere-de-qnx/</guid>
		<description><![CDATA[Voici ma dernière idée que je m&#8217;empresse d&#8217;écrire avant de l&#8217;oublier. En réfléchissant à la manière d&#8217;implémenter des pilotes en mode utilisateurs pour KolibriOS (Menuetos), je constatatait plusieurs problèmes: Comment faire pour que le programme sache avec quel programme(le pilote) il doit communiquer pour utiliser le matériel. Si au lieu d&#8217;utiliser des pilotes mais en [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trolly.wordpress.com&amp;blog=356883&amp;post=9&amp;subd=trolly&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Voici ma dernière idée que je m&#8217;empresse d&#8217;écrire avant de l&#8217;oublier.</p>
<p>En réfléchissant à la manière d&#8217;implémenter des pilotes en mode utilisateurs pour KolibriOS (Menuetos), je constatatait plusieurs problèmes:</p>
<ul>
<li>Comment faire pour que le programme sache avec quel programme(le pilote) il doit communiquer pour utiliser le matériel.</li>
<li>Si au lieu d&#8217;utiliser des pilotes mais en utilisant des librairies dynamique contenant le pilote, comment le programme saurait-il quel module charger.</li>
</ul>
<p>Il y a bien entendu d&#8217;autre problèmes qui seraient mis en évidence, mais ceux là me semble assez conséquent. J&#8217;imagine bien que le développeur de microsoft windows, ou des systèmes linux unix rieraient  bien en lisant cela, mais leur système est aussi bien plus mature que Kolibri, et ces problèmes là on été résolut depuis le début. Du fait de la conception même de MenuetOS, il va faloir beaucoup réfléchir afin de parvenir à un système de pilote efficace, sans boulversser le fonctionnement même du système d&#8217;exploitation (pour des raison de compatibilité assendante et dessendante notament)</p>
<p>En pensent à la conception de Menuet, j&#8217;ai réalisé que la couche réseau était déjà bien avancée, et me suis dit qu&#8217;elle pourai être utilisée.</p>
<p>Le système est relativement simple:</p>
<ul>
<li>Dans linux pour sortir du son de la carte son, on écrit dans /dev/audio ou un truc dans le genre, le pilote reçoit alors ce qui a été écrit dans ce &#8220;fichier spécial&#8221;. comme lorsque vous tapez &#8220;cat fichier.wav /dev/audio&#8221;, vous entendrez alors le fichier joué.</li>
<li>Dans menuet il n&#8217;y a pas de système de devfs pour faire ce genre de manipulation, mais un sytèm, qui est à la base du fonctionement des réseau et disponible permet de faire semblable</li>
</ul>
<p>Ce système est les socket:</p>
<ul>
<li>Lorsque un programme voudra lire un fichier .wav. il va charger le fichier en mémoire, et copier le contenu dans le socket.</li>
<li>Le serveur va alor voir qu&#8217;il y a des information (le son) qui rentre dans le socket, et va faire le nécessaire pour transmettre les ordres à la carte son</li>
</ul>
<p>Pour réaliser celà, au lieu d&#8217;écrire dans un fichier conventionnel, on va écrire dans un socket identifié par un numéro de port (conventionnel, par exemple, la sortie audio dans le port 6000, l&#8217;entrée audio dans le port 6005)</p>
<p>Le serveur lui pourai charger le pilote pour gérer le matériel depuis la ligne de commande comme dans QNX, pour utiliser une carte son du modèle ac97 on fait : &#8220;ioaudio -d ac97 &#8221; ça veux dire qu&#8217;on lance le serveur qui est un exécutable, et on lui dit quel pilote utiliser , ac97 en l&#8217;occurence&#8221;, le serveur va alor démarrer, charcher le fichier pilote (dynamiquement) et créer un lien dans devfs.</p>
<p>Dans MenuetOS on pourait fair un truc du genre, on exécute la commande &#8220;ioaudio&#8221; avec &#8220;ac97&#8243; en paramètre, et le programme &#8220;ioaudio&#8221; se lencerai, et chargerait &#8220;ac97.drv&#8221; , et ouvrirait le port num UNTEL (convenctionné)<br />
et se mettra en attente (mode listen) le temps qu&#8217;il reçoi la connection d&#8217;un client, lorsqu&#8217;une connection est établie, il lira les information qui seront entrée et les envera vers la carte son, grâce au code du pilote.</p>
<p>Du coté client, on a pas besoin de se soucier du pilote avec le quel communiquer, du module à charger, mais on écrira simplement les info dans le socket une fois la connection établie.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/trolly.wordpress.com/9/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/trolly.wordpress.com/9/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trolly.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trolly.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/trolly.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/trolly.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/trolly.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/trolly.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/trolly.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/trolly.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/trolly.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/trolly.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/trolly.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/trolly.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/trolly.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/trolly.wordpress.com/9/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trolly.wordpress.com&amp;blog=356883&amp;post=9&amp;subd=trolly&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trolly.wordpress.com/2006/11/22/pilotes-de-type-serveur-a-la-maniere-de-qnx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/62c546028fea49fed9be85cfe97be3a2?s=96&#38;d=identicon" medium="image">
			<media:title type="html">trolly</media:title>
		</media:content>
	</item>
		<item>
		<title>L&#8217;Assembleur Orienté Objet</title>
		<link>http://trolly.wordpress.com/2006/09/06/lassembleur-oriente-objet/</link>
		<comments>http://trolly.wordpress.com/2006/09/06/lassembleur-oriente-objet/#comments</comments>
		<pubDate>Wed, 06 Sep 2006 01:47:23 +0000</pubDate>
		<dc:creator>trolly</dc:creator>
				<category><![CDATA[Routines utiles]]></category>

		<guid isPermaLink="false">http://trolly.wordpress.com/2006/09/06/lassembleur-oriente-objet/</guid>
		<description><![CDATA[Vous vous demandez certainement ce que c&#8217;est cette histoire, de l&#8217;assembleur orienté objet. Ce principe permet de combiner les avantages du langage d&#8217;assemblage et des langages plus évolués (dit orienté objets) tels que le c++. Dans l&#8217;assembleur, il n&#8217;y a pas de variables; juste des pointeurs donnant l&#8217;adresse d&#8217;une zone présise d&#8217;une taille précise (exemple [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trolly.wordpress.com&amp;blog=356883&amp;post=8&amp;subd=trolly&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Vous vous demandez certainement ce que c&#8217;est cette histoire, de l&#8217;assembleur orienté objet.</p>
<p>Ce principe permet de combiner les avantages du langage d&#8217;assemblage et des langages plus évolués (dit orienté objets) tels que le c++.</p>
<p>Dans l&#8217;assembleur, il n&#8217;y a pas de variables; juste des pointeurs donnant l&#8217;adresse d&#8217;une zone présise d&#8217;une taille précise (exemple : texte db &#8216;ceci est un text&#8217;, dans ce cas, &#8220;texte&#8221; n&#8217;est pas une chaine de caractère, mais juste l&#8217;adresse de celle-ci)</p>
<p>avec fasm, il est possible de créer des structures contenant plusieurs données exemple:</p>
<p>struc mystructure<br />
{<br />
nombre1 dd 0<br />
nombre2 dd 0<br />
}</p>
<p>mais nous pouvons aussi lui attribuer des valleurs par paramètres; exemple:</p>
<p>struc mystruc2 val1,val2<br />
{<br />
nombre1  dd val1<br />
nombre2 dd val2<br />
}</p>
<p>ensuite il suffit de de créer des variables de ce &#8220;type&#8221;  :<br />
mavar1 mystruc<br />
mavar2 mystruc2 10,30</p>
<p>pour accéder aux valeurs nous utilisons, comme en C, les points:</p>
<p>mavar1.nombre1   =&gt; contient le doublemot  (dd) 0<br />
mavar1.nombre2   =&gt; contient le doublemot  (dd) 0</p>
<p>mavar2.nombre1   =&gt; contient le doublemot  (dd) 10<br />
mavar2.nombre2   =&gt; contient le doublemot  (dd) 30</p>
<p>Ce n&#8217;est pas tout.<br />
une structure permet aussi d&#8217;insérer du code comme par exemple</p>
<p>struc mastructure param1<br />
{<br />
val1 dd param1</p>
<p>fonction1:<br />
code de la fonction<br />
ret<br />
}</p>
<p>lorsque vous auré défini une variable de ce type:<br />
variable mastructure param1</p>
<p>vous pourez accéder à ses valeurs:<br />
variable.var1</p>
<p>ou a ses fonction:<br />
call variable.fonction1</p>
<p>nous avons ainsi défini les variables et les méthodes des objet, typiquement comme en orienté objet</p>
<p><a href="http://stephaneweg.cabspace.com/files/xinput.zip" title="xinput">xinput.zip</a></p>
<p>ce fichier montre comment créer une boite de texte et manipuler celle ci grace à une structure &#8220;textbox&#8221; contenant des variables , et les méthodes &#8220;draw&#8221; et &#8220;input&#8221; :</p>
<p>fichier:<br />
test.asm    =&gt; source principale<br />
input.inc     =&gt; définition de la structure<br />
meos.inc   =&gt; fonctions relatives à menuet (macro pour l&#8217;utilisation des syscalls)<br />
test   =&gt; fichier compilé</p>
<p>le programme se compile avec fasm</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/trolly.wordpress.com/8/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/trolly.wordpress.com/8/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trolly.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trolly.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/trolly.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/trolly.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/trolly.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/trolly.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/trolly.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/trolly.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/trolly.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/trolly.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/trolly.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/trolly.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/trolly.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/trolly.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trolly.wordpress.com&amp;blog=356883&amp;post=8&amp;subd=trolly&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trolly.wordpress.com/2006/09/06/lassembleur-oriente-objet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/62c546028fea49fed9be85cfe97be3a2?s=96&#38;d=identicon" medium="image">
			<media:title type="html">trolly</media:title>
		</media:content>
	</item>
		<item>
		<title>Projet: Cd d&#8217;installation de Kolibri( version hd avec grub)</title>
		<link>http://trolly.wordpress.com/2006/08/24/projet-cd-dinstallation-de-kolibri-version-hd-avec-grub/</link>
		<comments>http://trolly.wordpress.com/2006/08/24/projet-cd-dinstallation-de-kolibri-version-hd-avec-grub/#comments</comments>
		<pubDate>Thu, 24 Aug 2006 23:00:52 +0000</pubDate>
		<dc:creator>trolly</dc:creator>
				<category><![CDATA[Programmes]]></category>

		<guid isPermaLink="false">https://trolly.wordpress.com/2006/08/24/projet-cd-dinstallation-de-kolibri-version-hd-avec-grub/</guid>
		<description><![CDATA[Bon, je sais que ça a l&#8217;air un peut gros comme projet&#8230; mais je pense que c&#8217;est faisable. le but est simple: obtenir un cd bootable qui installe menuet os sur le disque dûr, avec un minimum d&#8217;intervention de l&#8217;utilisateur. Bien entendu l&#8217;instalation devra se faire &#8220;self-hosted&#8221; (depuis un système menuetos). Pour ça, il sufirait [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trolly.wordpress.com&amp;blog=356883&amp;post=7&amp;subd=trolly&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Bon, je sais que ça a l&#8217;air un peut gros comme projet&#8230;</p>
<p>mais je pense que c&#8217;est faisable.</p>
<p>le but est simple: obtenir un cd bootable qui installe menuet os sur le disque dûr, avec un minimum d&#8217;intervention de l&#8217;utilisateur.</p>
<p>Bien entendu l&#8217;instalation devra se faire &#8220;self-hosted&#8221; (depuis un système menuetos).</p>
<p>Pour ça, il sufirait de créer une disquette de boot, avec le système de base; et les fichiers à copier se trouvent sur le cdrom.</p>
<p>grâce à la fonction 70,on peux copier depuis un cdrom.</p>
<p>pour faire voici les étapes:</p>
<ul>
<li>- démarage du système</li>
<li>- lancement du programme d&#8217;instalation
<ul>
<li>détection des disques</li>
<li>détection du lecteur cdrom (soit par question à l&#8217;utilisateur, soit par lecture d&#8217;un fichier précis sur le cdrom)</li>
</ul>
</li>
<li>création des réperoitres de base: /HD0/1/KOLIBRI et /HD0/1/KOLIBRI/BOOT</li>
<li>copie des fichier systèmes:
<ul>
<li>/hd0/1/KOLIBRI/menuet.img;</li>
<li>/hd0/1/KOLIBRI/BOOT/STAGE1</li>
<li>/hd0/1/KOLIBRI/BOOT/STAGE2</li>
<li>/hd0/1/KOLIBRI/BOOT/MENU.LST</li>
<li>/hd0/1/KOLIBRI/BOOT/MTLDR</li>
<li>/hd0/1/KOLIBRI/BOOT/hdkernel.mnt</li>
</ul>
</li>
<li>puis on demande s&#8217;il faut installer des prog suplémentaires (comme les jeux, les app diverse et les sources, on crée les répertoires nécessaires, et on copie les fichiers)</li>
</ul>
<ul>
<li>on redémare le système (toujours avec le cdrom) et au boot on choisis dans le menu &#8220;install grub&#8221;,pour installer grub dans le mbr puis on peux redémarer sans le cd.</li>
</ul>
<p>Bien entendu, les fichiers peuvent être compressés pour gagner en place, et pour cela, il faudrai adapter l&#8217;algorythme de &#8220;mhc&#8221; pour l&#8217;usage de la fonction 70, et l&#8217;inclure dans le programme d&#8217;installation.</p>
<p>je vais essayer de faire un ptit cd d&#8217;installation, et vous en dirai des nouvelles (dès qu&#8217;il est fini, j&#8217;ajoute le lien qu&#8217;il faut, et j&#8217;averti la comunauté de kolibri dans les forums.</p>
<p><span id="more-7"></span></p>
<p>Le premier cd-d&#8217;installation est prêt.</p>
<p>L&#8217;installation se déroule comme suit:</p>
<ul>
<li>vous démarrerz le pc depuis le cdrom</li>
<li>dans le menu de grub vous chosisez &#8220;kolibri installation system&#8221;</li>
<li>le système se charge, et deux boutons apparaissent</li>
<li>cliquez sur  le premier bouton &#8220;installer le systeme&#8221;
<ul>
<li>le programme d&#8217;installation crée les répertoires</li>
<li>puis il copie les fichiers</li>
<li>enfin, vous pouvez quiter le systeme</li>
</ul>
</li>
<li>redémarrez à nouveau depuis le cd-d&#8217;installation</li>
<li>et choisissez la deuxième option du menu de grub &#8220;finalize installation&#8221;</li>
<li>le système est prêt à l&#8217;emploi,vous pouvez retirrer le cdrom</li>
</ul>
<p>le programme d&#8217;installation est modulaires, on lance d&#8217;abord le premier module  qui va lancer le suivant avant de se terminer et ainsi de suite</p>
<p>pour la création des répertoires, le programme se base sur une liste contenant des pointeurs vers les nom de répertoires à créer, une boucle est utilisée pour lire les donées et créer les répertoires avec la fonction 70.9 de kolibri</p>
<p>pour la copie des fichier, c&#8217;est un peu pareil, à différence qu&#8217;il ya les nom des fichier sources (/cdx/1/&#8230;) et les nom de fichier destination (/hd0/1/&#8230; ). le programme détecte d&#8217;abord où se trouve le lecteur cdrom, et à chaque tour de boucle, il remplace le x de &#8220;/cdx&#8221; par le chiffre correspondant (0 1 2 ou 3), puis copie les fichier:</p>
<ol>
<li>lectures des info pour connaitre la taille</li>
<li>allocation de la mémoire</li>
<li>lecture du fichier</li>
<li>écriture</li>
</ol>
<p>c&#8217;est assez simple mais efficace. le problème majeur étant que les programmes sont grossis par la liste. on pourais utiliser un autre moyen qui serai d&#8217;utiliser la fonction 70 pour lire le répertoire de source et copier tout les fichier contenus vers le répertoire de destination.</p>
<p>j&#8217;ai publié deux versions:</p>
<ul>
<li>la <a href="http://stephaneweg.cabspace.com/files./k-light.7z">version light</a> qui ne contient que le système de démarrage, les binaires, les fichiers de confi, les librairies nécessaires aux binaires, et d&#8217;autres choses plus ou moin importantes.</li>
<li><a href="http://stephaneweg.cabspace.com/files./k-full.7z">La version complète</a> qui contient la meme chose que la version light + les sources de toutes les applications et du noyau, la documentations et des utilitaires suplémentaires</li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/trolly.wordpress.com/7/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/trolly.wordpress.com/7/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trolly.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trolly.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/trolly.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/trolly.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/trolly.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/trolly.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/trolly.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/trolly.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/trolly.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/trolly.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/trolly.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/trolly.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/trolly.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/trolly.wordpress.com/7/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trolly.wordpress.com&amp;blog=356883&amp;post=7&amp;subd=trolly&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trolly.wordpress.com/2006/08/24/projet-cd-dinstallation-de-kolibri-version-hd-avec-grub/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/62c546028fea49fed9be85cfe97be3a2?s=96&#38;d=identicon" medium="image">
			<media:title type="html">trolly</media:title>
		</media:content>
	</item>
		<item>
		<title>Comment copier un fichier avec la fonction 70 de kolibri</title>
		<link>http://trolly.wordpress.com/2006/08/16/comment-copier-un-fichier/</link>
		<comments>http://trolly.wordpress.com/2006/08/16/comment-copier-un-fichier/#comments</comments>
		<pubDate>Wed, 16 Aug 2006 06:07:03 +0000</pubDate>
		<dc:creator>trolly</dc:creator>
				<category><![CDATA[Routines utiles]]></category>

		<guid isPermaLink="false">https://trolly.wordpress.com/2006/08/16/comment-copier-un-fichier/</guid>
		<description><![CDATA[0) On a comme variables: src db &#8216;/chemin/vers/le/fichier_source.ext&#8217;,0 dst db &#8216;/chemin/vers/le/fichier_destination.ext&#8217;,0 note: le chemin doit correspondre à la nouvelle norme de kolibri: /hdx/y/ /cdx/y/ /fd/y /rd/Y x étant le disque(de 0 à 3) et y la partition (à partir de 1) fileinfo: .subfunct    dd 0&#215;0 ; numero de la fonction .position     dd 0&#215;0 ; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trolly.wordpress.com&amp;blog=356883&amp;post=6&amp;subd=trolly&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><b>0) On a comme variables:</b></p>
<blockquote><p>src db &#8216;/chemin/vers/le/fichier_source.ext&#8217;,0<br />
dst db &#8216;/chemin/vers/le/fichier_destination.ext&#8217;,0</p></blockquote>
<blockquote><p>note: le chemin doit correspondre à la nouvelle norme de kolibri:</p>
<p>/hdx/y/<br />
/cdx/y/<br />
/fd/y<br />
/rd/Y</p>
<p>x étant le disque(de 0 à 3) et y la partition (à partir de 1)<br />
fileinfo:</p>
<blockquote><p>.subfunct    dd   0&#215;0         ; numero de la fonction<br />
.position      dd   0&#215;0          ; debut à lire<br />
.reserved    dd   0&#215;0          ; reserve<br />
.bytes        dd   0&#215;0         ; taille à lire<br />
.buffer           dd   0&#215;0          ; les données seron écrite ici<br />
.blank         db   0              ; resté vide<br />
.ptr_path    dd   0&#215;0          ; adresse du fichier</p></blockquote>
<p>dbid:</p>
<blockquote><p>.attribut      dd 0&#215;0<br />
.datatype    db 0<br />
.reserved    db 0,0,0<br />
.creatime    db 0,0,0,0<br />
.creadate    db 0,0,0,0<br />
.accestim    db 0,0,0,0<br />
.accesdat    db 0,0,0,0<br />
.modiftim     db 0,0,0,0<br />
.modifdat     db 0,0,0,0<br />
.filesize      db 0&#215;0,0&#215;0</p></blockquote>
</blockquote>
<p><b>1) obenir les info du fichier source par la fonction 70 ,5</b></p>
<blockquote><p>mov [fileinfo.subfunct],0&#215;5      ; on spécifie la subfonction 5<br />
mov [fileinfo.buffer],dbid       ; on indique où les info son écrites<br />
mov [fileinfo.ptr_path],src      ; l&#8217;adresse vers le nom du fichier</p>
<p>mov eax,70<br />
mov ebx,fileinfo<br />
int 0&#215;40</p></blockquote>
<p><b>       les info son enrgistré dans la structure spécifiée (dbid)</b></p>
<p><b>2) On applique les info pour charger le fichier </b></p>
<blockquote><p>mov [fileinfo.subfunct],0&#215;0        ; on spécifie la subfonction 0 (charger un fichier)<br />
mov eax,dword [dbid+32]<br />
mov [fileinfo.bytes],eax            ; on spécifie la taille à lire<br />
mov [fileinfo.buffer],0&#215;20000      ; on charge le fichier à cette adresse<br />
mov [fileinfo.ptr_path],src        ; l&#8217;adresse vers le nom du fichier a charger</p>
<p>mov eax,70<br />
mov ebx,fileinfo<br />
int 0&#215;40</p></blockquote>
<p><b>D) il ne reste plus qu&#8217;à écrire le nouveau fichier</b></p>
<blockquote><p>mov [fileinfo.subfunct],0&#215;2        ; on spécifie la subfonction 2 (ecrire un fichier)<br />
mov [fileinfo.ptr_path],dst        ; l&#8217;adresse vers le nom du fichier a ecrire</p>
<p>mov eax,70<br />
mov ebx,fileinfo<br />
int 0&#215;40</p></blockquote>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/trolly.wordpress.com/6/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/trolly.wordpress.com/6/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trolly.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trolly.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/trolly.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/trolly.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/trolly.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/trolly.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/trolly.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/trolly.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/trolly.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/trolly.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/trolly.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/trolly.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/trolly.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/trolly.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trolly.wordpress.com&amp;blog=356883&amp;post=6&amp;subd=trolly&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trolly.wordpress.com/2006/08/16/comment-copier-un-fichier/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/62c546028fea49fed9be85cfe97be3a2?s=96&#38;d=identicon" medium="image">
			<media:title type="html">trolly</media:title>
		</media:content>
	</item>
		<item>
		<title>Menuet Dynamic Library</title>
		<link>http://trolly.wordpress.com/2006/08/15/menuet-dynamic-library/</link>
		<comments>http://trolly.wordpress.com/2006/08/15/menuet-dynamic-library/#comments</comments>
		<pubDate>Tue, 15 Aug 2006 08:18:48 +0000</pubDate>
		<dc:creator>trolly</dc:creator>
				<category><![CDATA[Pilotes, Serveurs et modules]]></category>

		<guid isPermaLink="false">https://trolly.wordpress.com/2006/08/15/menuet-dynamic-library/</guid>
		<description><![CDATA[J&#8217;ai peu-être trouvé la solution pour implémenter la dernière possibilité à propos des pilotes!!! J&#8217;ai réussi à coder un programme qui au démarage charge un fichier binaire: dans ce fichier il ya l&#8217;adresse à laquelle le fichier doit être chargé l&#8217;adresse des différentes fonctions. cette démo démontre comment exécuter le code d&#8217;un fichier chargé dynamiquement [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trolly.wordpress.com&amp;blog=356883&amp;post=5&amp;subd=trolly&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai peu-être trouvé la solution pour implémenter la dernière possibilité à propos des pilotes!!!</p>
<p>J&#8217;ai réussi à coder un programme qui au démarage charge un fichier binaire:</p>
<p>dans ce fichier il ya</p>
<p>l&#8217;adresse à laquelle le fichier doit être chargé<br />
l&#8217;adresse des différentes fonctions.</p>
<p>cette démo démontre comment exécuter le code d&#8217;un fichier chargé dynamiquement , et je pense qu&#8217;il serai facile de faire pareil pour les pilotes qui seraient chargé par les programes qui en ont besoins.</p>
<p>le code de la librairie se présente finalement come suit:</p>
<p>org adresse_de_reference<br />
dd  adresse_ou_la_librairie_doit_etre charge<br />
dd  adresse_de_la_fonction1<br />
dd  adresse_de_la_fonction2<br />
dd  adresse_de_la_fonction3<br />
&#8230;<br />
fonction1:<br />
code<br />
ret</p>
<p>fonction2:<br />
code<br />
ret.</p>
<p>et ainsi de suite pour les autres fonctions.</p>
<p>le programme charge la librairie (macro mdl_load) ainsi:<br />
il charge les 4 premiers octets (qui contienent l&#8217;adresse où elle doitêtre placée)<br />
il enregistre la taille du fichier<br />
il enregistre l&#8217;adresse de chargement<br />
il charge la totalite du fichier au bon emplacement</p>
<p>pour lancer une fonction (macro mdl_call) :<br />
on spécifie l&#8217;adresse de la variable contenant l&#8217;adresse (adresse de structure+12)<br />
on specifie le numero de la fonction<br />
il verifie que le numero est superieur à Zero</p>
<p>il calcule l&#8217;adresse de la fonction:<br />
adresse_librairie_+(numero_fonction*4)<br />
il fait un call vers l&#8217;adresse &#8220;call [adresse]&#8220;</p>
<p><a href="http://stephaneweg.cabspace.com/files/mdl2.zip" title="MDL2.ZIP" target="_blank">MDL.ZIP</a></p>
<p>je vous donne les sources à analyser , le fichier zip contient:<br />
test.asm (code du programme principal)<br />
mdl.inc   (code relatif au système de librairie dynamique)<br />
mdl.asm (code de la librairie d&#8217;expérimentation)<br />
&#8212;<br />
test         binaire  du programme<br />
mdl.mdl   binaire de la librairie</p>
<p>nouvelle version avec utilisation de la fonction 70:<br />
<a href="http://stephaneweg.cabspace.com/files/mdl3.zip" title="mdl3.zip">mdl3.zip</a></p>
<p>Dernière version, plus utile et plus aboutie. Dans cette version on passe les paramètres dans la pile et on fait le cal. La fonction dans le module lis les paramètres, effectures les opérations et renvoie la valeur de retour en la mettant dans la  pile (c&#8217;est comme ça que C le fait de toute manière).<br />
Pour cette version, j&#8217;ai voulu créer une bibliothèque vraiment utile pour le programmeur alors j&#8217;ai choisi d&#8217;implémenter  les fonctions ipc de menuet de manière simplifiée. Les Fonctions implémentées sont:</p>
<ul>
<li>dword IPC_get_proc_pid (char* proc_name);</li>
<li>dword IPC_send(dword pid, char* message, dword msglen);</li>
<li>void IPC_init();</li>
<li>ipc-msg* IPC_receive();</li>
</ul>
<ul>
<li>IPC_get_proc_pid va renvoier le pid du programme spécifié</li>
<li>IPC_send va envoyer au programme identifié par pid , le message qui a une longueur de msglen)</li>
<li>IPC_init va initialiser la zone de réception des messages (limité à un seul message, réinitialisé à chaque réception)</li>
<li>IPC_receive va renvoyer l&#8217;adresse de la structure contenant le message:</li>
</ul>
<blockquote>
<ul>
<li>+0 dword msg.pid</li>
<li>+4 dword msg.len</li>
<li>+8 db  msg.data</li>
</ul>
</blockquote>
<p><a href="http://stephaneweg.cabspace.com/files/ipc2.zip" title="ipc2.zip">ipc2.zip</a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/trolly.wordpress.com/5/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/trolly.wordpress.com/5/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trolly.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trolly.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/trolly.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/trolly.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/trolly.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/trolly.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/trolly.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/trolly.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/trolly.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/trolly.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/trolly.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/trolly.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/trolly.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/trolly.wordpress.com/5/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trolly.wordpress.com&amp;blog=356883&amp;post=5&amp;subd=trolly&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trolly.wordpress.com/2006/08/15/menuet-dynamic-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/62c546028fea49fed9be85cfe97be3a2?s=96&#38;d=identicon" medium="image">
			<media:title type="html">trolly</media:title>
		</media:content>
	</item>
		<item>
		<title>Une suggestion pour des pilotes</title>
		<link>http://trolly.wordpress.com/2006/08/15/une-suggestion-pour-des-pilotes/</link>
		<comments>http://trolly.wordpress.com/2006/08/15/une-suggestion-pour-des-pilotes/#comments</comments>
		<pubDate>Tue, 15 Aug 2006 00:47:09 +0000</pubDate>
		<dc:creator>trolly</dc:creator>
				<category><![CDATA[Pilotes, Serveurs et modules]]></category>

		<guid isPermaLink="false">https://trolly.wordpress.com/2006/08/15/une-suggestion-pour-des-pilotes/</guid>
		<description><![CDATA[Ce qui m&#8217;enuie beaucoup dans MenuetOS, c&#8217;est que ma carte son n&#8217;est pas supportée!! C&#8217;est pourtant une AC97. Et j&#8217;imagine que ce n&#8217;est pas la seule carte non supportée (en fait, seul les sound-blaster et comptabiles fonctionnent). La solution à mon problème serait d&#8217;écrire un pilote pour celle-ci. Mais je ne sais pas vraiment comment [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trolly.wordpress.com&amp;blog=356883&amp;post=4&amp;subd=trolly&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ce qui m&#8217;enuie beaucoup dans MenuetOS, c&#8217;est que ma carte son n&#8217;est pas supportée!! C&#8217;est pourtant une AC97.  Et j&#8217;imagine que ce n&#8217;est pas la seule carte non supportée (en fait, seul les sound-blaster et comptabiles fonctionnent).</p>
<p>La solution à mon problème serait d&#8217;écrire un pilote pour celle-ci. Mais je ne sais pas vraiment comment je pourai l&#8217;implémenter dans menuet.</p>
<p>J&#8217;avais tout d&#8217;abord penssé à ajouter un .h dans les sources du noyaux, ajouter des syscalls et programmer des applications pour l&#8217;utiliser (ou bien passer par les syscalls de la sb16 et coder une fonction de détection).<br />
C&#8217;est bien beau tout ça, mais si on devait implémenter tout les pilotes audio de cette manière, le noyau n&#8217;en finirai pas de grossir. Alors que j&#8217;ai pas besoin des autres pilotes.<br />
Vous me direz:&#8221;Mouai t&#8217;as qu&#8217;à supprimer les pilotes dont t&#8217;as pas besoin&#8221;. d&#8217;accord, mais le comun des mortels, il ne sait pas comment faire ça, on va pas leur obliger de recompiler leur noyau hein.</p>
<p>Ya une autre solution, des modules qu&#8217;on charge si on en a besoin. Ouai, c pas mal comme idée, le hic, c&#8217;est qu&#8217;il faut implémenter un système de &#8220;modèles de pilotes&#8221; qui définirai tout, et pour finir, on dit adieux à une des principales qualitées de MenuetOS qui est la suppression d&#8217;un maximum d&#8217;interface (layer) qui finissent par provoquer des bugs dans le système.</p>
<p>Alors, j&#8217;ai un peu pioché sur le net (merci google), et j&#8217;ai trouvé deux solution viables.</p>
<p>La première est, comme dans les système à micro noyaux (qns, minix, gnu/hurd), que le pilote serai une sorte de serveur. Entendez par là que ce serai un programme comme un autre, à qui  le client (lecteur audio par exemple) enverai des rêquetes, et de qui il reçevrai des réponses. Ce procédé est réalisable par ces manières:<br />
1) La communication inter-processus (ipc)<br />
2) la pile tcp-ip(socket)<br />
3) Implémenter un système de fichier virtuels pour les périfériques (genre /dev)<br />
4) écrire les entrées-sortires dans des fichiers sur le système de fichier</p>
<p>encore faudrait-il que le programme sache avec quel pilote communiquer (j&#8217;imagine qu&#8217;une sorte d&#8217;hal en mode utilisateur pourai être possible)</p>
<p>la deuxième solution (ma préférée), comme dans les exo-noyaux, est , me semble-t-il, la plus facile à réaliser. Elle consiste, à coder un pilote de cette manière:</p>
<p>; on comence par l&#8217;en-tête qui contien une table avec l&#8217;adresse d&#8217;entrée de chaque fonction</p>
<p>dd fonction1<br />
dd fonction2<br />
dd fonction3</p>
<p>;on écrit ensuite les fonctions<br />
fonction1:<br />
routines de la fonction<br />
routines de la fonction<br />
ret<br />
&#8230; (idem pour les autres fonctions).</p>
<p>ensuite on le compile et on a notre pilote en mode utilisateur. En effet, MenuetOS permet au périfériques de réserver des irq, et ainsi de piloter des périfériques tels que la carte audio.</p>
<p>dans notre programme on chargera le pilote comme un fichier, à une adresse connue (dans l&#8217;espace du processus), par la fonction 58:</p>
<p>mov eax,58<br />
mov ebx,drvinfo<br />
int 0&#215;40</p>
<p>drvinfo corespond à l&#8217;adresse des paramètres de la fonction, qui donne:</p>
<p>drvinfo:<br />
.mode   dd 8                    ;en lecture lba(pour accéder au disque dûr si le pilote y est)<br />
.block    dd 0&#215;0              ;nombre de block à lire (0 correspondant à l&#8217;entièreté du fichier)<br />
.set          dd 0&#215;1              ;on doit toujours metre à 1 pour ce mode<br />
.data      dd 0&#215;20000   ;ce qui nous intéresse particulièrement, l&#8217;adresse de chargement  des données<br />
.workarea dd 0&#215;100000 ;espace nécessaire pour l&#8217;os<br />
.path  db &#8216;/hd/1/menuetos/drv/sound.drv&#8217;,0  ;chemin complet du fichier</p>
<p>une fois le fichier chargé, on peux allors accéder aux fonctions du pilotes, les adresses étant dans l&#8217;en-tête du fichier:<br />
[addr_fonction1]=[drvinfo.data +0]<br />
[addr_fonction2]=[drvinfo.data +4]<br />
[addr_fonction3]=[drvinfo.data +8]</p>
<p>et pour appeler une fonction on fait simplement:</p>
<p>call [addr_fonction1]   ;ce qui appelle la fonction1<br />
ou<br />
call [drvinfo.data+0] :ce qui appelle la fonction1 (pour la fonction2 on met +4,etc&#8230;)</p>
<p>Je pense que mon brainstorming a déjà pas mal commencé, mais je vais encore y réfléchir et vous donner des nouvelles de mon avancement.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/trolly.wordpress.com/4/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/trolly.wordpress.com/4/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trolly.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trolly.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/trolly.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/trolly.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/trolly.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/trolly.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/trolly.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/trolly.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/trolly.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/trolly.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/trolly.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/trolly.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/trolly.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/trolly.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trolly.wordpress.com&amp;blog=356883&amp;post=4&amp;subd=trolly&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trolly.wordpress.com/2006/08/15/une-suggestion-pour-des-pilotes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/62c546028fea49fed9be85cfe97be3a2?s=96&#38;d=identicon" medium="image">
			<media:title type="html">trolly</media:title>
		</media:content>
	</item>
	</channel>
</rss>
