COLECOVISION TOOLCHAIN DASHBOARD · OCTOBER 2026
Different tools, different priorities.
Amy Studio, CVBasic, z88dk, ugBASIC, devkitSMS, PVColLib, PkK's devkit, and NewColeco can all create ColecoVision software. This dashboard compares evidence, not promises.
The tests use size-oriented native settings validated for these fixtures. Occupied size excludes cartridge padding. Smaller does not automatically mean faster or better.
REPRODUCIBLE EVIDENCE
Six samples, eight toolchains plus an ASM baseline.
| Occupied ROM bytes | Pure ASM* | Amy Studio | NewColeco | PkK's devkit | PVColLib | devkitSMS | CVBasic | z88dk | ugBASIC |
|---|---|---|---|---|---|---|---|---|---|
| Hello World | 184 | 238 | 795 | 1,001 | 1,106 | 1,507 | 1,466 | 3,687 | 1,707 |
| Warrior bitmap | 3,066 | 3,257 | 3,643 | 4,691 | 4,525 | 4,713 | 4,948 | 4,976 | 16,322 |
| Controller monitor | 264 | 595 | 932 | 812 | 1,194 | 1,430 | 1,695 | 4,016 | 2,370 |
| Sprite metasprite | 343 | 983 | 1,142 | 1,413 | 1,304 | 1,681 | 1,845 | 2,607 | 6,065 |
| Gameplay state update* | 508 | 1,430 | 1,253 | 1,291 | 1,308 | 2,126 | 2,453 | 2,878 | 4,455 |
| Tile animation | 761 | 1,316 | 1,376 | 1,627 | 1,530 | 1,888 | 2,982 | 2,893 | 2,385 |
| Six-sample total* | 5,126 | 7,819 | 9,141 | 10,835 | 10,967 | 13,345 | 15,389 | 21,057 | 33,304 |
* Pure ASM is a diagnostic lower-level baseline, not a ninth high-level toolchain. State Update is behavior-validated but not yet a strict display-equivalent size ranking.
All six ugBASIC samples were rebuilt from clean intermediate directories with official ugBASIC 1.18.1 main, downloaded October 5, 2026; text-only output uses PRINT RAW. The total falls 38.1%. Gameplay State Update caches record fields and uses short-circuit nested tests; Sprite Metasprite also uses nested movement guards. The z88dk metasprite groups pattern and SAT transfers. All retain their runtime oracles. Warrior is pixel-exact through native BITMAP, CLS, LOAD IMAGE, and PUT IMAGE statements. Sources, assets, ROMs, occupied sizes, and hashes are included in one archive.
Download evidence ZIP Read detailed resultsBIOS-ASSISTED PURE Z80 ASSEMBLY
A measured lower-level baseline for all six samples.
Matching hand-written ASM implementations now cover the complete benchmark and pass their GearColeco runtime oracles. They use the same assets, codecs, BIOS services, and observable behavior allowed to Amy Studio. The six ROMs occupy 5,126 bytes versus 7,819 for Amy Studio, a 2,693-byte difference that helps identify concrete compiler and runtime optimization opportunities.
| Sample | Pure ASM | Amy Studio | ASM difference |
|---|---|---|---|
| Hello World | 184 | 238 | -54 |
| Warrior bitmap | 3,066 | 3,257 | -191 |
| Controller Visual | 264 | 595 | -331 |
| Sprite Metasprite | 343 | 983 | -640 |
| Gameplay State Update* | 508 | 1,430 | -922 |
| Tile Animation | 761 | 1,316 | -555 |
| Six-sample total | 5,126 | 7,819 | -2,693 |
The controller ROM originally occupied 297 bytes using BIOS CONT_SCAN, cartridge-side decoding, and a 16-byte keypad table. The optimized 264-byte version uses two BIOS DECODER calls and stores only the final display color. It passes neutral, keypad, held direction, FIRE, and release tests. POLLER remains appropriate when two-sample debounce is required, but its 12-byte result contract and 83-91 executed BIOS instructions per call do not improve this fixture; one DECODER segment takes 29 instructions.
The ASM result is a diagnostic baseline, not evidence that assembly is universally preferable. The State Update ASM fixture validates the complete headless workload but does not reproduce Amy Studio's additional status display.
SPECIALIZED GRAPHICS EXPERIMENTS
Useful evidence, outside the main ranking.
The evidence ZIP also contains the eight-tool PutPixel Motion fixture derived from sverx's SGlib_CV example. Seven implementations pass the motion, two-controller, and Name Table checks. For the principal controller fixture, eight controller ROMs pass, including Pure ASM, and ugBASIC is PARTIAL. Its native PLOT works while FIRE remains neutral in the specialized motion fixture. A source-only pixel, line, and circle study based on Oscar Toledo's CVBasic example is included as unranked work in progress.
AMY SOURCE + GEARCOLECO
All six benchmark cases.
Hello World
text screen
backdrop sky blue
print centered at 11, "HELLO, WORLD!"
screen on

