Apr 292009
 

Bonsoir,

Alors oui ca ne sert pas a grand chose, mais on peut asser facilement afficher des particules de manière fluide et portable.

Pour divers raison les sources de la lib ne sont pas disponible, mais vous pouvez librement l' utiliser pour vous faire plaisir ou développer un quelconque projet. Je n' offre toute fois aucune garanties.

Plus que des mots, un exemple basique d' utilisation : http://zenol.fr/trac/dev/browser/termcap_lib

Particles with termcap_lib

Particles with termcap_lib

Les sources sont maintenant disponible a http://zenol.fr/trac/dev/browser/termcap_lib/lib/src

Apr 202009
 

Bonjour,

Depuis hier, KoS dispose enfin d' une gestion precaire des interuptions. Dans cette article je vais donc... parler des interuptions! Et histoire de ne perdre personne, je decrirais d' abord le fonctionement de la GDT.

1 : Physique ou Virtuelle

Si vous avez deja fait un peu d' assembleur, vous devriez savoir qu' un programme, une fois en memoire, est diviser en plusieures segments :

  • Segment de code
  • Segment de donne
  • Stack

Pour acceder a ces diferents segment, on dispose des Selecteurs de Segment. Ce sont des registre qui indiquent ou se situent les donnes.

Ainsi, pour acceder a l' octet numero 0x3 du segment de code, on peut ecrire cs::0x03.
Quand le processeur demare, il est en mode reele. C' est a dire que les sélecteurs de segment représentent une adresse physique.
(0x73 représente l' adresse mémoire 0x730)

Ce n' est pas vraiment super, tout le monde a accer a tout et n' importe quoi, et en plus les registres sont limiter a 16bits...

Pour regler ce problemme, il existe le mode protege, ou le processeur est en 32Bits et ou les selecteurs corespondent a un maillon de la GDT(J' y viendrais dans quelques lignes).

Dans le mode proteger, la valeur des selecteurs corespond a l' offset(Decalage par raport a l'origine) de l' element dans la GDT(Global Descriptor Table). Pour acedder au premier selecteur de la GDT, on place donc 0x0 dans un selecteur de segment. Pour le second, 0x8 (Chaque maillon est sur 64bits), et ainsi de suite.

2: Les interuptions

Une interuption, c' est (dixit wikipedia) "un arrêt temporaire de l'exécution normale d'un programme informatique par le microprocesseur".

Les interuptions sont de deux type : materiel ou logiciel.

Une interuption materiel est typiquement l' apuis sur une touche du clavier.
Une interruption logiciel peut être l' apelle a un syscall (un apelle a write sous unix)

Pour associer une fonction(le sens informatique du terme) a chaque interuption, il existe l' IDT(Interrupt Descriptor Table).

Chaque element de l' IDT contien :

  • Un selecteur, qui corespond aux elements de la GDT
  • Un offset (pointeur sur fonction)
  • Des bits qui specifi le TYPE du maillon

3 : IRQs

Et non, ce n' est pas terminer. C' est bien beau de configurer la GDT et l' IDT, mais encore faut'il configurer le chipset qui s' ocupe de prevenir le processeur quand une interuption materiel a lieu.
Pour resumer, ce composent envoi une requette (IRQ=Interuption ReQuest) au processeur quand un evenement a lieu.
En plus, il n' est pas un, mais ils sont deux, en cascade (Un esclave et un maitre).

Une fois le tout configurer, on reactive les interuptions et... On cherche pourquoi ca n' a pas fonctioner :)

Apr 192009
 

Sur un coup de tête, je me suis motivé a faire du C#, du directX, et d’implémenter deux forces, l’une similaire au magnétisme (1/r^2) et l’autre aux forces atomiques (r^2). Un coefficient est associé à chaque objet et peut être positif (attraction) ou négatif (répulsion). Toutefois les objets dotés d’une force sont fixes et ne sont pas affectés par les autres forces. (Cela fera bientôt un an que je n’ais pas fait de physique alors je voulais quelque chose de simple).

En plus, petit avantage, la masse des objets déplaçables n’intervient pas dans les calculs (a*m_obj = Sigma(m_obj * m_magnet * u) -> simplification)

Le fonctionnement est trivial :

Pour chaque objet simple, on somme tout les vecteurs accélérations générés par les objets dotés d’une force, et on le somme a la vitesse pour en déduire le nouveau vecteur vitesse.

Quelques images :

Magnet Engine 3Magnet Engine 1Magnet Engine 2

Les sources (Oui je n'ai pas activer les Stencil, mais on ne vas pas en mourir) :

http://zenol.fr/trac/dev/ -> MagnetMotor.

Apr 192009
 

Bonjour,

Aujourd'hui j' ai souhaité faire quelques recherches sur les design pattern pour rafraichir mes brèves connaissances sur le sujet, et j' ai trouver un site bien sympathique qui récapitule les design de base :

Voici un petit résumer du contenus :

  • Factory
    -> Ensemble de méthodes implémentant la création d'objets
  • Adapter
    -> Créer une interface a un objet (Ex : Adapter les fonctions membres d'un objet a une norme)
  • Singleton
    -> Force une classe a n'avoir qu'une unique instance.
  • Builder
    -> Simplifie la création d'un objet (initCanvas, addPoint, addLine...)
  • Proxy
    -> Permet de manipuler un objet quelconque en manipulant une instance de Proxy. (Pour en capsuler la serialisation dans RMI[Remote Methode Invocation])
  • Composite
    -> Permet de traiter une composition d'éléments comme un élément.
  • Iterator
    -> Un objet qui permet de parcourir un ensemble d'éléments.
  • Template
    -> Un patron qui définis un jeu de traitement utiliser par les classes filles. (A ne pas confondre avec les templates C++)

Voila qui permet de donner a nom a certaines implémentation qui vienne d'elle même, et surement de mieux structurer ses projets a l'avenir.

Pour des implémentations en C++ qui éclaircissent quelques détailles : http://come-david.developpez.com/tutoriels/dps/

 Posted by at 1:23 am