Skip to content

DiscoC v0.1.0 | First SuperFX baseline

Latest

Choose a tag to compare

@DiscoManOfficial DiscoManOfficial released this 05 Oct 03:57
· 14 commits to main since this release

First SuperFX baseline

DiscoC 0.1.0 establishes the first documented and tested language/toolchain baseline, with an end-to-end functional SuperFX target.

This is the first experimental baseline release, not a declaration that the compiler is production-ready or optimized.

Included

  • discc, discas and discld: source/project compilation, assembly and linking.
  • The documented DiscoC Language Baseline 0.1, verified IR/CFG and GSU backend.
  • Stateful plot { ... } graphics with cursor.x/y, color, PLOT hardware X advancement, observable RPIX/flush, and bitmap metadata.
  • Fixed-origin ROM/RAM payloads, optional runtime initialization and byte-exact final assembly export.
  • discoc.toml, freestanding library modules, examples, documentation and the language specification.
  • A reproducible WLA-DX SNES triangle host with independent Mesen integration checks.

Every platform archive contains the three tools and the complete tracked DiscoC source, including build scripts, tests, examples, library modules, documentation and license. Build provenance and executable hashes are recorded in BUILD-INFO.json; SHA256SUMS.txt covers the release assets.

Downloads

Package Requirements / status
discoc-v0.1.0-windows-x86_64-mingw.zip Windows x86-64 with Universal CRT; GCC/MinGW runtimes are statically linked.
discoc-v0.1.0-linux-x86_64.tar.gz Built/tested on Ubuntu 24.04; glibc >= 2.38 and libstdc++ with GLIBCXX_3.4.32. Not a universal Linux binary.
discoc-v0.1.0-macos26-arm64.tar.gz Apple Silicon, macOS 26+; not Developer ID-signed/notarized, not an Intel/universal build.
discoc-v0.1.0-dos-i586-experimental.zip Experimental DJGPP 32-bit DOS/DPMI build; cross-compilation verified, DOS execution unverified. No DPMI host bundled.
discoc-v0.1.0-source.zip Source-only archive with build scripts, tests, documentation, library modules and examples.
discoc-v0.1.0-snes-triangle.zip Ready-to-run SuperFX SNES demo ROM, payload/final assembly, preview and complete source. Verified locally in Mesen 2.2.1.

Extract the matching package and add its bin directory to PATH. For a project with discoc.toml, run:

discc build

To build the toolchain from source, install a suitable C++23 compiler, CMake 3.21+ and Ninja:

cmake --preset release
cmake --build --preset release
ctest --preset release

Windows MinGW users can substitute release-mingw.

Validation

  • Release source: c5e902efdde9b4c2b1c5101b7b40c844b4319f87.
  • All nine platform build/test jobs passed for this exact commit: Windows MSVC Debug/Release, Windows MinGW static, Ubuntu/macOS Debug/Release, Ubuntu ASan/UBSan and DOS cross-compilation.
  • CodeQL passed for the same commit.
  • The native suite has 91 CTest entries, including 22 language-conformance categories, GSU graphics/ABI/runtime checks, hardened linker/object cases and byte-equivalence regressions.
  • A separate local WLA-DX + Mesen complete-ROM test verifies the triangle's pixels/bitplanes, startup, STOP/result, VRAM/tilemap and deliberate failure path. It is not part of hosted CI and does not establish physical-hardware or complete timing/bus correctness.
  • Packaged Windows tools were additionally used to build the bundled multi-file and triangle manifests; final linked assembly reassembles byte for byte.
  • The packaged Windows tools also rebuilt the complete SNES triangle ROM and passed both Mesen verification scripts. The demo archive includes this positive ROM and its expected preview.

Pre-1.0 guarantees

  • Language syntax may still evolve.
  • ABI may change.
  • Object format may change; rebuild all tools and objects together when upgrading. Current emission is little-endian object format v7.
  • The optimizer is immature.
  • Generated code is not yet expected to be optimal.
  • SPC700 is not yet a fully supported executable target; it currently provides frontend/IR foundations.

Deployment limits

A .bin is a GSU payload, not a complete SNES ROM. It is fixed-origin and must fit one accessible program bank; relink before loading it at a different execution address. The host remains responsible for SNES/PPU setup, payload copying and CPU/GSU bus ownership. Without optional runtime initialization, it must also establish RAMBR, stack and static initialization.

Separate RAM-code/ROM-constant placement, aggregate-by-value and interbank code-call ABIs are not implemented. Physical hardware and exhaustive fuzzing remain unverified.

Further hardening, deployment visibility, optimization and executable SPC700 support follow this baseline.

SNES demo disclaimer

The bundled SNES ROM is an original homebrew demonstration built from the
included example sources and open-source tools. It contains no proprietary
Nintendo code and does not use Nintendo SDK libraries.
This project and its
demo are not affiliated with, endorsed by, or sponsored by Nintendo.

Documentation

Release notes · Language specification · Building · Project manifests · GSU loading · SNES triangle