Warrior bitmap
picture WarriorPicture:
pattern from "@project/warrior.pattern.zx0" codec zx0
color from "@project/warrior.color.zx0" codec zx0
end picture
show picture WarriorPicture
Exomizer proof: the evidence archive contains this equivalent Amy source, both .exo assets, and the exact 3,319-byte ROM for direct testing.
picture WarriorExomizer:
pattern from "@project/warrior.pattern.exo" codec exomizer
color from "@project/warrior.color.exo" codec exomizer
end picture
show picture WarriorExomizer
Controller monitor
InputLoop:
wait
if keypad(1) <> 255 then
backdrop magenta
elseif joypad(1).fire then
backdrop light red
elseif joypad(1).up then
backdrop light green
else
backdrop dark blue
end if
goto InputLoop

Animated three-color metasprite
A metasprite is one visual actor assembled from multiple hardware sprites. This example overlaps three 16x16 sprites for white, yellow, and black layers.
u8 PlayerX = 120
u8 PlayerY = 88
u8 AnimationFrame = 0
sprites simple
set sprite count 3
MainLoop:
wait
if joypad(1).left then PlayerX -= 1
if joypad(1).right then PlayerX += 1
AnimationFrame = 1 - AnimationFrame
set sprite 0 to PlayerY,PlayerX,0,15
set sprite 1 to PlayerY,PlayerX,4,11
set sprite 2 to PlayerY,PlayerX,8,1
update sprites
goto MainLoop

Gameplay state update
This deterministic six-actor workload measures state dispatch, record-array updates, timers, movement, collisions, score, and checksum rather than rendering speed.
state machine WorldBehavior:
Running calls UpdateActors
Bonus calls UpdateBonus
end state machine
ActorState Actors[6]
u16 Score = 0
u16 Checksum = 0
for Tick = 0 to 47
dispatch WorldMode using WorldBehavior
' UpdateActors handles records, timers, movement and collisions.
next

Graphics II tile animation
One shared pattern animates every star while six stationary 3x2 ships alternate tile frames through Name Table updates.
AnimationLoop:
wait
Tick += 1
if Tick & 3 = 0 then
StarFrame = (StarFrame + 1) % 3
copy StarPatterns[StarFrame * 8] count 8 to vram.pattern + StarTile * 8
end if
if Tick & 7 = 0 then
ShipFrame = 1 - ShipFrame
for Ship = 0 to 5
put ShipTiles[ShipFrame * 6] frame size 3,2 at ShipX[Ship],ShipY[Ship]
next
end if
goto AnimationLoop

