The tools are free, from Microsoft, but they are the worst programs ever.
For example, MS didn't really bother to implement some libraries in the emulated Pocket PC, so I had to download some 3rd party libs that had no documentation whatsoever, so it was a lot of guesswork involved.
Basically, I had to copy a DLL file in the root of the emulated Pocket Pc device.
That's not a big deal, however, the moron who wrote that emulator (because I can not call him anything but a moron) did not think it would be nice to actually be able to SAVE the files on that emulator. So what happens is, when it crashes (which happens quite often) restarting it will clear all it's memory, so you'll have to reinstall all the files again...
Now, in all fairness, it does have an option to save the current state. Only that using that option somehow prevents the IDE from connecting to the emulator...
No wonder there are not so many programs for an otherwise great platform.
Yesterday I've spent a few hours trying to get SDL to work on it. I couldn't, there was virtually no documentation, no nothing.
So I just gave up and decided to use GAPI, which is some low level, rudimentary API for accessing the screen buffer. There were some other libraries out there, but they were C++, and I was looking for a C library.
On a positive note, I've been able to compile a GAPI sample and get it running on the emulator, and on an actual device.
The problem with the actual device is that, if I keep it docked, it crashes my computer (the whole Windows freezes).
So unless I want to restart my computer every few minutes, I have to use that idiotic emulator that is a huge time sink, and a source of terrible frustration...