=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Le Core War Tun!Z2000 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= CCCCCCC OOOOOOO RRRRRR EEEEEEE C O O R R E C O O R R E C O O RRRRRR EEEEE C O O R R E C O O R R E CCCCCCC OOOOOOO R R EEEEEEE W W W W A RRRRRR W W W W AA R R W W W W A A R R W WW W A A RRRRRR W WW W AAAAA R R WW WW A A R R W W A A R R ______________________________ [Auteur: Tun!Z 2000 | [Contact: Tuniz2000@yahoo.com| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Introduction : Au début de l'ère des microordinateurs, un etudiant riquain trouva intelligent de faire un programme qui se duplique dans la mémoire du système sur lequel il tourne, sans rien faire d'autre, ce n'était pas un virus. Et puis un autre étudiant est venu avec un autre programme qui lui ne servait qu'a détruire le processus du premier programme. A la fin, le deuxieme avait gagné. Ces deux étudiants auraient inventé le CoreWar. Auraient, parceque cette histoire n'est pas officielle, une légende quoi, comme l'histoire de la pomme de Newton qui aurait été inventée par Newton pour expliciter sa théorie. Bon le but du CoreWar est de créer un soldat qui serait plus fort que celui de l'adversaire. C'est des soldats-robots qui remplsissent la memoire systeme, pas des soldats avec graphisme 3D polygonal au moteur Voxel etc, etc... Les premiers CoreWarriors écrivaient leur soldats en assembleur donc il s'agit en fait d'execution d'instruction. Seuleument, utiliser la vraie mémoire système entrainait des problemes sur l'odrinateur Hôte. Alors des types ont eu l'idée de synthétiser une arène virtuelle représentée par une grille qui représente une émulation d'un microprocesseur et de sa mémoire, et on créé un nouveau langage, moins complet mais plus simple que l'assembleur, le RedCode. Le RedCode Malgré quelques ajouts de certains programmeurs, le RedCode officiel est constitué des fonctions suivantes : * DAT argument Il s'agit d'une instruction non executable. Si un soldat tente de l'executer, il a perdu. Si une case memoire comporte l'instruction DAT argument, alors toute réference à cette case est référée à l'argument, qui peut etre une variable par exemple. * MOV argument1 argument2 Cette instruction recopie le contenu de la case memoire argument1 ou le nombre argument1 sur la case memoire argument2. * JMP argument Cela permet de sauter directement à la case memoire argument. * JMZ argument1 argument2 Si on a argument2 ou le contenu de la case argument2 nul, alors on saute à la case argument1. * JMG argument1 argument2 Si on a argument2 ou le contenu de la case argument2 positif, alors on saute à la case argument1. * ADD argument1 argument2 Ajoute la valeur de argument1 ou de la case argument1 à la valeur de argument2 ou de la case argument2. * SUB argument1 argument2 L'inverse: on soustrait la valeur de argument1 ou de la case argument1 à la valeur de argument2 ou de la case argument2. * DJZ argument1 argument2 Enlève 1 à la valeur de argument2 ou de la case argument2, et saute à la case argument1 si le nouvel argument2 est nul. * CMP argument1 argument2 Compare les valeurs des deux arguments ou de leurs cases memoire respectives, et saute l'instruction qui suit s'ils sont differents. Certains programmeurs ajoutent à cela des fonctions comme Fork ou Kill, pour se dupliquer ou tuer un processus, mais ces commandes ne sont pas officielles. L'argument se compose d'un indice d'adressage et d'un nombre: #X signifie la valeur X, et pas la case memoire (adressage immediat) X sans aucun symbole signifie X cases memoires avant ou apres celle ou se situe l'instruction (adressage relatif) @X signifie la valeur de l'argument de la Xième case avant ou après celle-ci, cette case doit forcemment contenir une instruction de type DAT (adressage relatif indirect) Un soldat se charge dans la pseudo-mémoire. Il éxécute son instruction, puis saute à la case d'après (sauf si l'instruction est un saut, dans ce cas il ne va pas à la case suivante mais à la case indiquée par le saut). Là ilattend un moment que le profgrammme adverse execute un instruction puis il execute lui aussi un instruction, et ainsi a tour de rôle jusqu'à la mort de l'un des deux. Pour tuer l'adversaire, il faut le balancer sur un DAT pour qu'il perde la partie au moment de jouer. Ce n'est pas simple car les soldats balayent tout sur leur passage avant de s'installer. Je sais ca parait un peu abstrait mais je vais expliquer par l'exemple. Commencez par telecharger un emulateur de CoreWar, personnellement j'aime bien l'environnement de developpement CoreWar de Michel Casabianca, parcequ'il est en Java, donc ca marche partout, mais il y en a d'autres. Voici le programme soldat le plus simple: le rouleau compresseur ou IMP. Code source: MOV 0 1 Le programme se lance. Il execute son instruction qui est de copier le contenu de la case actuelle (c'est à dire MOV 0 1 ) sur la suivante puis passe à la suivante, où il éxécutera la même instruction puis encore la case suivante, où il réexecutera la meme chose etc etc... Le rouleau compresseur fais donc le menage sur la case suivante, laisse son adversaire jouer, ppuis passe à la case suivante et fait le menage sur la case qui suit, ... Ce programme quoique simple est très efficace pour s'entrainer à la preogrammation. Un exercice est la programmation d'un soldat anti IMP Exemple de solution (très connue donc pas de moi): Le RADAR. Code source : ***PHASE 1*** mov #1 -100 add #19 14 mov #0 @13 cmp #1 -103 jmp -3 ***PHASE 2*** mov @11 @12 cmp #1 10 jmp 4 add #1 8 add #1 8 jmp -5 mov #-16 -129 mov #-16 -129 mov #-150 -129 JMP -147 dat -16 dat -16 dat -150 Analyse : le Radar commence par mov #1 -100, c'est à dire que la centième case avant celle-ci est devenue DAT 1, cette case est un "piège". Ensuite il ajoute 19 à la valeur de la 14ème case après celle de l'instruction, c'est à dire que le DAT -16 devient DAT 3, puis il met la valeur 0 (donc DAT 0) sur la case indiquée par la valeur de la case précédement modifiée (l'ex DAT -16). Ensuite il verf=ifie que le "piège" n'a pas bougé puis il recommence à la ligne add #19 14 (c'est un système de boucle). Dès qu'un IMP est trop près, la case piégée est modifiée, le Radar entre en phase 2. Durant celle-ci, il met en place une copie du programme dans la memoire, cette copie est placée un peu au dessus de la position de l'ex-case piégée. Une fois la copie terminée, il saute directement sur la copie et reprend son activité. En clais, le Radar guette l'arrivée de l'IMP. Tant qu'il ne s'approche pas, le Radar bombarde la mémoire en espérant tomber par hasard sur la case de l'IMP, probabilité faible. Dès que l'IMP est trop près, le Radar se met ailleurs et recommence son bombardement. Le problème, c'est qu'en bombardant tout à tord et à travers, le Radar, finit par se toucher li même et à s'auto-détruire. Cette solution est efficace de temps en temps, mais pas à 100%, contrairement au soldat que voici : Deuxième solution : l'AntIMP Source jmp 2 jmp 23 mov -1 -3 mov -2 -5 mov -3 -7 mov -4 -9 mov -5 -11 mov -6 -13 mov -7 -15 mov -8 -17 mov -9 -19 mov -10 -21 jmp -10 Le programme ne fait rien d'autre que de pieger les 10 cases qui sont avant. S'il est probable, qu'il echappe aux deux premières, il est statistiquement peu probable que l'IMP depasse la quatrième, et mathématiquement impossible qu'il echappe aux six premieres cases. Dès qu'il tombe sur une case piégée, l'IMP saute de 23 cases, là où l'attend une commande DAT, et hop il a perdu. Il existe d'autres soldats, mais le mieux est de les programmer soi même, ce n'est pas si dur si on suit un plan ordonné, et si on connait un peu l'assembleur. Ensuite faites donc des concours avec vos amis pour voir qui survit, ou cherchez donc à faire un soldat qui détruise un soldat spécifique (comme l'AntIMP). Mais n'oubliez pas, plus votre soldat est complet et comporte d'instructions, plus il est lent par rapport au programme adverse. Le soldat parfait n'existe pas. Bon j'espere que cet article vous aura décidé de vous mettre au sport du CoreWar. J'ai essayé d'être le plus clair possible mais c'est vraiment pas simple, ni de comprendre, ni d'expliquer. Envoyez moi les sources vos créations (par e-mail, ou alors je suis souvent sur l'IRC neoserv), je fais la collection de soldats, et puis j'essayerai de faire un soldat qui détruise le votre. Ahalala quel bon jeu. (Nd Ad-Tonnou ---> 'sont fous ces ricains...) Tun!Z 2000