GRAPHICS II COMPRESSION CORPUS
42 pictures, 15 codecs, 630 exact checks.
Every 12,288-byte Pattern + Color picture round-tripped exactly. Podiums rank first-use ROM bytes: payload plus one linked decoder. Gallery cards show the three smallest payloads and Pletter's rank when it is outside the top three.
| Rank | Codec | Payload total | Decoder | First-use places (pictures) | ||||
|---|---|---|---|---|---|---|---|---|
| 1st | 2nd | 3rd | 4th | 5th | ||||
| 1 | Exomizer 2 | 161,374 | 226 | 21 | 12 | 2 | 3 | 1 |
| 2 | ZX0 | 166,556 | 136 | 21 | 18 | 1 | 2 | 0 |
| 3 | DAN2 | 166,923 | 212 | 0 | 0 | 7 | 13 | 10 |
| 4 | DAN3 | 167,186 | 205 | 0 | 0 | 16 | 5 | 11 |
| 5 | DAN1 | 167,240 | 205 | 0 | 3 | 4 | 9 | 16 |
| 6 | MegaLZ | 171,016 | 162 | 0 | 0 | 1 | 1 | 1 |
| 7 | aPLib Compact | 171,484 | 244 | 0 | 0 | 0 | 0 | 0 |
| 8 | Pletter | 171,751 | 212 | 0 | 0 | 0 | 0 | 0 |
| 9 | ZX7 | 171,788 | 136 | 0 | 0 | 2 | 9 | 3 |
| 10 | BitBuster | 172,941 | 166 | 0 | 0 | 0 | 0 | 0 |
| 11 | ZX1 | 176,562 | 127 | 0 | 4 | 5 | 0 | 0 |
| 12 | ZX2 | 177,582 | 115 | 0 | 5 | 4 | 0 | 0 |
| 13 | LZF | 193,412 | 117 | 0 | 0 | 0 | 0 | 0 |
| 14 | Nibble | 214,555 | 115 | 0 | 0 | 0 | 0 | 0 |
| 15 | MDK-RLE | 253,859 | 46 | 0 | 0 | 0 | 0 | 0 |
Most, median, and least compressible

ROM File Edition
1. ZX0: 901 bytes
2. Exomizer 2: 904 bytes
3. DAN2: 909 bytes
... 9. Pletter: 960 bytes

Cake
1. Exomizer 2: 2,935 bytes
2. ZX0: 2,958 bytes
3. DAN2: 2,999 bytes
... 9. Pletter: 3,108 bytes

