Entretien avec Kannagi Ă  propos de NGDK

Posté par  (site Web personnel) . Édité par Ysabeau, bobble bubble, Benoît Sibaud, orfenor, Kannagichan et Nils Ratusznik. Modéré par devnewton 🍺. Licence CC By‑SA.
Étiquettes :
35
25
mai
2023
Jeu

Kannagi développe un SDK pour créer des jeux pour la console Neo Geo, cet entretien revient sur son parcours et les raisons qui l’ont amené à s’intéresser à cette console.

Console Neo Geo, source Wikimedia, © Evan-Amos 2012

Sommaire

Partie 1: présentation

Qui êtes-vous, quel est votre parcours et est-il lié aux jeux vidéos ?

Alors je n’aime pas les présentations en général, mais je m’appelle Samy, j’ai 34 ans, je suis né à Marseille et je suis actuellement développeur web — oui très loin du Jeux vidéo ou du bas niveau (malheureusement). La raison est qu’il est plus compliqué de travailler sur ces branches et on ne peut pas travailler vraiment de partout. L’avantage du développeur web est qu’on peut y travailler partout et assez facilement (dans le sens ou on peut trouver toujours une boite d’informatique qui en demande, même en province). J’ai été pendant un temps développeur Jeux vidéo en free-lance pour Android et IOS, mais assez mal payé et avec des deadlines assez serrées, j’ai vite arrêté.

En amateur j’ai programmé sur de nombreuses consoles en assembleur de la Nes à la PS2.

Partie 2 : La Neo Geo

Comment en êtes-vous venu à vous intéresser à la Neo Geo ?

C’est à cause d’un jeu : King of Fighters 98, j’adorais ce jeu et aussi Windjammer que j’ai connu sur borne d’arcade. Mais j’ai plus connu la Neo Geo via les compilations sur Playstation 2, la Neo Geo coûtait bien trop cher pour moi gamin. Mais je me suis au final acheté une MVS.

King of Fighters 98

Qu’est-ce que cette console a de particulier ?

D’un point de vue technique ?

Difficile à dire, disons qu’en tant que console de salon, elle est unique parce qu’elle prend des technos qu’on ne voit généralement que sur arcade. Je m’explique, la plupart des consoles 8/16 bits font en général ROM->VRAM. La Neo Geo ne fait pas cela, parce que les ROM sont littéralement des VRAM. La seule autre console qui le faisait était la NES ! C’est pour cela que les portages sur console PS1 ou Saturn étaient assez complexes et pas aussi fidèles que les originaux : quand vous avez plusieurs mégas de ROM, c’est comme si vous aviez plusieurs mégas de VRAM, or des consoles comme la PS1 qui avait 1 méga de VRAM, sont un peu limites !

Une particularité qu’elle a et c’est qu’elle n’a pas de Background hardware, ce n’est que des sprites, le fond ne sont que des sprites assemblés. La particularité aussi c’est qu’elle peut assembler des sprites hardware, cela a un nom, mais j’ai oublié, l’avantage c’est que ça évite pas mal de calcul.

Sur SNES ou Mega drive, vous pouvez faire des « macro sprite » pour faire par exemple des sprites de 64x64, mais du coup vous devez déplacer les 4 sprites individuellement (de 32x32). Alors que la Neo Geo le fait automatiquement. Elle gère aussi l’animation des tiles niveau hardware.

Une chose que j’aimerais dire pour la suite, la Neo Geo a donc au moins 5 ROM différentes, toutes dédiées :

  • les ROM PX, pour programme qui contiennent le programme et les donnĂ©es du jeu,
  • les ROM CX, ils contiennent les sprites du jeu,
  • Les ROM VX, qui contiennent les SFX du jeu (en format ADPCM),
  • les ROM MX, qui contiennent le programme sonore et les partitions des musiques,
  • la ROM S1, qui contient les donnĂ©es pour le fix (un arrière-plan pour le HuD).

Si vous dézippez une ROM Neo Geo, vous les verrez, vous savez maintenant à quoi elles correspondent et à quoi elles servent !

Une cartouche contenant les ROMs d’un jeu

Que dire de ses processeurs (Motorola 68000 et Zilog Z80) ?

Je ne dirais pas grand-chose de spécial, parce que ce sont des processeurs assez connus et pas vraiment exotiques.

L’avantage du M68000, c’est qu’il possède un compilateur GCC (que j’utilise pour mon SDK), du coup ça aide pas mal. C’est un processeur assez simple et agréable à coder en assembleur.

Pour celles et ceux qui ne le savent pas le M68000 était partout, sur console comme la Mega Drive, sur ordinateur comme l’Amiga ou l’Atari St, voir le X68000 (un ordinateur japonais). Sur une bonne partie des bornes d’arcades, etc. Par contre cela se voit que c’est un processeur peu utilisé de nos jours, c’est un des rares où j’arrive à battre GCC en assembleur, alors que sur du x86 GCC me bat à plate couture.

Et, bien sur, le M68000 est donc le processeur principal de la Neo Geo ! :D

Le code se trouve dans le P1 qui fait 1 Mio max, on peut faire plus, mais là on fait du bankswitch, la Neo Geo est pensée pour, niveau hardware. Le bankswitch est qu’il y a 1Mio que vous pouvez déplacer, si par exemple vous avec 10 Mio de Programme vous avez 1 Mio que vous pouvez « sélectionner ». Mais, dans les faits, 1 Mio est largement suffisant, sauf si vous avez beaucoup de données.

Pour le Z80, je n’en suis pas grand fan, mais il sert de processeur audio de la Neo Geo. Je n’ai pas grand-chose à dire parce que je ne l’aime pas beaucoup, même si un processeur ultra courant, qui se trouve sur Master System ou la Game Boy par exemple. Sans parler des micro-ordinateurs qui s’en équipent.

