C64 Sprite Editor
Design sprites on an authentic 24x21 pixel grid with the real C64 colour palette
C64 Sprite Editor: draw sprites the way the hardware did
The Commodore 64 used hardware sprites, small pixel images that moved independently across the screen. This editor lets you draw them on the real 24x21 pixel grid, using the actual C64 colour palette.
Every C64 sprite was exactly 24 pixels wide and 21 pixels tall. That was not a design choice. It was a hardware constraint set by the VIC-II graphics chip. Each sprite was stored as 63 bytes: three bytes per row, one bit per pixel. The pixel was either on or off, and if on, it took the colour assigned to that sprite.
Multicolour mode allowed two extra colours per sprite, at the cost of halving the horizontal resolution. But the most distinctive C64 sprites, the ones from games like The Last Ninja, Green Beret and Paradroid, were single-colour. Clean, precise, and unmistakably C64.
Shop on Amazon
Find Commodore hardware, games, books and accessories. Browse the full range on Amazon.
Sprites in C64 games
Game characters, enemies, bullets and on-screen objects were all handled as hardware sprites. The VIC-II chip could display up to eight sprites simultaneously, each independently positioned on screen with a single write to its X and Y position registers.
Because sprites were handled entirely in hardware, moving one cost almost no CPU time. The processor simply wrote new coordinates to the VIC-II registers. The chip did the rest. This is why C64 games could have fast-moving objects without slowing the game down.
The 63-byte format
Each sprite was stored as 63 bytes in memory, starting at a pointer set in VIC-II register $07F8 plus the sprite number. The bytes were laid out row by row: three bytes for row 0, three bytes for row 1, and so on down to row 20.
To draw a pixel, you set the corresponding bit in the right byte to 1. A sprite with a solid block of pixels in the top-left would have its first byte set to $FF (all eight pixels on). This is the same format the DATA export button in this editor produces.
Programmers typically designed sprites on graph paper first, calculated the byte values by hand, and then typed them into the BASIC editor as DATA statements. The POKE loop would then read those values and write them into the sprite data area in memory.
Draw your own C64 sprite
Select a colour from the palette, click or tap on the grid to paint pixels, and use the export buttons to save your work. The DATA export copies BASIC lines you can type directly into a real C64 or emulator.
What the DATA export produces
Each row of the sprite is three bytes wide, because 24 pixels divided by 8 bits per byte = 3 bytes. The export reads each row of pixels, converts them to binary (1 for a painted pixel, 0 for empty), splits into three 8-bit groups and converts each to a decimal number.
The output is 21 lines of BASIC, one per sprite row. Each line looks like '10 DATA 0,0,0'. A sprite with nothing painted would produce all zeros. A fully painted sprite would produce all 255s.
Using the DATA on a real C64
Once you have the DATA lines, open your C64, emulator or VICE and type them in. Then add a small BASIC loader: a FOR loop that READs each byte and POKEs it into the sprite data area starting at address 832 (for sprite 0).
Set the sprite pointer, enable the sprite and set its colour and position in the VIC-II registers, and your sprite will appear on screen. The values this editor exports are exactly what the hardware expects.
The 64th byte of each sprite (byte 63) is padding and always 0. The editor does not output it, matching how most C64 sprite editors handled the format.
**** FREQUENTLY ASKED QUESTIONS ****
READY.
Explore the C64 hardware
The sprite editor uses the same pixel format as real C64 hardware. Learn more about what the VIC-II chip could do, how programmers used sprites in games, and what made the C64 graphics capabilities remarkable for 1982.
C64 Capabilities ▶

