Super Nintendo

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

Lapinou jumps: classement et bugs

August 15th, 2007

Petite mise à jour de Lapinou, avec un système de codes permettant de s’enregistrer en ligne, et quelques corrections mineures de bug. Création d’un mini-site.

Par là: http://thoduv.drunkencoders.com/lapinou/ 
Lien direct pour télécharger la dernière version: http://thoduv.drunkencoders.com/lapinou/lapinou150807.zip

Lapinou jumps ! - Version 1

August 1st, 2007
Lapinou jumps !
Version “1″
(présentée à la compo Dev-Fr: sujet)

- Programmé par THODUV.
- Graphismes par NHUT.

Présentation:
Lapinou est un gentil petit lapin “carrotivore” qui se trouve, pour une raison que personne jusque là n’a pu expliquer, coincé dans une sorte de tour infernale, entre deux bords d’écran. Mais n’ayez crainte pour notre ami rongeur, qui bien qu’ayant une alimentation peu variée, est plutôt dégourdi et rusé. A force de réflexion, celui-ci a donc trouvé la solution à son emprisonnement: cette solution est simple, il s’agit de monter. Monter ? Eh oui, tiens justement, je vois d’étranges blocs de terres comme suspendus au milieu du vide par une force divine fort favorable à la survie de l’espèce des lapins, qui commme vous le savez, est nécessaire pour la bonne régulation de la quantité de carottes dans l’écosystème, mais bref. Plus étonnant encore, ces fameux blocs magiques semblent indiquer un chemin, former un escalier vers la liberté de notre cher Lapinou. Alors il prend son courage avec ses deux oreilles, s’échauffe les pattes, et commence à bondir de blocs en blocs. Mais horreur: il s’avère que ceux-ci sont plutôt du genre fragile et s’effritent rapidement sous le poids du rongeur dopé au jus de carotte… Votre mission (si vous l’acceptez): incarnez ce lapin en détresse, et rendez-lui sa liberté.

Images:

Screenshot Screenshot

Téléchargement:
http://thoduv.drunkencoders.com/lapinou/lapinou_devfr.zip

Vidage de poubelle 3: ndsim

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 2: tgba

June 18th, 2007

Je continue à vider ma poubelle…

Cette fois-ci, c’est tgba. Il s’agit d’un début (tout début) “d’émulateur” de GBA sur DS, que j’ai eu le temps d’écrire avant de me rendre compte de l’inutilité de la chose.

Il ne s’agit pas vraiment d’un émulateur, mais plutot d’un “virtualisateur”. Le programme GBA est lancé sur l’ARM9, comme s’il s’agissait d’une GBA, mais avec des options de protection de la mémoire spéciales, ce qui permet le lancement d’une exception à chaque accès -par exemple- aux registres IO. On émule alors l’instruction responsable de l’accès, afin de le rediriger vers les registres de la DS. L’émulation THUMB est fonctionnelle, l’émulation ARM n’émule qu’un seul opcode. L’exception handler écrit en assembleur fonctionne. Le point majeur de travail resant serait la gestion des interruptions (IRQ) et des SWIs.

La dernière modification sur ce programme date du 24 avril 2007. Ce programme est releasé sous license WTFPL.

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

Vidage de poubelle 1: libsimsn

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

Update on my Wiimote things…

January 4th, 2007

Here: http://thoduv.drunkencoders.com/wii/wiimote_04012007.tar.gz (source, GPL)
It includes:

  • wiimote.c: Functions to communicate with the Wiimote. Supports buttons, leds, rumble, memory reading/writing, IR (broken, or works sometimes, weird…), accelerometter reading (just receiving x,y,z. I don’t have math skills for more), expansion port control and init (can’t do much as I don’t own any Nunchuk nor Classic controller), basic speaker init (limited to the status of knowledge about the speaker),…
  • ir_test: SDL display of IR dots (needs SDL)
  • motion_test: OpenGL display of accelerometers axes (needs OpenGL)
  • exp_test: Allows to detect the presence of an expansion device and to init the device.
  • mii_tool: Small tool for reading/writing Miis (write seems to be broken though).
  • speaker_test: Plays a annoying note through the speaker (sometimes it doesn’t work) (Based on Carl Kenner discoveries) (uses SDL for timing).

Playing with Wiimote / Bidouilles avec Wiimote

December 17th, 2006

Even if I don’t own a Wii now, I bought a Wiimote, and I’m doing experimentation with Bluetooth. Here’s a small demo thats dumps and injects Miis of a Wiimote (Linux only):

mii_tools (source, GPL): http://thoduv.drunkencoders.com/wii/mii_tool_17122006.tar.gz (needs bluetooth headers).

You’ll need a Bluetooth adapter and bluetooth modules loaded.

WARNING: If the reading functionnality works well, I did less testing on writing (at worst, your Miis may be deleted from the Wiimote). Feedback may be appreciated.

Même si je n’ai pas encore de Wii, j’ai acheté une Wiimote, et je fais quelques bidouilles avec du Bluetooth. Voilà une petite démo qui permet de télécharger/injecter des Miis d’une Wiimote (sous Linux évidemment) :

mii_tools (source, GPL): http://thoduv.drunkencoders.com/wii/mii_tool_17122006.tar.gz (nécessite les headers bluetooth).

Vous aurez besoin d’un adaptateur bluetooth et des modules bluetooth chargés.

ATTENTION: Si la lecture fonctionne, l’écriture *peut* poser problème (rien de grave, au pire vos Miis effacés de la télécommande), des retours d’expériences seraient appréciés.

DSVNC

August 21st, 2006

VNC Logo Presented at Neoflash compo, more infos and description here : http://www.neoflash.com/forum/index.php/topic,3013.0.html

UPDATE: Quote from “Buck Dodgers” on October 19th, 2007:

For people trying to get it going with new wifilib, i did this a few months ago , look on page 5 of http://www.neoflash.com/forum/index.php/topic,3013.0.html , i attached the file there. You have to login to the site though to see the attachment. it works on my newer DS lite with RealVNC 4.12 (free version). And thanks thoduv for the great program!  

Not dead !

July 12th, 2006

Hi !

No, I’m not dead. And no, since my last post, I haven’t worked on Ndsim… :( But in fact, i don’t want any more to work on Ndsim: the code is ugly, buggy, and bad organised. I’m thinking (not sure) of doing a complete rewrite of Ndsim in C++, but after my vacations: in september.

But I worked a little on Desmume, and the project is progressing good (code cleaning, bugs fixing). We opened a blog
here: http://desmume.sourceforge.net.

So, I’m not going to post news before a month or two ! Bye !

Salut !

Eh non je suis pas mort ! Et non, j’ai pas bossé sur Ndsim depuis mon dernier post… :( En fait, j’ai vraiment plus envie de continuer le projet tel qu’il est actuellement (”bon allez je m’y mets… roh fait chier ce bug… roh fait chier ce code… roh fait chier ce projet”), parce que le code est sale, buggé, et mal organisé. Je pense (donc pas sur) que je ferais une réécriture complète de Ndsim en C++, mes après mes vances, c’est à dire en septembre. En plus de ca je n’ai plus envie de programmer sur DS en ce moment (j’ai découvert la NES ! :D ), mais je vais quand même essayer de faire un petit quelque chose pour la Neocompo.
Par contre depuis la dernière fois, j’ai un peu bossé sur Desmume, et le projet avance pas mal (restructuration du code, fixage de bugs, commentage du code) et est assez actif. On a ouvert un blog ici: http://desmume.sourceforge.net.

Sur ce, je retourne hiberner ! Hein, comment ca c’est l’été ?