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 bytesPure ASM*Amy StudioNewColecoPkK's devkitPVColLibdevkitSMSCVBasicz88dkugBASIC
Hello World1842387951,0011,1061,5071,4663,6871,707
Warrior bitmap3,0663,2573,6434,6914,5254,7134,9484,97616,322
Controller monitor2645959328121,1941,4301,6954,0162,370
Sprite metasprite3439831,1421,4131,3041,6811,8452,6076,065
Gameplay state update*5081,4301,2531,2911,3082,1262,4532,8784,455
Tile animation7611,3161,3761,6271,5301,8882,9822,8932,385
Six-sample total*5,1267,8199,14110,83510,96713,34515,38921,05733,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 results

BIOS-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.

SamplePure ASMAmy StudioASM difference
Hello World184238-54
Warrior bitmap3,0663,257-191
Controller Visual264595-331
Sprite Metasprite343983-640
Gameplay State Update*5081,430-922
Tile Animation7611,316-555
Six-sample total5,1267,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
Amy Studio Hello World running in GearColeco
The smallest benchmark establishes each toolchain's fixed runtime cost.

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
Amy Studio Warrior bitmap running in GearColeco
Full 256x192 Graphics II output, verified pixel-for-pixel across all eight solutions.

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
Amy Studio controller monitor running in GearColeco
Runtime-tested for neutral input, direction, keypad, and fire-button changes.

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
Amy Studio yellow three-color metasprite with white eyes and black pupils running in GearColeco
GearColeco runtime result. Three overlapping sprites stay within the TMS9918 scanline limit; the archive contains all six animation masks and eight ROMs.

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
Amy Studio gameplay state update benchmark running in GearColeco
Exact final oracle: state 1, 13 collisions, score 425, checksum 1478. Complete source and all eight ROMs are in the evidence archive.

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
Amy Studio tile animation benchmark running in GearColeco
GearColeco observed both animation phases and verified all pattern, color, and Name Table bytes with no stray ship tiles.

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.

RankCodecPayload totalDecoderFirst-use places (pictures)
1st2nd3rd4th5th
1Exomizer 2161,3742262112231
2ZX0166,5561362118120
3DAN2166,9232120071310
4DAN3167,1862050016511
5DAN1167,240205034916
6MegaLZ171,01616200111
7aPLib Compact171,48424400000
8Pletter171,75121200000
9ZX7171,78813600293
10BitBuster172,94116600000
11ZX1176,56212704500
12ZX2177,58211505400
13LZF193,41211700000
14Nibble214,55511500000
15MDK-RLE253,8594600000

Most, median, and least compressible

ROM File Edition converted for the TMS9918
most compressible
ROM File Edition
1. ZX0: 901 bytes
2. Exomizer 2: 904 bytes
3. DAN2: 909 bytes
... 9. Pletter: 960 bytesArtwork byAmy Bienvenu / NewColecoAmy Bienvenu / NewColeco
Cake converted for the TMS9918
median
Cake
1. Exomizer 2: 2,935 bytes
2. ZX0: 2,958 bytes
3. DAN2: 2,999 bytes
... 9. Pletter: 3,108 bytesArtwork byAmy Bienvenu / NewColecoAmy Bienvenu / NewColeco
Mona Lisa converted for the TMS9918
least compressible
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.

AreaVerified local API or exampleStatus
GraphicsText and bitmap modes, direct VRAM, sprites, hitbox collisionsSource verified; bitmap runtime exact
Sprite pressure32-entry SAT and NMI sprite swapping for the four-per-line limitSource verified
ControllersBoth joypads, keypads, four fire buttons, and both spinnersSource verified; visual ROM boots
SoundBIOS-style sound tables, sequenced music, concurrent SFX areasSource and examples verified
CompressionRLE, Pletter, DAN1, DAN2, and DAN3 direct-to-VRAM APIsRLE exact; other stream pairings not ranked yet
Expanded hardwareMegaCart, SGM, Phoenix, and F18A supportCredited 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.

Installation tutorial · libcv reference · ColecoVision.eu

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.

ExtensionExamples of supportComparison scope
MegaCart / bankingCVBasic, z88dk, devkitSMS, PVColLibValid, excluded from stock-ROM ranking
F18A videoPVColLib APIs; Amy debugger emulation through GearColeco 1.7.0Amy language APIs remain future work
SGM sound and RAMCVBasic and PVColLib pathsExpansion or compatible clone systems
SP0256 voice modulesAmy Lundy/EVE commands and debugger emulationOptional external hardware
Coleco ADAMAmy debugger boots browser-local OS7/EOS/WP firmwareEmulation exists; Amy software target and media packaging remain future work
Extra RAMSGM, ADAM, and compatible clonesReported separately from stock 1 KB RAM

Philosophy

AreaAmy StudioCVBasicz88dk +coleco
Primary goalIntegrated ColecoVision game authoringPortable BASIC game developmentGeneral-purpose Z80 C development
Target reachColecoVision-firstMultiple classic consoles and computersLarge family of Z80 targets
Typical workflowBrowser IDE, editors, compiler, debugger, ROM testsCompiler plus editor and emulatorCLI toolchain plus editor and emulator
Hardware philosophyStock ColecoVision and compact cartridgesPortable abstractions with platform extensionsLow-level C control and broad libraries

Language and game systems

CapabilityAmy StudioCVBasicz88dk +coleco
Numeric typesExplicit 8/16/32-bit integers, fixed-point, FP5, packed BCDGame-oriented 8/16-bit integersC integer families and software floating point
Data structures1D/2D arrays, records, record arrays, RAM overlaysArrays and BASIC data constructsC arrays, structs, unions, and pointers
FunctionsTyped parameters, returns, ref parameters, recursionProcedures and BASIC function facilitiesFull C functions and calling conventions
State managementTyped state machines, scenes, overlay-aware RAMConventional BASIC control flowC control flow and manual architecture
InputJoypad, keypad, spinner, pressed/released edges, controller-aware loweringJoypad, keypad, spinnerC input APIs; advanced behavior is generally manual
SpritesHigh-level sprites, collision helpers, opt-in flicker with stable rangesHigh-level sprites and flicker supportTMS9918 sprite APIs and manual game logic
Sound and voiceBIOS tables, Tiny Sound, DSound, adaptive VoxPCM, and SP0256 Lundy/EVE modulesSound and integrated music commandsPSG libraries and external conversion workflows

Production workflow

CapabilityAmy StudioCVBasicz88dk +coleco
Integrated browser IDEYesNo official integrated IDENo official integrated IDE
Source debuggingGearColeco 1.7.0, breakpoints, ASM stepping, memory/VRAM, rewind, profilingExternal emulator workflowExternal emulator/debugger workflow
ROM and hardware setupROM/COL drag-and-drop, voice-module selection, browser-local Coleco/ADAM firmwareExternal emulator workflowExternal emulator/debugger workflow
Automated ROM testsGearColeco-backed runtime tests across optimizer profilesProject-specific external setupProject-specific external setup
Graphics workflowConfigurable bitmap, tile, sprite, frame, tilemap, and TMS9918 composite editorsExternal/companion conversion toolsExternal tools and custom pipelines
CompressionFifteen integrated direct-to-VRAM codecs, including Exomizer 2Pletter-centered workflowZX-family tools and C/ASM libraries
ROM beyond 32 KBNot a current goalBanked ROM supportBanked/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 Studio

OTHER 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