Mona Lisa
1. Exomizer 2: 9,208 bytes
2. ZX0: 9,426 bytes
3. DAN3: 9,490 bytes
... 5. Pletter: 9,640 bytes
Selection is mechanical. Exomizer uses a 226-byte ROM decoder plus 156 bytes of CPU RAM. Amy Studio reserves that workspace at a 256-byte boundary; its generated address varies and must not overlap other RAM. The detailed PDF contains all 42 converted images and per-picture evidence.
AMY'S LEGACY
The compact philosophy predates Amy Studio.
NewColeco links Amy's historical CRTCV, CVLIB, GETPUT 1.1, and DAN2 code without ABI changes. Its Hello, bitmap, and controller ROMs remain small and run correctly today. The exact Warrior test confirms its direct-to-VRAM DAN2 path. Amy Studio continues that BIOS-aware, original-hardware approach with a modern language, integrated tools, and debugging.
January 2018 devkit archive · AtariAge 2018 update · AtariAge history
PVCOLLIB EVIDENCE
A broad ColecoVision C library, not only a ROM-size entry.
| Area | Verified local API or example | Status |
|---|---|---|
| Graphics | Text and bitmap modes, direct VRAM, sprites, hitbox collisions | Source verified; bitmap runtime exact |
| Sprite pressure | 32-entry SAT and NMI sprite swapping for the four-per-line limit | Source verified |
| Controllers | Both joypads, keypads, four fire buttons, and both spinners | Source verified; visual ROM boots |
| Sound | BIOS-style sound tables, sequenced music, concurrent SFX areas | Source and examples verified |
| Compression | RLE, Pletter, DAN1, DAN2, and DAN3 direct-to-VRAM APIs | RLE exact; other stream pairings not ranked yet |
| Expanded hardware | MegaCart, SGM, Phoenix, and F18A support | Credited separately from stock tests |
PKK'S DEVKIT EVIDENCE
Small linked C code, with a specialized bitmap codec.
Philipp Klaus Krause's devkit uses libcv/libcvu, completes all six runtime fixtures, and has the third-smallest total in this suite at 10,835 occupied bytes. Its Warrior RLE+Huffman path is exact, but needs a 2,934-byte payload, 514-byte shared tree/configuration, about 411 decoder bytes, and 19 bytes of runtime RAM. In the separate 42-picture study, which also includes RAW and libcv's native method, it usually ranks 14th or 15th among 17 methods. That result informs shared-codebook research; it is not a general verdict on PkK's devkit.
Stock and expanded hardware
The measured ranking targets an original ColecoVision with its TMS9918A, SN76489, 1 KB RAM, BIOS, and compact cartridge. Expanded hardware remains a valid strength, but is reported separately.
| Extension | Examples of support | Comparison scope |
|---|---|---|
| MegaCart / banking | CVBasic, z88dk, devkitSMS, PVColLib | Valid, excluded from stock-ROM ranking |
| F18A video | PVColLib APIs; Amy debugger emulation through GearColeco 1.7.0 | Amy language APIs remain future work |
| SGM sound and RAM | CVBasic and PVColLib paths | Expansion or compatible clone systems |
| SP0256 voice modules | Amy Lundy/EVE commands and debugger emulation | Optional external hardware |
| Coleco ADAM | Amy debugger boots browser-local OS7/EOS/WP firmware | Emulation exists; Amy software target and media packaging remain future work |
| Extra RAM | SGM, ADAM, and compatible clones | Reported separately from stock 1 KB RAM |
Philosophy
| Area | Amy Studio | CVBasic | z88dk +coleco |
|---|---|---|---|
| Primary goal | Integrated ColecoVision game authoring | Portable BASIC game development | General-purpose Z80 C development |
| Target reach | ColecoVision-first | Multiple classic consoles and computers | Large family of Z80 targets |
| Typical workflow | Browser IDE, editors, compiler, debugger, ROM tests | Compiler plus editor and emulator | CLI toolchain plus editor and emulator |
| Hardware philosophy | Stock ColecoVision and compact cartridges | Portable abstractions with platform extensions | Low-level C control and broad libraries |
Language and game systems
| Capability | Amy Studio | CVBasic | z88dk +coleco |
|---|---|---|---|
| Numeric types | Explicit 8/16/32-bit integers, fixed-point, FP5, packed BCD | Game-oriented 8/16-bit integers | C integer families and software floating point |
| Data structures | 1D/2D arrays, records, record arrays, RAM overlays | Arrays and BASIC data constructs | C arrays, structs, unions, and pointers |
| Functions | Typed parameters, returns, ref parameters, recursion | Procedures and BASIC function facilities | Full C functions and calling conventions |
| State management | Typed state machines, scenes, overlay-aware RAM | Conventional BASIC control flow | C control flow and manual architecture |
| Input | Joypad, keypad, spinner, pressed/released edges, controller-aware lowering | Joypad, keypad, spinner | C input APIs; advanced behavior is generally manual |
| Sprites | High-level sprites, collision helpers, opt-in flicker with stable ranges | High-level sprites and flicker support | TMS9918 sprite APIs and manual game logic |
| Sound and voice | BIOS tables, Tiny Sound, DSound, adaptive VoxPCM, and SP0256 Lundy/EVE modules | Sound and integrated music commands | PSG libraries and external conversion workflows |
Production workflow
| Capability | Amy Studio | CVBasic | z88dk +coleco |
|---|---|---|---|
| Integrated browser IDE | Yes | No official integrated IDE | No official integrated IDE |
| Source debugging | GearColeco 1.7.0, breakpoints, ASM stepping, memory/VRAM, rewind, profiling | External emulator workflow | External emulator/debugger workflow |
| ROM and hardware setup | ROM/COL drag-and-drop, voice-module selection, browser-local Coleco/ADAM firmware | External emulator workflow | External emulator/debugger workflow |
| Automated ROM tests | GearColeco-backed runtime tests across optimizer profiles | Project-specific external setup | Project-specific external setup |
| Graphics workflow | Configurable bitmap, tile, sprite, frame, tilemap, and TMS9918 composite editors | External/companion conversion tools | External tools and custom pipelines |
| Compression | Fifteen integrated direct-to-VRAM codecs, including Exomizer 2 | Pletter-centered workflow | ZX-family tools and C/ASM libraries |
| ROM beyond 32 KB | Not a current goal | Banked ROM support | Banked/MegaCart options |
AMY STUDIO FITS WHEN
You want depth on the ColecoVision.
You value original-hardware constraints, integrated graphics and compression, readable game-oriented syntax, explicit RAM accounting, source debugging, and an environment shaped by decades of ColecoVision practice.
Open Amy StudioOTHER TOOLCHAINS FIT WHEN
Your project values their strengths.
CVBasic supports portable game-oriented BASIC. z88dk provides broad C and Z80 tooling. ugBASIC offers extensive cross-platform BASIC features. devkitSMS, PVColLib, and PkK's devkit provide established SDCC library workflows.
CVBasic · z88dk · ugBASIC · devkitSMS · PVColLib · PkK's devkit · NewColeco