Comment fonctionne son processeur graphique ?

Alors que dire, c’est une console assez simpliste de ce côté là. Alors comme toute console de l’époque, les sprites sont associés à une palette. La Neo Geo possède donc 256 palettes, et sur ces palettes vous pouvez mettre 16 couleurs, chaque couleur est sur 16 bits soit 65536 couleurs disponibles. Un Sprite fait 16 × 16 px à 16 × 512 px (mais le 16 × 512 est considéré comme ayant 32 tiles de 16 pixels). Donc si vous voulez avoir un sprite de 128 × 128, sur Neo Geo, cela ne vous coûte que 8 sprites. Un Background coûte en général 32 sprites (on le fait en 512 × 512 pour faciliter le scrolling). Vous avez un total de 380 sprites.

Et comme dit auparavant, on peut fusionner les sprites niveau hardware et les controller comme s’il n’y en avait qu’un seul ! Vous pouvez dézoomer les sprites, eh oui sur Neo Geo on ne peut pas zoomer, même si les jeux faisaient cet « effet », les sprites zoomés n’étaient que des gros sprites qu’on dézoomait !

Niveau concret, il est assez simple à utiliser le processeur graphique, on ne fait qu’écrire sur la VRAM via des I/O. Elle reste la console, à mon sens, la plus facile à programmer des consoles 16 bits.

Comment fonctionne l’audio ?

L’audio dans la scène homebrew n’est pas forcément trop exploré. Son processeur audio est très proche du YM2608. Le chipset de la Neo Geo c’est le YM2610.

Le YM2608 a équipé les PC-88 et PC98, ce sont des ordinateurs qui étaient populaires au Japon, ils avaient 70% du marché. Du coup, ce n’est pas « idiot » de penser que les compositeurs sur Neo Geo le faisaient pour PC-88 car la transformation pour le YM2610 est assez « simple ».

Le chipset sonore est composé comme ceci :

  • 4 canaux de synthèse FM
  • 3 canaux de SSG
  • 6 canaux ADPCM fixe Ă  18,5 Khz
  • 1 canal ADPCM modulaire

Que veut dire tout cela ?

La synthèse FM assez populaire dans les années 80/90 permet de simuler un instrument pour quasiment « rien », il faut « juste » quelques réglages et quelques octets donc pour faire un instrument existant ou pas d’ailleurs.

Le SSG, ce sont des signaux triangle/carré, donc ça fait souvent le bruit d’un bip. Le ADPCM, c’est une compression 4 bits du PCM, le PCM (8 ou 16 bits) c’est ce qu’on trouve généralement dans un format WAV. Il a un canal modulaire vu qu’il a 6 de fixe, comparé à ce qu’on peut croire 18,5 KHz c’est très suffisant. Alors de nos jours certains ont besoin de 96000Hz apparemment…, mais je doute qu’on voie une vraie différence.

Et pourquoi cette fréquence fixe ?

Parce que c’est principalement fait pour jouer un son (une explosion, une voix, un coup) et à cette fréquence le son est d’assez bonne qualité. Même si je pense qu’un 16KHz est suffisant pour du SFX. Le modulaire, est parfait pour jouer un instrument, pour celles et ceux qui connaissent un peu la musique, il y a des notes et des octaves, en général on joue un sample (par exemple, un piano ou une guitare), on module son son pour jouer au final une partition.

La différence avec la version PC-88/PC-98,c’est que l’ADPCM fixe n’était pas modifiable, l’ordinateur venait avec 6 instruments fixe qu’on ne peut pas modifier. Alors que sur Neo Geo vous pouvez les modifier sans soucis.

Quels services fournit le BIOS ? Existe-t-il des versions alternatives ? Libres ?

Alors aussi étonnant que cela puisse paraître, je me suis pas plongé dans les méandres du BIOS de la Neo Geo. Il fournit diverses choses, je l’utilise principalement pour clear la VRAM et autre chose. Mais il fournit divers services pour le CD, la gestion des manettes, des jetons, etc., etc.

J’imagine que vous le savez, il existe bel et bien une version libre (NDM : il y a des restrictions sur l’utilisation) du BIOS de la Neo Geo qui est UniBios. Mais, comme je suis un vieux barbu, je pourrais pas vous en dire plus, je suis à l’ancienne à taper tout via des IO !

Quelle est votre manette préférée ?

Le Stick arcade ! Sinon, ça ne sera pas partagé par tout le monde, mais j’aime beaucoup la manette PS2 !

Le stick arcade de la Neo Geo

Quelle est la différence entre les différentes versions (MVS, AES, CD, CDZ, mini…) ?

Les différences sont vraiment minimes surtout entre les versions MVS et AES. Je sais que les PCB peuvent être différentes et que les versions Arcade peuvent être un peu plus « légères » que leur version AES.

La CD et CDZ, me semble que la différence est juste la vitesse du CD, le CDZ charge deux fois plus vite (c’est pas négligeable). Sinon la grosse différence est qu’un CD n’étant pas une ROM, les versions CD n’ont que 7 Mio de RAM pour charger les ROMs, ce qui est pas « énorme » pour une Neo Geo.

Ils sont répartis comme cela :

  • 68000 program memory : 2 Mio
  • Fix layer memory : 128 Kio
  • Graphics memory : 4 Mio
  • Sound sample memory : 1 Mio
  • Z80 program memory : 64 Kio

Et avec les 150 Ko/secondes du lecteur CD, je vous laisse imaginer pourquoi les temps de chargement sont si longs ! Les autres différences sont que les ROM sont différents aussi, j’ai oublié d’indiquer, cela fait longtemps, mais je suis sûr que pour les ROM C1/C2, par exemple, les pixels sont divisés entre les deux pour le même sprite, ce n’est pas le cas de la CD ou les pixels sont linéaires.

