Archive for the 'misc. coding' Category

Super Nintendo

Saturday, October 6th, 2007

Salut !

Après avoir essayé de programmer NES, j’ai trouvé que c’était pénible, principalement à cause du processeur 8 bits et du PPU (Processeur d’image) limité et difficile à manipuler.

Super Nintendo

La semaine dernière, j’ai donc voulu essayer de programmer sur cette console de légende qu’est la Super Nintendo. Les spécifications techniques (voir article Wikipedia) m’avaient toujours donné envie, mais j’avais été rebuté par le fait qu’il faille programmer en assembleur, et par la réputation qu’a la SNES d’une console difficile à programmer. Et quelle bonne surprise ! La Super Nintendo (SNES) est vraiment une console sympa à programmer:

  • Processeur 16bit 65816. C’est une évolution 16 bits du 6502 de la NES, avec quelques opcodes en plus. C’est donc très semblable, et quand on connait le 6502, c’est facile d’apprendre à maitriser les quelques nouvelles instruction et modes d’adressage, et c’est très agréable d’utiliser (enfin !) du 16 bit. En effet, le 16 bit permet de manipuler des nombres jusqu’à 65355, contre 255 pour le 8 bits: c’est une nette amélioration pour l’adressage de la mémoire, et les opérations arithmétiques.
  • 128k de mémoire vive.
  • Le PPU n’a rien à voir avec celui de la NES. On passe ici à une profondeur de 16 bits, avec au maximum 256 couleurs simultanément. Les sprites peuvent maintenant faire de 8×8 à 64×64 pixels, et utiliser 16 couleurs chacun. La taille de la VRAM a été aussi démultiplié, puisqu’on arrive à 128Ko (c’est même plus que la GBA!). On apprécie les différents modes proposés (plusieurs BG à différentes profondeur). De nombreuses possibilités sympathiques sont présentes, comme le HDMA ou la fusion de plans.
  • De nombreux programmes sonores disponibles sur internet.
  • Un style de gestion du hardware qui se rapproche de la GBA, et qui est bien plus “programmer-friendly” que la NES.

Il s’agit donc véritablement d’une bonne console, et après m’être amusé avec, je comprends mieux pourquoi on y trouve d’aussi nombreux jeux, et pourquoi certains se sont hissé au rang de légende.

Néanmoins, il reste des points négatifs, qui ralentissent nettement le développement:

  • Programmation uniquement en assembleur. Il n’existe pas de compilateur supportant toutes les possibilités du CPU de la SNES.
  • Système de switch 16bit/8bit plutôt pénible. En effet, il est souvent nécessaire d’accéder à des registres en mode 8 bits, tout en manipulant des données 16 bits, ce qui conduit à une utilisation assez intensive de la stack.
  • Toujours un seul registre supportant les opérations arithmétique (A).
  • Organisation de la mémoire compliquée, et assez mal gérée par l’assembleur (WLA DX).
  • VRAM/CGRAM/OAM non mappés au bus principal: on doit passer par des registres pour y écrire.

Si vous aimez programmer en assembleur, sur de “vieux” systèmes, je vous conseille vraiment la Super Nintendo.

Liens dont je me suis servi (tout est en anglais):

Voilà voilà ! :)

Vidage de poubelle 3: ndsim

Monday, June 18th, 2007

Je continue, et cette fois ci je sors de ma poubelle les sources d’un de mes plus gros projets…

C’est ndsim, mon projet de messagerie instantanée multi-protocole sur DS. Mon premier gros projet en fait. Je l’ai abandonné pour cause de perte de motivation dans l’idée. Ce programme ne m’intéressait plus, et je n’en voyait plus l’intéret.

Ce projet contient: un système de plugin, diverses fonctions d’affichage, diverses fonctions d’échange entre les CPU, des fonctions de lecture/écriture sur le firmware, un gui affreux, un gestionnaire de protocoles/sessions, …

