In the old days, I made programs on the Commodore 64 on the machine itself. Typing in listings in basic at first, writing assembly statements in the Final Cartridge III monitor later. Adding graphics meant drawing the (not so) pretty pictures using C=64 software, saving them to tape, then merging it back into the program I wanted to use them in and saving the result back to tape again.

This way of doing things had the advantage it almost took longer to execute the save-merge-save than it took to make the pictures. Having only a tape drive and graphics software which didn't use a turbo save was a great way to learn lots and lots of patience.

Fast forward slightly over two decades and the world has changed (nothing to make you feel old like remembering just how long ago it really was that I used my first C=64). Now you can get all sorts of rather cool software for your favourite modern platform to make C=64 related goods.

Ranging from assemblers, C compilers, graphics editors, sound editors, all-in-one packages, you name it, it exists. And if what you want doesn't exist, modern computers have great development environments for you to make your own tools.

In this article I'll show what I use for cross development and offer some more options for cross development. My development environment is Windows based, so software suggestions are primarily for the Windows platform. If you wish to learn more about the various tools listed or download them, just click on the links in the text. These point to the homepage or download location of the various tools. All but one of the programs listed are free, most are open source.
The 1541 Ultimate I cartridge, with SD Card installed
Above: the 1541 Ultimate I cartridge, with SD Card installed.
Assembler:
Originally I used the Win2C64 assembler, which is a good no-nonsense 6502 assembler. It does not support macros, but does all the basics. Nowadays I've switched and am using the ACME assembler. ACME is a great, full featured assembler. It features support for multiple processor types (including the 'SuperCpu' 65816), conditional assembly, zones (which allow reuse of local labels) and extensive support for macros.

Other good options to use as assembler include DASM, which also has a large feature-set and Kick Assembler, which is even more complete and is Java based.

Graphics:
Depending on the type of graphics you wish to create, there are several options. For bitmap graphics in all the formats (hires, multicolour, FLI, etc) there are generally more options than for sprites or character graphics. Most character editors are meant for creating tile-maps, which may or may not suit your purposes.

For bitmap graphics I use Project One, a nice lightweight editor with support for all the major graphics modes as well as custom modes. It's great for pixeling, but does not offer things like drawing lines, circles or other complex shapes. It does offer filling and the use of a dithered brush. I use it because I prefer pixeling to drawing - your mileage may vary, I am a programmer first and not really an artist.

Other good options for bitmap graphics include Oxide paint, with more drawing tools and a C=64 .prg generator and Timanthes, which has far more features and drawing tools than the others, but is harder to use as a result.

There are also plenty of sprite editors available. The one I use at the moment is Spritepad, which seems to offer all I need in a convenient, easy to use package. Other options include the 7up Sprite Editor, which offers support for drawing large objects consisting of multiple sprites.

Character based graphics is both easy and hard to find editors for. Most editors I've seen so far are based on editing tilemaps, which works but is not that optimal if you just want to create a characterset. At this moment I am using my bitmap editor to create characters, extracting the data I need from the bitmap.

Other options include Charpad, which works very well, but is designed as a 4x4 tilemap editor (the new version in the works will offer tiles of other dimensions as well) and Cartograph PC, which already offers 1x1 mode but is still based on editing a tilemap*.

Sound:
Where I am not a painter, but can still make the odd functional picture for use in my programs, I am definitely not even close to any sort of musician. Therefore, my experience with sound editing tools on the PC or C=64 is well, limited**. That said, I did some searching and found a likely suspect to use. And despite some hefty googling, it really does seem to be the only available cross-platform tool.

That suspect being GoatTracker, which seems to include everything, the kitchen sink and more features. Since I am no good at creating music, I have no experience with these tools. The site and reactions on forums seem to echo a really positive vibe, so I'm pretty convinced it'll work out well.

Testing:
My own tools of choice for testing and debugging C=64 creations are the various emulators about. I personally use Vice, an open source cross platform emulator which supports a multitude of 8 bit Commodore computers. This works very well and supports stuff like breakpoints and step-by-step debugging. However, it is important to realise that emulators are not 100% accurate. So some things may work well on them that does not work well on a real C=64 and vice versa.

Other options for testing and debugging include Hoxs64, which aims to be even more accurate, CCS64, a shareware emulator and Frodo, which is also cross platform and open source.

Other:
There are other tools, which offer a more integrated experience or offer an IDE for your projects. Relaunch 64 is one I use myself for editing source code, it is convenient because it includes syntax highlighting for a variety of assemblers and offers options to assemble and run the emulator for you (setting this up can be complicated however and may require you to use a specific folder structure).

Another honourable mention goes out to C64 .prg Studio, which includes a whole lot of tools in one integrated package. Included are a sprite editor, a characterset editor, a basic editor, an assembler, D64 editor and integration with emulators so you can test easily. The assembler is rather basic, but functional (though a word of warning is in order, the version I tried didn't handle operators on labels properly if you used an indexed addressing mode so LDA label+1,X didn't work as expected). All in all a great package for smaller projects!

Transfer to / from C=64:
Getting your projects to the C=64 can be tricky, as the default machine comes without ethernet and USB and, strangely enough, modern PC's do not sport 1541 disk drives or 1530 datasettes. So, alternatives are needed.

The solution I use is based around the 1541 Ultimate. The 1541 Ultimate emulates a 1541 disk drive by reading disk images from an SD/MMC card (the 1541 Ultimate II uses MicroSD instead, the 1541 Ultimate II+ uses USB memory sticks). So all you need to do to get your program on the C64 is put the disk image on the SD card. Very handy.

Similar devices exist with differing feature levels. Such as the 1541-III, which is cheaper but has less features than the 1541 Ultimate or the IDE64, which allows a CD-ROM or Compact-Flash card to be used.

Other alternatives include network based devices, such as cartridges which are RR-Net compatible or cables from the PC / Mac to a 1541 disk drive such as the 1541XE.

*) Obviously, this is not a bad thing per se and both programs work well. However, if you wish to plainly create a characterset, the map-based mentality of these programs can prove to be an unnecessary layer of complexity.

**) Meaning I never got further with sound editors than playing with the built in barking dog sample and changing its pitch in amusing ways, or attempting to recreate Frère Jacques. With said dog sample.