La Neo Geo CDZ Z Z, elle a tous les pouvoirs

Les émulateurs Neo Geo sont-ils bons ?

Bon dans quel sens ? Proche du hardware de la machine ?

Non, il y a deux erreurs que j’avais faites et qui ne marchaient pas sur une vraie console. Il y a une latence à respecter avec le processeur graphique (il faut écrire dessus tout les 12 cycles), alors que tous les émulateurs s'en foutent royalement. Ce que je ne savais pas, c’est que la première couleur de la palette sert à régler un peu toutes les couleurs, du coup j’avais un bug étrange qui était que toutes les couleurs tournaient au vert. Mais aucun émulateur ne le faisait et affichait les « vraies » couleurs.

Et il existe sûrement plein de choses comme ça.

Mais, si on parle de jeux, oui les Ă©mulateurs sont assez bons pour retranscrire les jeux originaux. Pour du dev, clairement pas (mĂŞme MAME).

Quels sont vos jeux commerciaux préférés sur cette console ?

Oh ! Beaucoup trop, mais je vais citer Windjammers ! Kof 98, 2000,2002, Last Blade 2, Fatal Fury Real Bout spécial, les Metal Slug, Blazing Star et Aero Fighter 2.

Bon, de mon point de vue, il n’y a que très peu de mauvais jeux sur cette console.

Windjammers

Quels sont vos jeux « homebrew » préférés sur cette console ?

Ah ben aucun, j’en ai joué à aucun pour le moment ’

Partie 3 : NGDK

Pourquoi créer un SDK pour un si vieux système ?

Parce que je trouvais pas de SDK facile à prendre en main pour la Neo Geo, que c’est une de mes consoles favorites et que j’aime la programmation bas niveau et les jeux vidéo :)

Quelles ont été les difficultés pour le concevoir ?

Disons tous les outils pour faciliter le dev, ce n’est pas seulement une lib. Et l’autre et la partie audio que je n’ai pas terminée.

Quelles sont les fonctionnalités de NGDK ?

Le SDK permet de gérer facilemement pour vous le fix, la palette, les sprites, la création de backgrounds, la fusion des sprites, le dézoom et la gestion du joystick. Il permet aussi de pouvoir compiler dessus sur windows et Linux, la gestion des ressources (sprite / palette) et la gestion des maps.

Est-ce qu’il gère divers accessoires (cartes mémoires, manette Mahjong) ?

Ah ah non aucun désolé !

La manette Mahjong

Est-ce que vous participez à la création de jeux Neo Geo ?

Oui et non, le seul jeu que j’aimerais faire c’est un beat them all à la Double Dragon. C’est un genre qui manque un peu sur cette console je trouve.

Est-ce que des jeux amateurs ou commerciaux sont développés avec NGDK ?

Il y a des jeux amateurs qui sont développés dessus, je ne pense pas qu’un soit terminé, mais c’est cool de voir des démos tourner avec mon SDK ! :)

Quels conseils donnez-vous aux gens qui se lancent dans le développement de jeux Neo Geo ?

Je conseille de savoir coder en C, d’être un minimum à l’aise dessus.

Est-ce que vous aimeriez vivre de ce projet ?

Quelle question !

Oui bien sûr, mais j’ai arrêté de rêver _^

Partie 4: pour finir

Que dire sur vos autres projets ?

J’ai deux autres projets, un qui est un CRT pour émulateur disponible sur FBNeo et un moteur 3D pour les consoles Dreamcast/PS2/GameCube.

(Et cela me fait un peu de pub pour mon github). Alors j’aurais beaucoup de chosex à dire sur ces projets mais ça serait très très long.

NDM : ces projets feront peut-être l’objet de nouveaux entretiens, si vous êtes un spécialiste des CPU ou de la 3D, n’hésitez pas à contacter devnewton pour aider à préparer des questions pertinentes.

Vous avez des projets en cours ?

Alors oui, et il est toujours en cours, c’est de créer un processeur (rien que ça oui).

Cela fait 15 ans que je suis passionné de micro-architecture et je trouve l’architecture des PC ou des processeurs aberrantes, ce n’est clairement pas le choix que j’aurais fait.
Et on touche à des machines très diverses : forcément l’idée m’est venu de compiler toutes ces connaissances.

C’est un processeur VLIW, qui devient de plus en plus EPIC, en gros je ne fais ni du CISC, ni du RISC. J’ai des raisons bien précises de ne pas en faire, je ne suis pas un fan inconditionnel du RISC, pour la simple raison que pour moi l’ISA doit représenter en partie le fonctionnement interne du processeur. Pour cela que je me tourne sur du VLIW ou EPIC pour rendre toute cela bien plus explicite.

Mon processeur est un processeur vraiment exotique même dans sa catégorie, vous pouvez voir le projet ici.

Le but étant de le faire tourner sur FPGA (voir de le graver via un kickstarter). J’ai fait un assembleur, une VM et on travaille avec d’autres pour faire un compilateur avec LLVM (et si des personnes sont motivées par un tel projet, elles sont les bienvenues). C’est un projet passionnant qui m’a apporté pas mal de connaissances, mais aussi la certitude que je dois le finir.

Je pense que ma solution ou proposition est une vraie alternative aux micro-architectures actuelles.