Ces sources sont à priori incompréhensibles car très peu commentées et assez barbares par certains endroits. La dernière modification sur ce programme date de juillet 2006. Ces sources sont libérées sous license “demander-avant-d’utiliser/ask-before-using” (si jamais que quelqu’un trouve ça utilisable).

Sources: http://thoduv.drunkencoders.com/poubelle/ndsim.zip

Vidage de poubelle 1: libsimsn

Monday, June 18th, 2007

Voilà, j’ai décidé de vider un peu ma poubelle à projets pas finis et de mettre les sources à disposition, ca me donne moins l’impression que je les ai fait pour rien ! ^^

Je commence donc avec libsimsn qui est une lib multi-platforme permettant d’accéder au protocole MSN (dans sa version 9). Je l’aie testée sous Linux, Windows et Nintendo DS: elle était à la base prévue pour être le plugin MSN de Ndsim. Elle dépend de la lib MatrixSSL pour la connection sécurisée. Cette lib est elle aussi portable, et est sous license GPL. Par conséquent, les sources de libsimsn sont sous license GPL.

La dernière modification à ce programme date du 2 février 2006, le protocole MSN a évolué depuis, et il se peut que certains élements de la lib soient obsolètes.

Au niveau des fonctionnalités, cette lib n’est pas complètement terminée. La connexion fonctionne, mais le système Passport est très mal géré, le support du NS (Notification Server) est à peu près complet, celui de la liste de contacts également, mais la partie gérant le SB (Switch Board) n’est pas achevée.

Si vous êtes curieux, voilà donc la source (GPL).

Sources: http://thoduv.drunkencoders.com/poubelle/libsimsn.zip

Ethernes, quick try of writing an emu…

Thursday, June 8th, 2006

Hi ! :-)

For last two weeks, I worked on a small project of NES emulator for PC. I had never coded an emu before, and it was a great experience and training. I don’t have time to continue this project, and it was designed to be a quick project, for training purposes (before working on Desmume).
Working:

  • 6502 core (documented instructions only). All instructions seems to be working.
  • PPU cycling and Vblank, BG display (There is a bug with color tables).

Not working:

  • PPU sprites.
  • Commercial games (even Mario crashes :-( ).

My computer’s CPU is 1,5Ghz and I get a framerate of 150fps with this emu: I think it’s not good, seeing the NES’ cpu is about 1Mhz.

You can have a look at the source code (C++) here: http://thoduv.drunkencoders.com/ethernes/ethernes.zip

If you are skilled in emu developpement, and you see in the code some things that are bad in coding an emu, you can told me ! :-)

Enet, une petite lib pour simplifier le réseau

Tuesday, May 16th, 2006

Salut !

Si vous êtes programmeur débutant et que vous voulez programmer un jeu Wifi, vous ne savez probablement pas comment vous y prendre. Ou si vous n’avez tout simplement pas envie de vous plonger dans du code réseau compliqué, j’ai crée une petite lib pour rendre celà plus simple à utiliser.

La librairie fonctionne en surcouche d’une interface de sockets de type Berkleys (fonctionne avec Dswifi ou sous Linux), et corrige également un petit bug actuel de Dswifi (dans gethostbyname).

Pour l’instant, elle incorpore deux modules : TCP et HTTP. Le module TCP permet de communiquer en TCP avec un serveur ou de créer simplement un serveur TCP sur la DS. Le module HTTP (pas encore achevé, ni documenté, mais utilisable : se referer à l’exemple) permet de créer très simplement un requête HTTP (GET) afin de récuperer une page Web.

Télécharger Enet 0.1 : http://thoduv.drunkencoders.com/enet/Enet-0.1.zip
Quelques exemples : http://thoduv.drunkencoders.com/enet/Enet-examples.zip
Documentation (fr) : http://thoduv.drunkencoders.com/enet/docfr

J’espere que ca pourra servir ! :)