Entretien avec Kannagi Ă  propos de NGDK

36
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 (Mastodon) . ÉvaluĂ© Ă  3.

    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. DerniĂšre modification le 25 mai 2023 Ă  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.

      Ce post est offensant ? Prévenez moi sur https://linuxfr.org/board

  • # En vivre

    PostĂ© par (site web personnel) . ÉvaluĂ© Ă  4.

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

    Ce post est offensant ? Prévenez moi sur https://linuxfr.org/board

  • # À propos du projet CPU

    PostĂ© par . ÉvaluĂ© Ă  10.

    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 libera / #gamedev-fr

    • [^] # Re: À propos du projet CPU

      PostĂ© par . ÉvaluĂ© Ă  5.

      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.

    Le fabricant du Z80 est Zilog (et non Zylog)

  • # Quelques coquilles et interrogations

    PostĂ© par . ÉvaluĂ© Ă  3.

    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Ă© Ă  10. DerniĂšre modification le 25 mai 2023 Ă  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.

      Ce post est offensant ? Prévenez moi sur https://linuxfr.org/board

      • [^] # Re: Quelques coquilles et interrogations

        PostĂ© par . ÉvaluĂ© Ă  5. DerniĂšre modification le 25 mai 2023 Ă  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 (site web personnel) . ÉvaluĂ© Ă  2.

        oui tu sous entends que c'est un pb car la VRAM est toujours en moindre quantité que la ROM.
        oui avec la VRAM on peut faire de l'image calculĂ©e. Peut-ĂȘtre pas suffisamment exploitĂ©e. Mais alors pourquoi ce choix ? La RAM c'est cher.
        j'avais jamais tilté que la ROM n'était pas accessible, aujourd'hui tout est est plat dans l'espace d'adressage. Cela aurait été pratique pour gérer un background par exemple.

        Je savais pas que la neo-geo avec son NDK
        Je savais pas qu'un développeur web pouvait faire autant sur de l'embarqué, et encore moins s'intéresser au méandre d'un microprocesseur. :D

        Merci pour cette interview. Toujours intéressants ce sujet des kits pour consoles.
        La prochaine le fameux CD qui by-passait le bios de la dreamcast ?

    • [^] # Re: Quelques coquilles et interrogations

      PostĂ© par . ÉvaluĂ© Ă  5.

      "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.

        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.

          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.

        Corrigé, merci.

  • # Quelques petites coquilles

    PostĂ© par (site web personnel) . ÉvaluĂ© Ă  6.

    [...] 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, Mastodon) . ÉvaluĂ© Ă  1.

    le M68000 était partout, sur console comme la sur Drive,

    comme la Mega Drive ?

  • # altairx

    PostĂ© par (site web personnel) . ÉvaluĂ© Ă  4.

    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.

      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.

        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.

          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.

            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.

              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.

                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. DerniĂšre modification le 29 mai 2023 Ă  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.

                    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.

                      ç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.

                        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.

                          "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.

                            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Ă© Ă  1.

                              "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. DerniĂšre modification le 30 mai 2023 Ă  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

                          Ce post est offensant ? Prévenez moi sur https://linuxfr.org/board

  • # CRT ?

    PostĂ© par (site web personnel, Mastodon) . ÉvaluĂ© Ă  2.

    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 . ÉvaluĂ© Ă  5.

      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 libera / #gamedev-fr

      • [^] # Re: CRT ?

        PostĂ© par (site web personnel, Mastodon) . ÉvaluĂ© Ă  4.

        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 :)

Suivre le flux des commentaires

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