Surtout avec l’arrivée du RISC-V qui semble un peu pousser tout le monde sur cette architecture. Je n’ai rien contre cette architecture, mais j’ai toujours une préférence pour MIPS et je trouve qu’on y fonde peut-être trop d’espoirs pour « rien ». C’est un MIPS mis au goût du jour, et « open source », je mets entre guillemet parce que seul l’ISA est open source, pas l’implémentation et ça change tout ! :) C’est un peu comme si on disait « ah oui mais l’API Linux est open source mais pas son noyau », c’est un peu pareil avec le RISC-V. Alors on peut faire une implémentation open source, mais vous imaginez bien que pour le moment ce n’est pas trop le cas.

La raison pour laquelle je ne fais pas du RISC-V est comme dit, je veux que l’ISA soit très explicite. RISC-V n’est pas neutre dans sa conception (comme le mien d’ailleurs), et sa vision reste seulement orientée pour des hautes performances, l’ISA est pensé pour du Superscalaire Out of Order, ce que je ne veux pas faire absolument.

Pour en revenir à mon processeur, l’avantage serait que, si ça marche, il pourrait avoir de bonnes performances avec une consommation et un coût réduit.

Au niveau personnel, quels logiciels libres utilisez-vous, sur quel OS ?

Alors je tourne sur MX-Linux (avec XFCE), donc que des logiciels libres en général.

Firefox comme navigateur web favori, oui je n’aime pas Google chrome ! :D

Je n’aime pas non plus LibreOffice, du coup j’utilise OnlyOffice.

Pour le Dev, j’utilise VS Code, Code::Block, Geany et QT Créator (suivant les langages et les projets).

J’utilise GIMP, je remarque que peu de personnes de mon entourage savent l’utiliser alors que je le trouve plus facile qu’avant (il y a 15 ans, je vous assure que c’était une horreur à utiliser).

J’utilise toujours Thunar comme exploreur de fichier et le Mousepad comme editeur de texte rapide, peu importe la distribution.

Niveau émulateur j’aime beaucoup FB Neo et mednafen qui me permet de ne pas trop changer d’émulateur peu importe la machine.

Je suis aussi contributeur de FB Neo.

Au niveau professionnel, quels logiciels libres utilisez-vous, sur quel OS ?

Au boulot, c’est Ubuntu, VSCode et tous les navigateurs disponibles, mais j’utilise beaucoup Firefox par habitude.

Quelle est votre distribution GNU/Linux préférée et pourquoi, quels sont vos logiciels libres préférés ?

Alors moi j’ai fait Ubuntu, Fedora et maintenant MX-Linux et pour le moment MX-Linux j’adore, léger et robuste c’est ce qui me convient le mieux.

Quelle question auriez-vous adoré qu’on vous pose ?

Je dirais les questions en rapport avec la micro-architecture ou de mon processeur !

Quelle question auriez-vous détesté qu’on vous pose ?

Si je devais être honnête, j’ai plein de questions que je déteste qu’on me pose. Et donc je ne les dirai pas ! Mais, en général, je n’aime pas les gens qui me disent « pourquoi tu n’utilises pas ça au lieu de ça », en général mes choix sont assez réfléchis. Mais souvent ce sont des questions qui peuvent être naïves sur tel ou tel sujet ou choix de ma part.

