Jump to content
Jagware

RaZ

Root Admin
  • Content count

    402
  • Joined

  • Last visited

Everything posted by RaZ

  1. Equipe De Développment, Recrutement

    Level design, beta test, critiques acerbes et insultes gratuites, je suis dispo
  2. Jagware Webkit

    Voici en passant le webkit Jagware, composé de logos de différentes couleurs, de l'oeil et de l'icone. Téléchargeable séparement via les images ci dessous ou en pack complet dans le zip. Ce sont des PNG 24 bits avec transparence, ils ne sont pas forcement prévu pour l'affichage direct dans des sites web (Internet Explorer ne gère pas encore la transparence des images 24 bits) mais ces images sont exploitables dans tout logiciel de retouche et/ou de conversion d'images. favicon.ico webkit.zip
  3. Jagware Webkit

    J'avais laissé un antialiasing, me disant que personne ne jugerait utile d'afficher le logo blanc sur un fond blanc. L'antialiasing aurait donc fait directement son office (étant donné qu'un logo est quasi exclusivement affiché sur un fond plus foncé que sa couleur principal) pour éviter les logos crasseux. Mais libre aux un et aux autres d'utiliser la version qui leurs convient. D'autant plus qu'une demande spécifique est toujours possible, cela ne coute qu'un post ici même ou un mail.
  4. Atomix, Jag Version

    C'est Shadow of the Colossus qui est tout simplement trop captivant. Mais la news est validé et déplacé au bon endroit, un jeu, c'est du software.
  5. Alors voilà, je suis un fainéant cyclique, ou un bosseur parcellaire. J'ai des périodes, des flashs. Entre les deux, néants, nada, niet, que dalle, zéro, peau de zob, tchiboul même comme on dit chez nous. Je ne suis pas contre un bon coup de pied dans le fondement de temps à autres, pourvu que l'on ne me casse pas le coccyx. A vot' bon coeur, en sachant que je dois : - traduire et adapter la design sheet de Chris taylor - faire quelques graphs pour GT Turbo - peut être un jour finir ma trilogie de tutoriaux sur le graphs. Accessoirement ce topic servira à tous ceux qui ont besoin qu'on leur rappellent qu'ils ont tout notre amour et qu'on hésitera pas à venir manger leurs hamsters s'ils ne font pas ce qu'ils ont énoncé faire et ce le plus rapidement possible. En gros, vener geindre on va s'occuper de vous.
  6. Préambule (pré en bulle) La narration : type d’énoncé et ensemble de procédés qui visent à mettre en récit une série de faits, vrais ou fictifs, se déroulant dans une temporalité ; n'est pas le fait de raconter une histoire, ce sont tous les moyens mis en oeuvre pour raconter (correctement de préference) cette histoire. De l'histoire dans les jeux vidéos ? (et non pas hisse toi voir dans les jupes de léo) D'aucun me retorqueront immédiatement que vouloir historiser un jeu retro (shmup, beat'em all, race, etc...) tient de la gageure. Oui, et non, car exploiter la narratique dans un jeu ne veut pas systématiquement dire qu'il y a une histoire. Ne me faites pas dire ce que je n'ai pas dis, avoir une histoire solide est et sera toujours un plus, maintenant beaucoup de jeux peuvent s'en passer. La méthode que je me veux décrire (tant mal que mal) est celle d'organiser tout son jeux de façon narrative pour en tirer l'essentiel. Comment cha March ? (parle pas de planète en bouffant du chewing gum !) De façon simple et complexe. Si l'on considère qu'une expérience vidéo-ludique (de son premier graph jusqu'au tableau des scores) est telle une oeuvre littéraire au chapitres de durée variable, il est essentiel de soigner ses transitions et son style, surtout son style. Si un écrivain peut se permettre de varier son style pour simuler d'autre personnages, dans un jeu, et à moins de maitriser à la perfection ce genre d'artifice, il en est tout autre. Il faut que ca se tienne. Les exemples que je pourrais amener à donner ne sont que telles, des exemples, pas des règles ou des dogme inaliénable... Si vous changez de typo d'un écran de menus à l'autres juste parce que "stropcool !" et que maintenant avec la CF de chez Jagware (pub éhonté !) vosu avez de la place à ne plus savoir qu'en foutre, c'est vous qui être en train de vous foutre le doigt dans l'oeil jusqu'au coxys. De même pour les background, des menus ou des highscores. Une charte graphique stable, clair, lisible et efficace est un élément narratif fort, surtout si elle est prolongé naturellement dans le jeu (utilisation de typo identique, marqueur évenementiel concordant, etc...). Voilà pour l'exemple. Ensuite, il va falloir jouer du chrono (entre autres, votre cerveau aussi pourrait être utile), un livre à un rythme, un jeu devrait aussi, et pas seulement durant son déroulement. Essayer une partie (un peu avancé) de Gran turismo, vous allez prendre quelques années avant de pouvoir démarrer une course. Ce jeu est pour moi l'antithèse d'une bonne narration, les menus sont long, chargés inutilement, l'ergonomie vole au niveau des paquerettes, c'est une horreur. Si de votre écran d'intro à un début de partie (chargement exclu, encore qu'avec la JagCard ), il se déroule 2min de ballade dans les menus, de paramétrage, d'entrée de noms, vous êtez mort. Ou il faudra que votre jeu soit le meilleur du monde pour que l'on vous pardonne ce genre d'erreur. En gros, vous voyez l'idée, et n'oubliez de me soigner l'ergonomie au passage, ca fera plaisir à votre maman. Et j'en fais quoi de mon jeu alors, môa ? (A rungis, y prenne pas) D'abord, tu y penses... Interlude Désolé de rabacher encore et encore. Mais c'est vrai, il faut d'abord s'assurer un minimum sur le papier de ce que vous voulez, ne serait qu'un brouillon mal écrit. Dans le domaine professionnel, on appelle ça la préproduction (dans le ciné aussi tiens). On s'interroge sur le budget, sur les besoins, sur les durées, sur ce qu'on veut/peut faire, et on l'écrit. Que tout le monde sache de quoi on parle. Hurler à la ronde "Je vais faire un jeu d'aventures avec des pingouins transgénique et une truelle à fourrure !" est loin de suffir, je le sais GT le fait tout le temps, lisez le forum vous verrez bien. Vous êtez mignon, mais dans votre tête, personne n'y est alors si vous voulez que votre jeu ressemble à votre jeu, faites savoir ce que vous voulez aux autres, ils vous remercieront au final. Repetez après moi, le papier c'est bien ! En filer une copie aux autres, c'est super ! Il va falloir organiser toute la narratique de son jeu, se demander pour chaque écran, chaque élément s'il est nécessaire/utile/insignifiant/décoratif et pourquoi vous l'avez mis là. Réflechir à l'enchainement de ces éléments, pourquoi quand je fais NEXT dans les SETTINGS (des manettes en page 1 par exemple), je tombe sur le menu AUDIO ?. Justifier votre découpage. Et vous n'oublierez pas qu'un jeu est à peine moins linéaire qu'un bouquin, alors un ch'tit organigramme pourrait faire des miracles. Conclusion (intestinal) Il suffit donc de considérer chaque étape de son jeux (niveaux, menus) comme une succession d'éléments narratique pré-organisé plutôt qu'un enchainement "aléatoire" d'élément rapportés (Euh, une image de transition ? ben, parce que...) pour donner à ce jeu une cohérence démonstratrice de son esprit et de celui de ses créateurs : a savoir la volonté d'un tout visant une chose, l'amusement de son utilisateur. J'ai l'air de me focaliser sur ce qui se passe entre et avant/après les niveaux du jeu. Mais de même dans ces niveaux tout ces éléments (penser à ceux qu'un écrivain pourrait employer) ont toujours valeurs, la cohérence, ça n'a pas de prix (ou presque). En clair, il faut bosser ! P.S. : Ce texte n'est au final pas forcement (pas vraiment en fait), ce que je voulais écrire, je peux m'être fourvoyé, avoir pris des vessies pour des lanternes, faites le moi savoir avant de m'envoyer en place public, je vous en serais grée.
  7. Et Voilà Le Nouveau Jagware !

    Deux bières, beaucoup de bonne musique, un putain de mal de dos, un brin de sadomasochisme. Voilà ce qu'il a fallu pour finaliser cette migration. Le site est ouvert, il reste une ou deux choses à faire (modifier le message à l'inscription entre autre) mais c'est plus que fonctionnel (si j'ai correctement parametré le bousin en fait ). Ce que vous devez savoir : - Les PM n'ont PAS été transferé (ils seront disponibles sur l'autre site encore pour quelques temps). - Les images interne n'ont pas pu être tranferé correctement, tant pis pour elles. - Les news aussi sont passé à la trappe (un best of est néanmoins prévu). - Les signatures ont été oublié (presque volontairement ). - Vous allez tous recevoir un mail avec votre nouveau mot de passe temporaire. Un peu de patience donc. P.S. : Le sujets actifs sont dispo sous le lien Today's Active Topics [English] The new Jagware is up and running, there still is one or two things to do (registration message for example) but it's more than usable (if i configured the whole 'thinggy' well ). What you have to know : - PMs have NOT been transfered (they will be available in the old site for some time). - Internal pictures could not be transfered properly... - News have been lost (a best of is on its way). - Signatures have been forgotten (almost on purpose ). - You will all receive an email with your new temporary password. Just be patient. P.S. : You could see recent active topics by following this link Today's Active Topics
  8. Compact flash adapter

    Cartridges are expensive, have low storage ability and are a pain on the neck to produce... JagCDS are rare, slow and a pain on the neck to burn (crypt)... So the Jagware team, because we are beautiful tall and intelligent, used their top brains (clustered hamsters) and present you the Compact flash adapter. These high capacity storage cards (from 64MB to 8GB) are cheap and available everywhere. As this adapter is a Jagware team production (SCPCD on the technical side, Fredifredo on the documentation side, all the others on the "Wow, you're the best !" side), and considering all the advantages it offers, most of our future development will be using it. And here are the photos of the prototype :
  9. Oui et non, même si la PS3 n'est pas encore sorti, elle fut la deuxième (mais la Dreamcast compte difficilement) sortie de gette génération. Et puis Old-gen n'est pas forcement péjoratif, juste un repère temporel/technologique par rapport aux consoles qui sortent, vont sortir. Je rajoute que c'est un terme employé sur les sites ou je traine, en passant.
  10. Un lien vers un article en anglais un peu technique qui explique comment on peut faire pour réaliser certaines techniques que l'on croyait impossible sur une console que l'on pense dépasser. On y parle de HDR, de tone mapping, de Fur shader, de self-shadowing, et tout ça sur une console old-gen pour un jeu absolument unique qu'il vous faudra essayer un jour ou l'autre. Comme quoi la technique et la poésie ne sont pas antinomique. Making of Shadow of the Colossus
  11. Bienvenue à tous les nouveaux !

    Mis à part avoir nom à coucher dehors , il fait quoi de beau le monsieur (ou la demoiselle, on est pas sectaire) ?
  12. Bienvenue à tous les nouveaux !

    \o/ Un game-designer/chef de projet ! On va peut être me prendre au sérieux maintenant !
  13. Durée De La Session

    La seule chose que je voie pour les cookies est que vous vous connecté au site via l'adresse http://www.jagware.org qui est différente de http://jagware.org, la seconde étant l'adresse de travail du site et celle du domaine des cookies.
  14. Durée De La Session

    Je ne suis pas vraiment sur de comprendre. Le mot de passe est sauvegardable via cookie par simple cochage d'une case à la connexion, c'est peut être cela dont tu parles. Maintenant, j'ai poussé la durée de la session à 12h, elle était d'une heure avant. Et sur LDU, c'était la durée du cookie que l'on pouvait moduler.
  15. Happy Birthday Sebrmv !!

    Il est mignon mais une news pour chaque anniversaire, c'est sûr ca fait famille mais ça fait aussi limite. Un post dans le forum Formalisme, qui sert de toute façon de forum de discussion général par extension, pas de problème, mais une news... Je laisse celle là parce que tu est passé au travers de la modération due à un oubli de configuration, au moins j'ai pu le remarquer, mais les suivantes, ben, y'en aura pas. Le prend pas perso, SebRmv, passe un excellent anniversaire, juste de l'affinage au niveau du fond et de la forme.
  16. Happy Birthday Sebrmv !!

    J'y crois pas, il en a fait une news... Joyeux anniversaire Sébastien !
  17. Liste de possibilité de jeux :

    Le channel #Jagware vient de pondre en communauté une idée toute simple, disons une adaptation d'un "vieux" concept. Celui de bust a groove, ces jeux musicaux ou il fait reproduire une séquence de touches à la manette au rythme d'une musique. L'intérêt de la Jag est son pad de 12 touches, les possibilités sont énormes avec ça.
  18. La Charte

    Elle existe et elle se doit d'être respectée. It exists and must be followed. La charte
  19. La Charte

    Elle existe et elle se doit d'être respectée. It exists and must be followed. La charte
  20. La Charte

    Elle existe et elle se doit d'être respectée. It exists and must be followed. La charte
  21. La Charte

    Elle existe et elle se doit d'être respectée. It exists and must be followed. La charte
  22. La Charte

    Elle existe et elle se doit d'être respectée. It exists and must be followed. La charte
  23. Le Dsp Pour Les Grands

    Vous trouverez dans les 3 chapitres ci dessous, le nécessaire de survie quand le Gpu est attaqué, le Dsp est pratiquement pareil (Jeux d'instrucions, lancement de code, etc...) les instructions ne fonctionnant que sur l'un ou l'autre sont indiqués. Mais j'ai écrit ceci car j'ai fait un petit paquet d'essais et autant en faire profité tout le monde. Bon code. Gpu in da face !!! (Et le Dsp aussi dans ta face !) (Sur un petit air de 'Techno is not dead ') Bienvenue ici, vous trouverez dans les milliers (Hein !?!) de ligne après plein de truc sur le Gpu de la Jag, le Dsp étant presque pareil, vous ferez d'une pierre, deux coups !! C'est un microprocesseur plein d'avenir, moi je vous le dis !!! Pourquoi parlez de cette puce alors que vous voulez juste dvper un shoot ? Alors que je n'ais pas de besoin de calcul ou de trucs super sophistiqués pour mon jeu. Si vous répondez cela c'est que vous êtes un ane et un de compétition !! Le couple Gpu / Dsp c'est un peu la carte accélératrice de la Jag, faire un trait dessus c'est permettre aux autres dvpeurs de faire un jeu 'beaucoup beaucoup plus meilleur que le votre !' (Et faites moi confiance je ne ferais pas dans la dentelle, je suis un gros bourrin ! Donc mes codes mangeront vos productions comme apéritif !). Oui mais c'est dur et puis truc et machin !!! NON NON et RENON !! Ce qui ont déjà écrit en assembleur une fois dans leur vie, vont apprécier ces puces pleines de surprise et surtout de puissance !!! C'est ultra simple de codé avec, ceux qui ont fait du 68000 auront l'impression de trouvé son cousin, ceux qui ont fait du code Dsp (Sur un Falcon) vont avoir l'impression de faire du basic (C'est un peu poussé vais vous verrez que le transfert d'un code Gpu dans sa ram est 10 fois plus simple qu'avec le Falcon). Le Gpu de de la Jag est un RISC, en clair, peu d'instructions mais qui arrache (C'est tout ce qu'il nous faut !). Il est d'après Atari, là pour faire de l'aide au copro vidéo, mais vu la puissance de la puce et son jeu d'instruction (Pas si réduit que cela !) on peut faire beaucoup de choses avec (Je lis les jagpads avec ! SCPCD fait ces liste de sprite avec !) Je vais vous expliqué le jeu d'instruction et quelques trucs a savoir pour écrire vos propres codes Gpu pour écrire Native II. Ce qui n'ont jamais fait d'assembleur de leur vie, passez votre chemin, je ne suis pas la pour vous faire une initiation mais une explication de cette puce. Les rois du 68000, mangeur de nop en puissance, restez ici ca va vous plaire tout cela, vous verrez !! Petit détail techniques : - processeur 32 bits (Attachez les ceintures !) - presque toutes les instruction en un cycle, vu la vitesse de ce chip (26 Mhz) cela laisse rèveur a ce qui ont codé sur un ST... - 64 registres (En utilisation normale c'est 32, meme un peu moins (Ca sent l'arnaque !), parce que certains sont utilisé en interne) mais on peut accèder‚ a 64 ca c'est sur) - 4 Kilos de ram interne, cela peut faire peu mais en assembleur et juste pour du code pure on peut en mettre des trucs interressants. Le Dsp quand a lui dispose de 8 Kilos (Ca va p‚ter moi je vous le dit !!) - Il peut lire / écrire une phrase (8 octets) en une instruction) Les registres sont ici appellés Rx (x=0 a 31, soit R0 … R31) Voili, voila passons aux jeu d'instructions, n'oubliez pas c'est un proc 32 bits, donc quand on peut pas préciser, c'est les 32 bits du registres qui sont concernés. Cela peut déboussoler‚ au début, mais très peu d'instruction autorise l'immédiat, c'est pour 90% du temps, reg sur reg, pour passer cela la technique est simple, mise de l'immédiat dans un registre et ensuite, votre instruction avec le registre ou se trouve votre immédiat. Cela peut ètre lourd, mais on s'en fou un peu tant que cela va vite !!! Le Gpu dispose bien sur des flag pour les tests, il n'y a que trois flags - Z(ero) placés bien sur si le résultat est nul. - N(égatif) placés biens sur si le résultat est positif (Je rigoles je voulais voir ce qui suivait, c'est bien sur négatif) - C(arry) retenue. Pour les flags : F signifié‚ fixé‚ (Donc modifié suivant le résultat) 0 signifié‚ mis a 0 quelque soit le résultat 1 signifié‚ mis a 1 quelque soit le résultat I signifié‚ indéfini, pas modifié ou valeur inutilisable. Rn désigne constamment un registre (r0-r31) Les instructions du Gpu / Dsp. Les instructions : - Abs rn : donne la valeur absolue de rn (Registre) (Flags : Z(F), N(0), C(placé si opérande négative) - Add rn,rn : additionne rn sur rn et oui !! (Flags : Z(F), N(F), C(F)) - Addc rn,rn : additionne rn sur rn et en plus rajoute la retenue !! (Flags : Z(F), N(F), C(F)) - Addq #n,rn : additionne n sur rn, immédiat, n entre 1 et 32 (Flags : Z(F), N(F), C(F)) - Addqmod #n,rn : additionne n sur rn, immédiat. (Dsp seulement, 1a particularité, intègre un modulo, permet de faire du buffer circulaire.) (Flags : Z(F), N(F), C(F)) - Addqt #n,rn : additionne n sur rn, immédiat, n entre 1 et 32 (particularité‚ ne modifie pas les flags, le t est la pour transparent) - And rn,rn : et logique (Flags : Z(F), N(F), C(I)) - Bclr #n,rn : efface le bit n dans rn, n immédiat (0-31) (Flags : Z(F si le résultat est maintenant égal a zéro) N(Valeur du bit 31), C(I)) - Bset #n,rn : place le bit n dans rn, n immédiat (0-31) (Flags : Z(F si le résultat est égal a zéro,N(F), C(I)) - Btst #n,rn : teste le bit n dans rn, n immédiat (0-31) (Flags : Z(F si le bit est égal a zéro,N(I), C(I)) - Cmp rn,rn : compare rn a rn (Flags : Z(F si ‚gal),N(F, source>destination)), C(F)) - Cmpq #n,rn : compare n (immédiat) a rn (n entre -16 a +15) (Flags : Z(F si ‚gal),N(F, source>destination)), C(F)) - Div rn,rn : division non signé (32/32) (Flags non affecté) - Imacn rn,rn : multiplication / accumulation, signé rn est multiplié par rn, le résultat est inscrit dans un registre interne (Voir resmac) (Flags non affecté) - Imult rn,rn : multiplication signé 16 bits (résultat 32) (Flags : Z(F),N(F), C(I)) - Imultn rn,rn : multiplication signé 16 bits mais le résultat est sauvé en interne (Plus rapide que la précedente du fait de la non réecriture du résultat dans rn) (Flags : Z(F),N(F), C(I)) - Jr cc, n : saut relatif conditionnel cc : condition (voir tableau après) n : offset du saut, additionné a l'adresse de l'instruction suivante (Flags non affecté) - Jump cc,(rn) : saut absolu conditionnel cc : condition (voir tableau après) rn : adresse du saut (Flags non affecté) - Load (rn),rn : charge le contenu de rn dans rn, équivaut a un move.l (a0),Dn (68000) ou lea (a0),a0 (Ne pas oubliez reg de données et d'adresse sont pareil sur le Gpu) l'adresse doit ètre aligné sur un mot long. Flags non affecté - Load (R14+n),rn charge rn avec ce qu'on trouve en r14+n - Load (R15+n),rn : équivaut a un move.l N(a0),Dn (68000) n immédiat (1-32) attention n est exprimé en mots long et pas en octet donc load (r14+1),rn est égal a move.l 4(a0),Dn Flags non affecté - Load (R14+rn),rn pareil qu'avant mais avec un registre - Load (R15+rn),rn : équivaut a un move.l 0(a0,d0.l),Dn l'adresse obtenu doit etre aligné sur un mot long. Flags non affecté - Loadb (rn),rn : move.b (a0),d0 (68000) lit un octet en mémoire, octet chargé dans les bit 0-7, le reste du registre est effacé. Attention : accès en ram extérieur pas de soucis, en cas d'accès de ram interne lecture d'un mot long - Loadw (rn),rn : move.w (a0),d0 (68000) lit un mot en mémoire, mot chargé dans les bit 0-15, le reste du registre est effacé. Attention : accès en ram extérieur pas de soucis, en cas d'accès de ram interne lecture d'un mot long - Loadp (rn),rn : lit une phrase en mémoire, la partie basse est chargé dans le registre spécifié, le reste est placé dans un registre spécial (Voir après) (Gpu seulement) Attention : accès en ram extérieur pas de soucis, en cas d'accès de ram interne lecture d'un mot long - Mirror rn : 'miroite' le registre (retourne le registre) (Dsp seulement) (le bit 0 est échangé avec le 31, le bit 1 échangé avec le 30, etc..) (Flags : Z(F), N(F), C(I)) - Mmult rn,rn : lance le calcul matriciel, le premier registre indique l'adresse de la matrice de départ, le second registre récupere le résultat. (Des d‚tails dans un prochain registre) (Flags : Z(F), N(F), C(F)) - Move rn,rn : sans commentaire ! (move.l dn,dn (68000)) Copie d'un registre vers un registre - Move pc,rn : copie le PC, le pc est recalculé pour prendre compte du pipe lining et tout le toutim pour donné le bon PC. (Flags non affect‚) - Movefa rn,rn : permet de transféré un registre vers un registre de l'autre banque de registre (Voir notes) - Movei #n,rn : charge rn avec l'immédiat (mot long) (Flags non affecté) - Moveq #n,rn : chargement avec l'immédiat n (0-31) (Flags non affect‚) - Moveta rn,rn : permet de transférer un registre de l'autre banque vers un registre de notre banque de registre (Voir notes) (Flags non affecté) - Mtoi rn,rn : extrait la mantisse, et signe le nombre 32 IEEE 32 bit flottant dans la destination, plus de détail quand on aura fait des essais. - Mult rn,rn : multiplication 16 bit non signé de rn par rn, résultat sur 32 bits placé dans la destination. - Neg rn : négation, 'negate' rn, cela veut dire rn=8 après rn=-8, etc.. Si vous comprenez pas allez vous faire.... - [red]Nop[/red] : l'instruction a connaitre, le top du top, l'exclu, l'instruction universelle des assembleurs, le Nop qui ne fait rien du tout !!! (Flags non affecté) - Normi rn,rn : donne un nombre 'entier normalisé', plus de détail une autre fois. - Not rn : Non logique (Flags : Z(F), N(F), C(I)) - Or rn,rn : Ou logique (Flags : Z(F), N(F), C(I)) - Pack rn : Compacte un pixel au format cry : les bits 22-25 passent en 12-16, les 13-16 en 8-11 et les 0-7 en 0-7 !!! Quand j'aurais compris quoi faire avec on fera des trucs tous ensemble !!! Promis !! (Gpu seulement) (Flags non affecté) - Resmac rn : récupère le résultat des multiplications précédentes, recopie le registre de multiplication dans rn. (Flags non affect‚) - Ror rn,rn : rotation par la droite. Valeur autorisé 1 a 32, seules les 5 bits de rn (source) sont pris en considération. (Flags : Z(F), N(F), valeur du bit 31 avant la rotation) - Rorq #n,rn : rotation par la droite en usant d'un immédiat. Valeur autorisé 1 a 32 (Flags : Z(F), N(F), valeur du bit 31 avant la rotation) Arrive les instructions de saturation, what it is ? Ces instructions permettent de réduire un registre en utilisant deux règles. Pour vous expliquer ces règles, il faut juste savoir deux choses sur les instructions après seront données‚ deux chiffres et peut etre un 'S' optionnel. Le premier chiffre indique la taille de votre registre au départ, le second après 'Saturation'. Exemple : Sat8 rn : 32->8 Cela veut dire que votre registre 32 va ètre réduit a 8 bits, en appliquant que si votre reg 32 est supérieur a 255 (2^8-1), il sera égal a 255, si il est inférieur a 255, il restera comme il est, si il est négatif il vaudra 0 (Si il n'y a pas de 'S' car sinon le résultat est signé donc non modifié si il était négatif) - Sat8 rn : 32-> 8 (Gpu seulement) (Flags : Z(F), N(0), C(I)) - Sat16 rn : 32-> 16 (La limite est donc 65535 (2^16-1)) (Gpu seulement) (Flags : Z(F), N(0), C(I)) - Sat16S rn : 32->16 (Attention résultat peut ètre signé) (Dsp seulement) (Flags : Z(F), N(0), C(I)) - Sat24 rn : 32->24 bits (Limite 2^24-1) (Gpu seulement) (Flags : Z(F), N(0), C(I)) - Sat32S rn : 40->32 bits (Les 8 bits manquant sont récupéré du registre interne de multiplication / accumulation) et son considérés comme les 8 bits haut. (Dsp seulement) (Flags : Z(F), N(0), C(I)) - Sh rn,rn : décalage gauche ou droite, donnée par la valeur de rn. Valeur positive décalage a droite. - Sha rn,rn : décalage arithmétique, le reste pareil que Sh (Flags : Z(F), N(F), C(bit 0 des données non décalés.)) - Sharq #n, rn : décalage arithmétique droit avec un immédiat. (Flags : Z(F), N(F), C(bit 0 des données non décalés.)) - Shlq #n, rn : décalage a gauche avec un immédiat. (Flags : Z(F), N(F), C(bit 31 des données non décalés.)) - Shrq #n, rn : décalage a droite avec un immédiat. (Flags : Z(F), N(F), C(bit 31 des données non décalés.)) - Store rn,(rn) : Ecrit un long (move.l d0,(a0) 68000) L'adresse doit etre aligné sur un long (4 octets) (Flags non affect‚) - Store rn,(R14+n) : Comme le load mais en écriture - Store rn,(R15+n) (N est calcul‚ en long n=1 (déplacement de 4)) (Flags non affect‚) - Store rn,(R14+rn) : Comme le load mais en écriture - Store rn,(R15+rn) (l'adresse doit ètre aligné sur un long) (Flags non affecté) - Storeb rn,(rn) : Ecrit un octet. Cela s'applique qu'au écriture extérieures, en interne c'est toujours un mot long (Flags non affecté) - Storew rn,(rn) : Ecrit un mot, cela s'applique qu'au écriture extérieures, en interne c'est toujours un mot long. Adresse aligné sur un mot long. (Flags non affecté) - Storep rn,(rn) Ecrit une phrase (8 octets). Le mot long manquant est récupéré dans un registre spécial, l'adresse doit ètre aligné sur un phrase. (Gpu seulement) (Flags non affecté) - Sub rn,rn : soustrait rn de rn et oui !! (Flags : Z(F), N(F), C(F)) - Subc rn,rn : soustrait rn de rn et en plus retire la retenue !! (Flags : Z(F), N(F), C(F)) - subq #n,rn : soustrait n de rn, immédiat, n entre 1 et 32 (Flags : Z(F), N(F), C(F)) - Subqmod #n,rn : soustrait n sur rn, immédiat. (Dsp seulement, 1 particularité, intègre un modulo, permet de faire du buffer circulaire.) (Flags : Z(F), N(F), C(F)) - Subqt #n,rn : soustrait n sur rn, immédiat, n entre 1 et 32 (particularité ne modifie pas les flags,le t est la pour transparent) - Unpack Rn : l'inverse de Pack... - Xor rn,rn : Ou exclusif (Flags : Z(F), N(F), C(I)) Notes : loadp et storep lisent et écrivent des phrases (8 octets) mais les registres font 32 bits, donc on en utilisent 2 ? Pas tout a fait j'ai cherché quelques minutes, danc la doc est écrit que la partie haute est lu ou écrite depuis le 'high half register', c'est mignon mais cela veut dire quoi en clair, au début j'ai voulu commencé (Enfin non j'ai commencé...) a essayer tous les registres, mais après une dizaine cela devient lourd et en fin de compte en cherchant on trouve en $f02118 un registre appellé : High Data register et oui c'est lui qui sert de registre de stockage pour les phrases. Moveta et Movefa ont une fonction particulière ils permettent de transférer un registre d'une banque vers une autre. Explication : vous vous souvenez, au début j'ai écrit qu'il avait 64 registres. Ceux ci sont divisés en deux banques de 32 registres, le seul moyen de selection des banques est masqués par le Gpu donc on y a pas accès en direct, alors ceux deux instructions sont la pour nous aider, moveta permet de transférer un registre de la première banque (La standard) vers l'autre (Celle qui se cache), exemple : moveta r4,r4 Une personne qui ne connait pas pense que vous simulez un Nop ! Mais non, mais non cela transfert le premier r4 dans le second r4 et movefa fait l'inverse. Attention, Atari précise qu'il faut initialisé la pile du Gpu mais la vous cherchez comme un ane et bien sur c'est écrit nulle part, j'ai cherché pour vous et apparement cela serait r27 a prendre avec des pincettes, j'ai fait des tours dans différents sources pour cela, donc zéro assurance. R31 est la pile pour les routines d'interruption et attention en cas de routine d'interruption r30 peut ètre 'plombé‚', donc vous savez qu'elle registre vous avez a éviter... Conditions pour les instructions de saut : C=flag de retenue N=flag de négation Z=flag de zero (!) - : rien, branche toujours - NZ : branche si Z=0 - Z : branche si Z=1 - NC : branche si C=0 - NC NZ : branche si C=0, Z=0 - NC Z : branche si C=0, Z=1 - C : branche si C=1 - C NZ : branche si C=1, Z=0 - CZ : branche si C=1, Z=1 - NN : branche si N=0 - NN NZ : branche si N=0 et Z=0 - NN Z : branche si N=0 et Z=1 - N : branche si N=1 - NN Z : branche si N=1 et Z=0 - N Z : branche si N=1 et Z=1 - : rien, branche jamais (Dite rien je cherches...) Lancer un code Gpu Avalez le jeu d'instruction ? Donc on attaque les choses sérieuse. Comment faire pour écrire mon premier programme et le lancer ? 'Ca en etre une question qu'elle est bonne ?' Premier point, MadMac l'assembleur fait le code 68000 / Gpu / Dsp donc il va falloir lui préciser que c'est un code Gpu ou Dsp donc pour prévenir le mossieur, vous faites sur votre premiere ligne de code : . gpu (ou dsp suivant la puce) C'est dur hein ! Second point, le code Gpu / Dsp est absolu, cela signifie qu'il est assemblé que pour fonctionner a une seule adresse. Pour fixer cela au début de votre source, vous devrez faire cela : org $f03000 (Adresse de début de la ram Gpu) L'adresse cité peut etre n'importe quoi tant qu'elle se situe dans la ram du Gpu ($f03000-$f03fff, 4 kilos) ou la ram Dsp ($f1b000-$f1cfff, 8 kilos), ces deux ram sont des rams a accès très rapide. L'entrée est passé ? Les choses ultra simple commencent (Hein !?!) Voici un code bidon pour démonstration : .gpu org $f03000 movei #Boucle,r0 ; Adresse pour faire notre boucle Boucle: ; Début de notre boucle sans fin nop ; l'instruction qui est 'jouli !' jump (r0) ; on boucle sans fin, histoire 2 ! Passez ce truc dans MadMac vous allez récuperé un splendide 'votrenomdefichier'+.'o'. Et on en fait quoi ce celui la ? C'est simple, vous le recopiez comme un barbare dans la ram du Gpu, comme par exemple : lea Fin_code_dsp,a0 lea Debut_code_dsp,a1 move.l a0,a2 sub.l a1,a2 (Calcule la taille du code !) lea $f03000,a3 move.w a2,d0 lsr.w #1,d0 (Divise par 2, car on va transférer des mots) subq.w #1,d0 (-1 pour le dbra) Copy_code_dsp: move.w (a0)+,(a3)+ dbra d0,Copy_code_dsp ..... Debut_code_dsp: INCBIN "VOTRENOMDEFICHIER.O" EVEN (Assure la parité au cas ou !) Fin_code_dsp: Dur n'est ce pas (Sans commentaire...) Et maintenant on le lance comment ? D'abord le PC (Program Counter) n'est pas initialisé, donc on le met en place : move.l #$f03000,G_PC ($f02110) Ensuite ? Ben on envoie la sauce ! move.l #1,G_CTRL ($f02114) (Ne pas oublié d'adresser les registres sur 32 bits, meme si il ne comporte que 15 bits, d'ou le long au dessus !) Place le bit 0 de $f02114, ce bit démarre le Gpu ou le stoppe. Et voila votre code Gpu tourne ! C'est dur la vie d'artiste. Note : le Gpu / Dsp pipe line a mort, ce qui fait que presque tout le temps, une instruction est en cours d'execution et pendant ce temps la suivante est commencé. Ce qui fait que dans certains cas un résultat a pas fini d'ètre calculer avant que l'instruction suivante soit executé, donc si vous écrivez cela : moveq #0,r0 addq #1,r0 addq #4,r0 Le résultat ne sera peut etre pas 5 !! Donc soit vous inserez des nops, soit vous entrelacez votre code de manière a ce qu'une instruction qui utilise un résultat, n'utilise pas celui du calcul‚ juste avant : moveq #0,r0 moveq #0,r1 addq #1,r0 subq #4,r1 addq #4,r0 Cela a plus de chance de marché !! Dans certains cas vous etes pas obligé d'entrelacer, le Gpu attend (comme un con !) que le résultat soit calculé si vous etes dans le cas du premier exemple mais dans certains cas non, donc méfiez vous, ne dites pas que je vous aurais pas prévenus. Voila vous en savez beaucoup sur ces petites betes, le Dsp c'est exactement pareil, il dispose de quelques trucs en plus en rom (Différentes tables sonores) vu qu'a la base il est censé faire du son (Mais vu la taille de la ram cela doit etre possible de mettre la routine son et ....) J'ai passer certains trucs, car je n'ais pas encore fait les essais ou ceci sont en cours au moment ou cet article est écrit. Prenez note d'une chose, ces deux puces dispose de ram, vous pouvez les utiliser comme mémoire cache, vu leur vitesse d'accès. Quand j'ai écrit ma routine Jagpad au Gpu, j'avais un petit doute, mais en fin de compte les résultats des joys sont stockés dans la ram Gpu (Tout en haut !)et cela marche très bien, le 68000 n'a plus qu'a lire le résultat quand il le souhaite. La routine souris qui se 'ballade' pour la Jag est chouette mais il est préciser qu'il faut faire une lecture 1000 fois par seconde (Du fait qu'on peut pas savoir quand elle a été déplacé car aucune interruption est géneré pour les ports joy !) au 68000 c'est marrant un moment, mais vous croyez pas que cela peut ralentir un peu tout ce mic mac ? Autant l'écrire au Gpu, faut bien qu'il serve a quelque chose.... Voila, vous en savez assez pour nous faire de jolis codes Dsp / Gpu, et surtout de vrais productions Jag, production amateur d'accord mais le résultat DOIT ètre pro, c'est une vrai console, pas un simulateur d'Atari St...... Elle est capable de superbes jeux, elle a un potentiel plus souvent 'inexploité qu'exploité', donc attrapez votre courage (Il y en a besoin ?) et cassez la baraque, meme si on peut pas faire du Gran Turismo 4 sur Jag, les jeux 2d sont l'apanage de cette chouette console, le seul jeu qui avait l'air de poussé est Native, apparement Rayman mais je l'ai pas encore vu (RaZ en a trouvé un donc on l'attend donc de pied ferme !) Allez salut ! Pour les instructions je n'ais fait qu'une traduction (avec les pieds) de la doc officielle Atari (Merci a Vince), j'ai pu faire des erreurs, (Voire en rajouté !!), donc si vous avez un doute, votre code ne fonctionne pas tout a fait, faites signe !!!! Pour certains 'trucs' spéciaux, multiplication de matrice, certains trucs spécifiques au Dsp, un autre article sera écrit. GT Turbo (C.V.S.D.) Membre de la Jagware Team
  24. En résumé, et comme dans toutes communautés, il faut savoir réfléchir avant d'agir et donc se modérer en tout. Le respect de l'autre est la base évidente pour pouvoir fonctionner en groupe. Voici donc deux trois règles de simple bon sens à appliquer ici en général : - Je tourne sept fois mes mains autour de mon clavier avant d'écrire quoi que ce soit, surtout si j'ai l'intention d'insulter quelqu'un. D'autant plus que je suis pleinement responsable de tout mes propos. - Je sais me servir d'une recherche et ça tombe bien celle ci est très bien. Ca m'évitera de passer pour un âne à redemander ce qui existe déjà. - Je n'abuse pas des services qui me sont proposés, les PM (par exemple) n'étant pas des boites mail, je n'en conserve pas une centaines juste pour le plaisir de grever les ressources qui me sont aloué. - Je suis conscient que même si les décision se font de concert autant que faire se peut, les responsables en places restent seul juges au final. Et concernant les inscriptions, je commence comme simple membre et doit prouver mon intérêt pour pouvoir accéder à un rang supérieur ou voir mon compte disparaitre (mais rien ne presse). - Je n'ai aucun intérêt à chercher la petite bête ou la faille dans le système, qu'elle soit technique ou morale. Et en voici le moto : Jagware est tout simplement le premier site communautaire de développement Jaguar français. Mis en place par une poignée d'amateur Atari avertis. Il vise une saine émulation et une entraide complète entre toutes les personnes désireuses de produire du matériel pour la 64bits aux yeux félins. Nous voulons ce site comme une réserve pertinente et aussi complète que précise de méthodes, techniques, codes, débats, et reflexions globales pour faciliter et encourager les sorties futures. Le site vient d'ouvrir, le contenu y est encore léger mais comme toutes communautés, elle n'attend que d'autres membres pour la faire vivre. Certes reservés en priorité aux francophones, le site n'en est pas moins ouvert à tout développeurs international via une section du forum en anglais. L'équipe Jagware. Cette charte n'est pas exhaustive et n'est là que pour rappeller l'engagement de groupe et les règles sous jacentes qu'impliquent l'inscription. English version : In a few words, and like in every community, you have to think, at least, twice before doing anything and therefore moderate yourself in everything. Mutual respect is the obvious base to be able to work together. So here we go with a few common sense rules to follow : - I turn seven times my hands around my keyboard before writing anything, especially if i'm willing to insult someone. Knowing that i'm responsible for all my messages and talks. - I know how to use a search engine which is great because this one is really efficient. So, i won't be taken for an idiot because i asked for something that already exist. - I won't abuse services that are available on this site, PM (for instance) are not mailboxes, i won't keep a hundred of them just for the pleasure of overusing ressources that are allocated to me. - I am conscious that even if decision are made all together as much as possible, responsible peoples in place (site owners) are the only final judges. Concerning inscription, i start as a simple member and must prove my interest to get a higher rank or see my account be deleted (but i have time before that). - I have no interest in finding loopholes in the system, be it technical or moral. These terms of service are not exhaustive (and are probably written in a poor english...) and are only here to remind you of the commitment and underlying rules implyed by your inscription.
  25. Comment calculer une valeur approchée de cosinus et sinus ? Disons qu'on désire avoir une table de cosinus et sinus par incrément de 1 degré avec une "précision" n=8192 Nous utiliserons pour générer la table de consinus et sinus les formules : cos(a+=cos(a)*cos(-sin(a)*sin( sin(a+=sin(a)*cos(+cos(a)*sin( ou cos(a-=cos(a)*cos(+sin(a)*sin( sin(a-=sin(a)*cos(-cos(a)*sin( avec a="l'angle à calculer" et b=1 cos_1=cos(1)*8192 et vaut 8190 sin_1=sin(1)*8192 et vaut 143 Le meilleur angle pour commencer à calculer et ne pénaliser aucune des deux tables pour le manque de précision aux angles 0, 90, 180 et 270 degrés est a=45. Pour générer les tables aux angles entre 0 et 45 degrés : n=8192 table_cos(45)=5792 table_sin(45)=5792 table_cos(01)=8190 table_sin(01)=0143 pour i allant de 44 à 1 table_cos(i)=(table_cos(i+1)*table_cos(1)+table_sin(i)*table_sin(1))/n table_sin(i)=(table_sin(i+1)*table_cos(1)-table_cos(i)*table_sin(1))/n fin boucle sur i table_cos(00)=8192 table_sin(00)=0000 Pour le reste, je vous renvois à vos souvenirs de première pour compléter les tables par symétrie Une routine asm est disponible sur le site de DHS ici dans la section Misc sources and routines Azrael
×