Devlogs
GameForge‑64 Research Devlog – Oscar64 Expedition (Nov 2025)
Prelude
When we first ported GameForge to Amiga, people loved the deep-dive into Amiblitz internals. So we approached Oscar64 the same way: crack it open, poke around its libraries, and figure out how to fuse it with our visual scripting dreams.
Spoiler: Oscar64 is a treasure chest.
1. First Contact: “Where does Oscar64 live?”
- The Windows bundle drops
oscar64.exe plus a tidy include/, lib/, and bin/.
- No PATH entries, no registry hooks—it’s intentionally self-contained.
- We confirmed it runs fine from arbitrary folders, which means GameForge can either discover it via common paths (
C:\Oscar64\, C:\Programs\Oscar64\) or let users browse to it.
- The lack of global install actually simplifies portable builds: we can ask for one directory and we’re done.
2. CLI Behavior: Friendly to Automation
- Command format is clean:
oscar64 source.c -o output.prg.
- Returns non-zero on errors (bless). STDOUT for warnings, STDERR for actual failures.
- Adding
-I for include directories is exactly how you’d expect.
- There’s a
--vice mode that auto-launches VICE after compile, but it hardcodes default VICE paths. We’ll bypass that and launch VICE ourselves so users can pick any emulator.
3. Library Archaeology 🪙
The most fun part: digging through include/ and lib/.
3.1 Graphics & Sprites
include/vic/sprites.h exposes friendly macros for sprite pointers, colors, multicolor mode, even double-height toggles.
- There’s a
lib/vic/sprite.lib that abstracts DMA list setup. Perfect for our node-based “sprite multiplexer” settings.
- Found helpers for character mode, bitmap mode, and
vic.h constants. This means our visual nodes can map directly to real register writes.
3.2 Sound & SID Glue
include/sid/sid.h and friends wrap register pokes with inline functions (sid_voice, sid_adsr, etc.).
- There’s sample code showing how to load instrument tables. We can auto-generate these from node data.
- Oscar64’s runtime even has a music IRQ helper, so we don’t have to reinvent timer installs.
3.3 Runtime & Tooling
lib/runtime.lib bundles keyboard scanning, joystick helpers, timer interrupts, and memory copy routines.
- Since Oscar64 is LLVM-based, it emits optimized code that still links against these libs seamlessly.
- There’s documentation for mixing C with inline assembly, so advanced users could extend whatever GameForge generates.
In short: we’re not just compiling C—we’re piggybacking on a full-featured C64 SDK.
4. Prototyping Detection & UX
- Electron preload calls
oscar64 --version. If it resolves quickly, we set the compiler status to ✅.
- When running in dev mode (no Electron), we fake “found” states so we can still test UI.
- Future step: store user-edited paths so build/test buttons know where to find
oscar64.exe and x64sc.exe.
5. Lessons Learned (and Excitement!)
- Oscar64’s includes are gold. Instead of writing low-level register code, our visual nodes can emit higher-level API calls (e.g.,
sprite_set_pos(0, x, y)).
- Libraries unlock presets. We can ship GameForge presets for “Scroll Map,” “Sprite Multiplexer,” “SID Instrument,” each backed by Oscar64 helper functions.
- Compile→VICE loop is totally doable. Build times are sub-second for small projects. Once we store the path to VICE, clicking “Run” can spawn the emulator automatically.
- Publishing findings sparks community attention. The Amiblitz post caught X’s eye; this Oscar64 library breakdown will likely have the same effect—so we’re documenting everything in public devlogs.
6. Next Steps
- Wire the visual nodes to Oscar64’s headers (sprites, SID voices, IRQ timers).
- Finalize the compile pipeline: write generated C to temp folder → call
oscar64 with proper -I and libs → stream output to the UI.
- Add a settings modal so users can browse to Oscar64/VICE paths.
- Keep sharing these discoveries—our early research devlogs are already pulling in pro-level attention.
📝 TL;DR: Oscar64 isn’t just a compiler; it’s a complete C64 runtime. We’re mapping our visual scripting graph directly onto its libraries, so future GameForge users can drag nodes and get legit, optimized C code that builds cleanly. That’s the kind of geeky excitement that made the Amiga research pop, and it’s happening again right here.