Aller plus loin

  • # logiciel libres

    Posté par  . Évalué à 3 (+1/-1).

    donc que des logiciels libres en général. […] Pour le Dev, j’utilise VS Code

    Il compile VScode depuis les sources?

    • [^] # Re: logiciel libres

      Posté par  (site Web personnel) . Évalué à 10 (+18/-1). Dernière modification le 25/05/23 Ă  10:22.

      Je n'ai pas souhaité corrigé les approximations sur la définition du libre dans cet entretien et dans les précédents, car le monde du retrogaming n'est pas très avancé dans l'adoption du logiciel libre.

      C'est déjà un miracle d'avoir autant de francophones qui produisent des logiciels libres dans le retrogaming alors qu'il s'agit d'un secteur où les matériels et les logiciels sont ultra privateurs / fermés.

      Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.

  • # En vivre

    Posté par  (site Web personnel) . Évalué à 4 (+2/-1).

    Il y a peut être des opportunités d'aller vers du jeu libre rentable en vendant des éditions physiques.

    Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.

  • # Ă€ propos du projet CPU

    Posté par  (site Web personnel) . Évalué à 10 (+8/-0).

    Comme d'habitude avec devnewton, très bonne interview.

    La partie neogeo était bien sûr intéressante et instructive, mais j'avoue avoir été encore plus intéressé par le projet je développement CPU. J'ai un peu la même opinion que l'auteur concernant le tout-risc, et le fauxpen-source « risc V ».

    Discussions en français sur la création de jeux videos : IRC freenode / #gamedev-fr

    • [^] # Re: Ă€ propos du projet CPU

      Posté par  . Évalué à 3 (+3/-0).

      Merci pour ton commentaire, et content que je ne suis pas le seul à avoir cet avis ;)

      Du coup je pense soit de faire un nouveau interview ici sur mon processeur vu que celà semble intéresser du monde, soit d'en faire un article à voir ! :)

  • # tĂ©trapilectomie

    Posté par  . Évalué à 5 (+4/-0).

    Le fabricant du Z80 est Zilog (et non Zylog)

  • # Quelques coquilles et interrogations

    Posté par  . Évalué à 3 (+1/-0).

    Le PC-88 et PC-98 sont des ordinateurs, pas des processeurs.

    Je n'ai pas compris le passage ROM -> VRAM, et en quoi c'est possible (une ROM étant en lecture seule…) et en quoi c'est unique ?!

    Sinon c'était hyper intéressant. Je n'aurais jamais douté qu'un SDK récent existait pour cette console.

    "Quand certains râlent contre systemd, d'autres s'attaquent aux vrais problèmes." (merci Sinma !)

    • [^] # Re: Quelques coquilles et interrogations

      Posté par  (site Web personnel) . Évalué à 9 (+6/-0). Dernière modification le 25/05/23 Ă  14:11.

      Contrairement aux cartes graphiques pour microordinateur, les vieilles consoles font l'affichage ligne par ligne, pixel par pixel au moment du balayage de l'Ă©cran. Il n'y a pas de framebuffer.

      Lorsque qu'une ligne est "balayée", le processeur graphique va consulter un tableau avec la liste des sprites à afficher. Cette liste contient des pointeurs vers les images en ROM.

      Sur Neo Geo, en ROM on a donc "juste" une collection d'images qui ne changent jamais, le "lecture seule" n'est pas un problème.

      Sur d'autres consoles comme la Megadrive, les pointeurs sont vers une zone en VRAM. Les images en ROM doivent d'abord être copier en VRAM pour pouvoir être affiché. L'avantage est que l'on peut générer des images (comme le rendu vectoriel utilisé dans Another Word ou Flashback), le défaut c'est qu'on ne peut pas avoir à un instant t plus d'images que ce que peut contenir la VRAM.

      Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.

      • [^] # Re: Quelques coquilles et interrogations

        Posté par  . Évalué à 5 (+5/-0). Dernière modification le 25/05/23 Ă  19:08.

        Tu as parfaitement répondu :)

        C'est un peu le défaut de la Neo Geo, on ne peut pas générer d'image avec, malgré que c'est un "monstre de la 2D", donc sur certain point elle peut faire moins qu'une SNES/Mega Drive.

    • [^] # Re: Quelques coquilles et interrogations

      Posté par  . Évalué à 5 (+5/-0).

      "Le PC-88 et PC-98 sont des ordinateurs, pas des processeurs."

      Oui , il faudra le corrigé, c'est un lapsus de ma part ! ;)

      • [^] # Re: Quelques coquilles et interrogations

        Posté par  . Évalué à 3 (+1/-0).

        Waouh! l'interviewé est là!
        Si on peut y aller de nos questions supplémentaires…

        Ta critique de RISC-V est très intéressante, mais t'en pas assez dit sur ton proco. Comment peut-on suivre ton activité ? tu en parles dans des forums  ?

        • [^] # Re: Quelques coquilles et interrogations

          Posté par  . Évalué à 3 (+3/-0).

          Oui, je suis un peu curieux des retours _^

          D'abord merci , et content ma critique du RISC-V est intéressante :)

          Alors je n'en dit pas assez sur mon proco parce que le but Ă©tait de parler de la Neo Geo.
          J'aurais pu en parler sur Twitter, mais pas grand fan de twitter.
          J'en parle plus ou moins souvent sur un Discord (le serveur NaN).

          Du coup je pense soit de faire un nouveau interview ici sur mon processeur, soit d'en faire un article à voir ! :)

      • [^] # Re: Quelques coquilles et interrogations

        Posté par  (site Web personnel) . Évalué à 4 (+1/-0).

        Corrigé, merci.

  • # Quelques petites coquilles

    Posté par  (site Web personnel) . Évalué à 6 (+4/-0).

    […] ils contiennent les sprites du jeul,

    => ils contiennent les sprites du jeu

    […] on peut fusionner les sprites niveau hardware et les controllers comme s’il n’en avait qu’un seul !

    => on peut fusionner les sprites niveau hardware et les contrôler comme s’il n’y en avait qu’un seul !

    […] les sprites zoomés n’était que des gros sprites qu’on dézoomer !

    => les sprites zoomés n’étaient que des gros sprites qu’on dézoomait !

    Et merci pour l'interview, hâte d'avoir des nouvelles des autres projets (moteur 3D & CPU) !

  • # Console Drive ?

    Posté par  (site Web personnel) . Évalué à 1 (+1/-0).

    le M68000 Ă©tait partout, sur console comme la sur Drive,

    comme la Mega Drive ?

  • # altairx

    Posté par  (site Web personnel) . Évalué à 4 (+1/-0).

    https://github.com/Kannagi/AltairX

    Super projet de cpu ! Cela ressemble un peu à ce que l'on voulait faire pour le fcpu.

    Avez vous pensez Ă  faire un mode d'isa 64 bit qui regroupe les 2 instructions 32 bits.

    Cela permet de faire des d = a*b+c ou des d = a+b+c au minimum. Ou encore,cela offre des immediats de 32 bits. Cela remplace 2 ou 3 instructions et sans latence.

    "La première sécurité est la liberté"

    • [^] # Re: altairx

      Posté par  . Évalué à 1 (+1/-0).

      J'y ai pensé , mais que récemment (genre y'a une ou deux semaines !).

      C'est une bonne idée surtout pour les additions multiples !

      Surtout pour les immédiates qui était le gros soucis de mon CPU.
      Du coup j'ai commencé à rajouté ces petits changements.

      Et donc je pense de plus en plus de rajouter un ISA 64 bits vu que celĂ  permet d'apporter un gros plus.
      Surtout que plein d'idée me vient à l’esprit notamment aussi pour les instructions SIMD entre autre.

      N'hésiter pas à me contacter par mail ou discord pour en parler plus précisément ! :)

      • [^] # Re: altairx

        Posté par  (site Web personnel) . Évalué à 3 (+0/-0).

        Au niveau idée, il y a aussi les vecteurs façon risc v vraiment superieur au SIMD.

        L'idée du mode 64 bits est d'arriver à avoir l'équivalent de 3 instructions dans la place de 2.

        Quel discord ?

        "La première sécurité est la liberté"

        • [^] # Re: altairx

          Posté par  . Évalué à 1 (+1/-0).

          Alors justement je trouve vraiment "mauvais" les vecteur façon RISC-V , et je pense au contraire que ça va vraiment plus causer de soucis qu'autre choses dans l'avenir.

          Pas mal se plaint que c'est clairement pas adapté à la façon de comment les gens utilise les instruction SIMD et que souvent l'utilisation est bien plus "particulière".
          Mais c'est une critique que je lis souvent : "le RISC-V manque d'un certain pragmatisme".

          C'est écrit sur ma page de profil mon discord : Helba#2387 ;)

          Alors faire un mode 64 bits 3 instruction pourquoi pas, mais si j'ai abandonné l'idée c'est que c'est très rare d'avoir 3 instructions/cycles et dans ce cas là , je préfère plutôt m'orienter vers un EPIC (qui mélange VLIW et superscalaire).

          • [^] # Re: altairx

            Posté par  (site Web personnel) . Évalué à 3 (+0/-0).

            C'est quoi le problème avec les vecteurs variables risc v ?

            C'est très rare d'avoir 3 instructions/cycles

            Que veux-tu dire par la ? Les intel ont 3 ALU par exemple.

            Vliw c'est en general, 8 instructions d'un coup. EPIC me rappelle l'itanium avec ses bundles d'instructions par paquets de 3 6 ou 9. Ils n'ont pas réussi à monter en fréquence.

            "La première sécurité est la liberté"

            • [^] # Re: altairx

              Posté par  . Évalué à 2 (+2/-0).

              Alors Intel ou AMD ont 4 ALU (et je crois que Intel ont 5 ALU) et au total ils peuvent "théoriquement" faire du 12-16 instructions/cycles.

              Pourtant si tu mesure, tu n'aura jamais 12-16 instructions/cycle.
              Et même les 3 instructions/cycle qu'il arrivent à fournir sont pas fait de façon statique ! :)
              Et donc c'est pas avec du simple VLIW que tu arrivera Ă  faire 3 instructions/cycle.

              (Je ne dis pas que tu peux pas en faire, mais le cas sera rare).

              Alors un VLIW , c'est pas en général 8, et à vrai dire 8 instructions/cycles ,c'est totalement inutile (sauf pour un DSP et encore) , le VLIW de la PS3 (le CELL ) c'était 2 instructions/cycles.
              Et J'avais vu que celui de Crusoe c'Ă©tait 4 bref.

              Le truc c'est que je viens d'écrire un article pour linuxfr qui expliquera tout cela , mais oui si j'ai envie je peux très bien faire 8 instructions/cycle, c'est pas très compliqué et je fumerais n'importe quel AMD et Intel dernière gen !

              Si c'était aussi simple tout le monde le ferait ! :D

              Non le truc c'est que tu n'extrairera jamais autant de parallélisme sur du code, j'avais lu un gars de chez IBM qui disait que sur le code de Linux il arrivait pas à extraire plus de 2 instructions/cycle.

              Surtout que 8 instructions/cycle ,c'est peu probable , on considère que tu as 20% de code qui sert pour les boucles.
              Donc techniquement les 8 instructions serait du code séquentiel.

              Meme un simple code comme :

              if (a == b)
              return 1;
              else
              return 0;

              Tu le rentrera jamais sur un bundle de 8 instructions/cycle ;)

              Pour la montée en fréquence , c'est pas tant le soucis de son ISA ou de son architecture, mais je pense que son fetch élevé le ralentisser tout simplement dans la montée en fréquence.

              Je pense qu'ils ont visé beaucoup trop haut pour l'itanium (faire du 6/9 instructions/cycle est complètement fou).
              .

              Alors il était quand même pensé pour du conditionnal move, mais ça gonflait un peu le nombre d'instructions, vu le nombre d'itinération à faire.

              Le soucis des vecteurs variables risc v ,c'est que c'est bien pour des boucles d'instruction SIMD , regarde juste un peu les pratiques des instructions SIMD , leur cas sont bien plus différents que les exemples que RISC-V fasse.

              De ce que j'ai compris, le gars a bien aimé les ordinateur sous cray et tente de refaire ça sur RISC-V, c'est cool , mais de là à dire que ça fait mieux que du SIMD bof.

              Je pense personnellement que l'handicapera parce que souvent les instruction SIMD et non SIMD sont mélanger et surtout, ils sont pas forcément utilisé dans des boucles toute faite.
              Un compilateur actuel peut te mettre du SIMD pour un simple bout de code sur du x86 ou de l'ARM (Neon).

              Les vecteur RISC-V seront incapable de faire ça ,vu qu'ils sont pas pensé pour cela.

              • [^] # Re: altairx

                Posté par  (site Web personnel) . Évalué à 3 (+0/-0).

                En 2000, l'ilp moyen était donné autour de 2.4. Donc arriver à 3 est déjà bien. Tu peux augmenter l'ilp en faisant des instructions étudiées pour diminuer les dépendances read after write.

                VLIW c'est surtout le dsp c6x de TI, avec ces 8 instructions. C'Ă©tait utile dans les grosses boucles type fftw ou du filtrage.

                2, 3 ou 4 instructions, c'est plus LIW. Cela n'est pas vraiment "very large".

                Pour la gestion de boucle, les compilateurs les déroulent jusqu'à 16 fois pour augmenter le parallélisme et le ratio du code utile vs le code de gestion.

                Le gros avantage des vecteurs risc v est l'augmentation facile du parallélisme. Tu n'es pas obligé de changer d'isa pour gérer 4,8 ou 16 float en meme temps.

                "La première sécurité est la liberté"

                • [^] # Re: altairx

                  Posté par  . Évalué à 1 (+1/-0). Dernière modification le 29/05/23 Ă  14:04.

                  "2, 3 ou 4 instructions, c'est plus LIW. Cela n'est pas vraiment "very large"."

                  La définition est valide pour tout les processeurs faisant plus que un, le CELL est VLIW , le crusoe aussi, même s'il ne font que 2 et 4 respectivement.

                  Si les DSP font bien plus, c'est parce qu'ils traitent des données bien particuliers.
                  C'est un peu le soucis des processeurs généraliste, un VLIW à 8 est overkill.

                  A la base mon processeur était pensé pour du 4 instructions, pourquoi j'ai abandonné cette idée ?

                  Parce que comme je te l'ai dit, sur du code, c'est compliqué d'extraire autant de parallélisme.
                  Donc ce que tu dis j'y ai pensé , mais j'ai abandonné l'idée pourquoi ?

                  Parce que de un ,j'ai pas de compilateur qui fournit 4 instructions/cycle,donc pourquoi le mettre , surtout que cela complexifierai pas mal de chose :

                  • Je dois faire beaucoup de Multiplexing

                  • Mon read/write register est doublĂ©

                  • Je dois mettre plus d'unitĂ© de calcul

                  -je dois fetch plus

                  -aucun gain sur les conditions (qui représente quand même 25% du code)

                  La fabrication de processeur, c'est pas rajouter et dire "ça va ,plus c'est gros , plus ça passe" , je suis pas Intel et je ne pourrais pas graver un gros processeur,donc je dois choisir un truc "raisonnable", et intéressante.
                  Et donc sur 2 instructions, non seulement le processeur est simpliste, mais en plus le compilateur le gère parfaitement bien.

                  Alors je pourrais le faire évolué par la suite à un bundle de 4, le processeur est pensé pour ,vu que de base j'étais parti sur ça (j'ai fait 4 -> 2 pour être exact).

                  Mais comme faire 4 instructions par bundle complexifierai un peu le processeur, je me suis dit autant partir sur quelque chose de plus efficace, de gérer 2 instructions statiquement et 2 dynamiquement.

                  Je pourrais pas forcément tout expliqué en détails ici de ce choix , mais pour moi , c'est complètement illusoire de penser gérer tout les cas de façon purement statique (et pourtant j'étais persuadé que y'avait moyen).

                  Alors je ne suis pas vraiment fermé à un 3 instructions/64 bits , mais faudra faire une analyse du compilateur et voir quand il peut en fournir et avec quel pattern d'instruction.

                  "Tu peux augmenter l'ilp en faisant des instructions étudiées pour diminuer les dépendances read after write."

                  Alors mon processeur peut éviter le RAW assez simplement, parce que les bypass sont explicite ;)
                  Pour cela aussi que 2 instructions/cycle est parfaitement gérer, parce que les RAW sont facilement évitable sur mon proc.

                  Et sinon les dépliages de 16 sont une abération, si tu regarde les optis -O2 est souvent bien plus efficace que le -O3.

                  Si tu déplie la moindre boucle, tu gonfle le nombre d'instruction ,donc le i-cache en souffre, et si la boucle n'est pas assez grosse, le gain est négatif.

                  Alors oui ,en VLIW t'as pas trop le choix de partir sur ce point là , mais comme mon but est de trouver d'autre solution aussi, je trouve cela dommage de déplier une boucle de 16 alors que avec quelque info donné sur le processeur,il peut le faire tout seul comme un grand :)

                  Voilà mais j'expliquerai vraiment tout ça en détails sur un prochain article.

                  • [^] # Re: altairx

                    Posté par  (site Web personnel) . Évalué à 3 (+0/-0).

                    Les boucles sont déroulées sous x86 aussi. As tu mesuré du code réellement plus lent -o3 qu'en -o2 ?

                    Concernant le cpu, je pensais surtout à définir l'isa comme 64 bits. Mais avec 4 lectures et 2 écritures de registres, tu peux faire ainsi 2 instructions classiques ou des trucs beaucoup moins ("load load", MACC,…) qui se ferait avec 2 ou 3 instructions habituellement.

                    Attention aux bypass explicit, c'est un mauvais plan si tu veux garder une compatibilité binaire et changer d'architecture.

                    "La première sécurité est la liberté"

                    • [^] # Re: altairx

                      Posté par  . Évalué à 1 (+1/-0).

                      ça m'arrivait d'en mesuré des plus long en -O3,donc pour les optimisations importantes, je met souvent des "attributes" pour mettre des optis spécifique à mes fonctions ,certaine s’optimise plus en -O2 d'autre en -O3.

                      Faire un ISA 64 bits, c'est déjà un peu le cas ,(pour faire des gros move immediate , pareil pour l'addition/immédiate etc).
                      Et j'avais pensé peut être le faire avec des SIMD.

                      Pour 3 instructions toujours à voir, mais le truc, c'est que ça me fait environ 20 bits par instructions, et j'ai 64 registres donc…

                      non seulement ça prendra pas toute les instructions , mais en plus je suis limité en instruction (bon pour voir sur RISC-V , c'est les instruction basique ADD/SUB et compagnie).

                      Mais ça me rajoute un décodage à rajouter en plus et un peu plus de Read/write register, du coup ben ça dépend du compilateur.

                      "Mais avec 4 lectures et 2 Ă©critures de registres, tu peux faire ainsi 2 instructions classiques "
                      C'est ce que fait le CPU actuellement , il a 2 ALU ,2 FPU ,2 LSU , donc il peut exécuter les deux en // sans soucis.
                      Et avec le bypass, y'a pas de soucis de RAW/Stall/

                      Mais oui ,je sais que le bypass explicite est mauvais.
                      Mais dans tout les cas le VLIW est plutĂ´t mauvais pour Ă©voluer sans tout casser.
                      ça a son avantage et son inconvénient , on va dire.

                      Pour être honnête, je pense partir sur un VLIW 2 instruction/cycle boosté à mort (64 registre /bypass) etc etc , déjà c'est pas mal.
                      Vu que si on arrive à même avoir du 1-2 instructions cycle souvent , ben c'est déjà aussi bon qu'un Intel de 4700 par exemple ! :)

                      Et pour la suite partir sur un autre avec un ISA/et autre feature pas forcément compatible mais qui pourra monter à 3-4 instruction/cycles.

                      Et je le rappel que 3-4 instructions/cycle ,tu es bien meilleurs qu'un Intel et AMD ,si t'arrive a tenir ce rhytme d'instructions ;)

                      • [^] # Re: altairx

                        Posté par  (site Web personnel) . Évalué à 3 (+0/-0).

                        Si tu as 4 lectures regitres tu peux avoir une des ALU à 4 entrée par exemple.

                        Ajouter un adder Ă  un multiplieur ce n'est pas grand chose en taille non plus.

                        Tu peux aussi inventer un concept d'ISA compatible après recompilation mais avec des éléments d'architectures fixes.

                        Intel arrive a avoir 3 ou 4 instructions par cycle, en ayant une pointe à plus de 12 !!

                        "La première sécurité est la liberté"

                        • [^] # Re: altairx

                          Posté par  . Évalué à 1 (+1/-0).

                          "Tu peux aussi inventer un concept d'ISA compatible après re compilation mais avec des éléments d'architectures fixes."

                          Oui c'est mon idée en long terme !
                          Et j'y travaille , je l'ai mis ici :
                          https://docs.google.com/spreadsheets/d/19nOBbH_4KWaXxDSNA4JuZjaBble0VRrBxcVlEjTZ3iI/edit

                          L'avantage , c'est que tu peux mettre des intresics complètement "inventé" , vu qu'on peut ensuite l'implémenté comme en veut

                          "Intel arrive a avoir 3 ou 4 instructions par cycle, en ayant une pointe à plus de 12 !!"

                          Alors j'ai pas calculer leur pointe , 3-4 instructions/cycles c'est la moyenne,s'ils ont des pointes à 12, ça veut dire qu'il y'a de gros stall.

                          En gros si t'as 12 instructions/cycle à un moment et que la moyenne est de 3 , ça veut dire que t'as 3 cycles ou tu ne fais rien.
                          Et lĂ  on parle d'un Intel 10 eme gen minimun.

                          Du coup autant faire 3 instructions/cycle continu non ?

                          "Si tu as 4 lectures regitres tu peux avoir une des ALU à 4 entrée par exemple.

                          Ajouter un adder Ă  un multiplieur ce n'est pas grand chose en taille non plus."

                          J'ai pas tout compris , mais je ne pense pas que l'espace commentaire (pour un article sur mon SDK sur la Neo Geo) soit aussi le plus adapté pour expliquer tout en détails.

                          • [^] # Re: altairx

                            Posté par  (site Web personnel) . Évalué à 3 (+0/-0).

                            Les "stall" ne sont plus un si gros problème à cause de l'énergie, Intel est obligé de diminuer la fréquence quand les instructions simd 512 bits sont utilisées.

                            Du coup autant faire 3 instructions/cycle continu non ?

                            Cela ne suffit pas quand un simple load te prend 80 cycles.

                            J'ai pas tout compris , mais je ne pense pas que l'espace commentaire (pour un article sur mon SDK sur la Neo Geo) soit aussi le plus adapté pour expliquer tout en détails.

                            C'est pas faux. L'idée est d'avoir des unités de calcul qui ne se limite pas à 2 entrées.

                            "La première sécurité est la liberté"

                            • [^] # Re: altairx

                              Posté par  . Évalué à 0 (+0/-0).

                              "Cela ne suffit pas quand un simple load te prend 80 cycles."

                              Si tu es un tel cas , je pense pas que le VLIW 8 instructions/cycle soit la solutions ;)

                              Ce qui permet d’exécuter autant c'est parce qu'il a un window + exécution dans le désordre.

                              "C'est pas faux. L'idée est d'avoir des unités de calcul qui ne se limite pas à 2 entrées."

                              Ok je comprend ! ;)

                        • [^] # Re: altairx

                          Posté par  (site Web personnel) . Évalué à 8 (+5/-0). Dernière modification le 30/05/23 Ă  11:20.

                          Bonjour Nicolas,

                          Une dépêche est en cours de rédaction sur le sujet si tu veux nous donner un coup de main :-)

                          https://linuxfr.org/redaction/news/altairx-le-cpu-du-futur

                          Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.

  • # CRT ?

    Posté par  (site Web personnel, Mastodon) . Évalué à 2 (+0/-0).

    un qui est un CRT pour Ă©mulateur

    Algorithm to simulate a CRT => C Run Time ?

    Je passe peut-être à coté de quelque chose, mais j'avoue n'avoir pas vraiment compris de quoi il s'agit…

    • [^] # Re: CRT ?

      Posté par  (site Web personnel) . Évalué à 5 (+3/-0).

      CRT , c'est le nom abrégé des tubes cathodiques des anciens moniteurs.

      Si tu as connu et que tu regardes les screenshots du projet, tu vois tout de suite de quoi il s'agit :)

      https://github.com/Kannagi/CRT

      Discussions en français sur la création de jeux videos : IRC freenode / #gamedev-fr

      • [^] # Re: CRT ?

        Posté par  (site Web personnel, Mastodon) . Évalué à 4 (+2/-0).

        c'est le nom abrégé des tubes cathodiques des anciens moniteurs.

        Roohhh, la honte ! Cathode Ray Tube ! Et dire que j'ai une Trinitron 44cm en attente de SNES :)

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.