A downloadable tool for Windows, macOS, and Linux

Download NowName your own price

ORBIS BASIC 32X

ORBIS BASIC 32X is a retro-future BASIC compiler for creating real bootable Sega 32X and Mega 32X ROMs.

It is a lightweight, self-contained compiler designed for games, demos, visual experiments and creative coding projects that run directly on 32X hardware, compatible emulators, or the included desktop build target. Write BASIC code, compile it, and produce a playable .32x ROM or desktop demo build.

Real Sega 32X ROMs and Desktop Builds

Unlike a traditional runtime, framework or modern game engine, ORBIS BASIC 32X generates compact 32X ROMs around a custom SH-2 runtime and a direct color framebuffer graphics model.

It is not a fantasy console, not an emulator scripting layer and not a generic game engine. It is a real BASIC compiler targeting the Sega 32X directly, with built-in ROM generation, automatic asset baking and a complete retro-future development workflow.

Desktop builds make it easier to test, iterate and present projects quickly on modern systems. They are especially useful for graphics, audio and mouse experiments while developing.

A project made with ORBIS BASIC 32X is not only something that runs on a PC. The same creative workflow can produce a real Sega 32X ROM that can be shared with emulator users, tested on suitable flash-cartridge hardware, published as homebrew, or prepared for possible physical cartridge production.

The desktop target is a companion workflow: fast iteration on modern platforms, real ROM output for the Sega 32X.

BASIC for Games, Demos and Visual Experiments

ORBIS BASIC 32X supports a practical BASIC-style command set for building visual and interactive projects, including:

TYPE and SUB support
drawing commands
image and scrolling commands
alpha blending and multi-level parallax
audio commands
mouse input
automatic asset baking
desktop builds
GUI

The project is built for creators who want to make original Sega 32X software with the immediacy of BASIC, the visual identity of retro hardware and the freedom of a modern portable compiler.

Automatic Asset Integration

One of the defining features of ORBIS BASIC 32X is immediate asset integration.

Images and audio can be baked into the ROM during compilation. The compiler automatically converts, integrates and prepares assets as part of the build process, removing the need for a large external toolchain or complicated manual conversion steps.

Write BASIC code, reference your assets, compile, and the compiler prepares the ROM for you.

Mouse Support

Recent preview builds add shared mouse support for Sega 32X and desktop targets.

The new mouse commands make it possible to build mouse-driven programs using a Sega/Mega Mouse or compatible setup, while keeping the same source code usable in the desktop build.

MOUSEINIT("mousepointer.png", port[, protocol])
MOUSEUPDATE
MOUSEX()
MOUSEY()
MOUSEBUTTON()

On 32X, the port argument selects controller port 1 or 2. On desktop, the same commands map to the host window mouse.

Portable and Self-Contained

The compiler is intentionally minimal, portable and dependency free.

It is distributed as a standalone executable, allowing the tool to run directly across major desktop platforms without installation, package managers or platform-specific setup.

Free Edition vs Full Edition

ORBIS BASIC 32X is available in Free Edition and Full Edition.

The Free Edition is intended for trying the compiler, learning the workflow and building smaller Sega 32X projects. It can produce real bootable Sega 32X ROMs up to 512 KB.

The Full Edition is intended for larger projects, asset-heavy demos and creators who want the complete ORBIS BASIC 32X workflow. It can produce Sega 32X ROMs up to 32 MB and includes desktop build support for creating native desktop versions of compatible projects.

Both editions use the same core idea: write BASIC code, integrate assets automatically, and build real Sega 32X ROMs.

What This Page Contains

This page contains ORBIS BASIC 32X builds, demos, documentation and ongoing development progress.


Simple. Powerful. Retro. Future.

Write once. Build both. Play forever.

Download

Download NowName your own price

Click download now to get access to the following files:

Orbis_Basic_32x_v5_00_22 (Release Version - Free) 5.9 MB
Orbis_Basic_32x_v5_00_30 (Release Version - Free) 5.9 MB
Orbis_Basic_32x_v6_00_15 (Release Version - Free) 5.1 MB
Orbis_Basic_32x_v6_00_17 (Release Version - Free) 5.2 MB
Orbis_Basic_32x_v5_00_22 (Release Version - Full) 5.9 MB
if you pay $29.99 USD or more
Orbis_Basic_32x_v5_00_30 (Release Version - Full) 5.9 MB
if you pay $29.99 USD or more
Orbis_Basic_32x_v6_00_15 (Release Version - Full) 8.5 MB
if you pay $29.99 USD or more
Orbis_Basic_32x_v6_00_17 (Release Version - Full) 8.7 MB
if you pay $29.99 USD or more

Development log

Comments

Log in with itch.io to leave a comment.

v6.0.17 – World Scrolling Commands

This update adds a new high-level world system for creating scrolling maps, RPGs, adventure games, and Zelda/Pokémon-style scenes.

New commands:

W = LOADWORLD("world.png", "world_colormap.png") 
SHOWWORLD W, XW, YW 
HIT = CALLWORLD(W, X, Y, XW, YW) 
ADDSPRITE W, SPRITEID, COLORCODE 

LOADWORLD works like the GUI system: it loads a visible world image and a color-coded logic map. The colormap is converted at build time, so the original overlay image does not need to be stored in ROM.

SHOWWORLD draws a 320×200 scrolling viewport from the world image. If the camera reaches the edge of the map, the outside area is automatically drawn black.

CALLWORLD returns the color code at a screen/world position, making it useful for walls, doors, triggers, water, NPC zones, and other interaction areas.

ADDSPRITE connects sprites with world color codes, opening the door for simple collision and object interaction systems.

This keeps the BASIC code very small while allowing much larger scrolling game worlds.

v6.0.15 update

New GUI commands added:

GUI = LOADGUI("menu.png", "menu_colormap.png") 
SHOWGUI(GUI) 
HIT = CALLGUI(GUI, X, Y) 

LOADGUI loads a visible menu image plus a color-coded hitmap. The hitmap is converted at build time, so the full overlay image is not stored in ROM.

SHOWGUI draws the GUI at 0,0.

CALLGUI returns the color code under a position, useful for buttons and menu areas.

Also fixed 32X mouse rendering: the cursor is now drawn safely at frame end, preventing trails, flicker, and broken text output.

(2 edits)

v6.0.0 - Release Candidate 1 is available.

This preview adds mouse support for Sega 32X and desktop builds.

New mouse commands:

MOUSEINIT("mousepointer.png", port[, protocol]) 
MOUSEUPDATE 
MOUSEX() 
MOUSEY() 
MOUSEDX() 
MOUSEDY() 
MOUSEBUTTON() 

MOUSEINIT loads the PNG cursor. On 32X, port selects controller port 1 or 2. On desktop, the command is accepted for source compatibility and uses the host window mouse.

Call MOUSEUPDATE once per frame before FLIP. MOUSEX/Y return the position, MOUSEDX/Y return movement since the last update, and MOUSEBUTTON() returns button bits.

This preview also fixes the Windows/Wine desktop audio problems. The Win64 audio path now uses a callback/pull-mixer model, fixing the previous stutter, noise, and slowdowns.

(1 edit)

Desktop cross-build concept

The v6.0.0 experimental preview explores a new direction for Orbis Basic 32x: the same BASIC projects that target the Sega 32X can now also be cross-built as native desktop programs.

The idea is not to create a separate “desktop edition” of the language. Instead, the desktop target follows the same Orbis/32X-style programming model: a fixed SEGA 32x-framebuffer, FLIP/FRAMERATE-driven rendering, RGB555 image data with alpha planes, sprite commands, PCM16/ADPCM audio assets, controller-style PAD() input, and simple save/load persistence.

For end users, the release package is meant to stay simple: you use the included ob32x compiler for Sega 32X ROMs, or obdesktop together with the bundled TCC toolchains to generate Linux and Windows desktop builds. This makes it easier to test, share, and preserve projects outside an emulator while keeping the 32X version as the main reference platform.

This is still experimental and should be understood as a possible outlook toward a future v6 direction, but the goal is clear: one BASIC codebase, multiple playable targets.

(2 edits)

New mainline update for Orbis BASIC 32X: v5.0.30 adds structured SUB / CALL support.

This is intentionally simple and close to classic BASIC / machine-code-style control flow. CALL Name maps directly onto the existing GOSUB mechanism, and END SUB maps to RETURN

New supported forms:

SUB DrawHud
   LOCATE 1,1
   PRINT "HUD"
END SUB  
CALL DrawHud 

Also supported in this version:

IF condition THEN CALL Name 
ON expr CALL Name1, Name2, Name3 

So you can now organize larger programs into named routines while keeping the direct BASIC-to-Metal mapping philosophy intact.

(1 edit)

New in Orbis BASIC 32X: experimental TYPE records in v5.0.27.

This adds record-style data organization to help build larger programs more cleanly, for example grouping player or enemy data into fields like Player.X, Player.Y, or Enemy(I).Speed.

The compiler translates these records into Orbis BASIC’s existing fast variable and array system, so the code stays organized without adding a new runtime object layer or intended performance cost compared to writing the equivalent variables manually.

This feature is currently marked as experimental and needs further testing, especially in larger projects and more complex record-array use cases.

A small TYPE records demo is included in the package.

By any chance are you planning on implementing `TYPE` or similar? I think it might be challenging for a modern programmer to write nontrivial programs without some concept of a struct.

(5 edits) (+1)

Yes - actually, we just added TYPE records to the current Orbis BASIC 32X experimental build.

The idea is to give programs a struct/record-like way to organize data, for example:

TYPE Actor
     X AS INTEGER
     Y AS INTEGER
     SPEED AS INTEGER
END TYPE 
 
DIM Player AS Actor 
DIM Enemy(8) AS Actor
  
Player.X = 100 
Enemy(I).Y = Enemy(I).Y + Enemy(I).SPEED 

The compiler translates these records into Orbis BASIC’s existing fast variable and array system, so it should help organize nontrivial programs without adding a new runtime object layer or intended performance cost.

It is still marked experimental and needs more testing, especially in larger projects, but a small demo is already included in the experimental package. 

(+1)

Amazing. Thank you.

You are welcome! And thank you again for testing and giving useful feedback.

New in ORBIS BASIC 32X v5.0.22: PUTSCALESUB

PUTSCALESUB adds cropped and scaled image rendering directly from ROM-backed assets. It lets a program select a source rectangle from a larger image, scale it to a destination area, and draw it in one command.

This is especially useful for zoomed scrolling backgrounds, camera-style effects, panorama demos and game scenes that need to move across large images without manually preparing many separate assets.

(1 edit)

Sprite and image scaling

Orbis Basic v5.0.16 now includes easy scaling commands for both images and sprites.

  • PUTSCALE draws and zooms full images or image sections.
  • SPRITESCALE brings the same idea to sprite-sheet based animation.

This makes it simple to create classic 32X-style effects directly from BASIC, such as:

  • zooming characters
  • large bosses
  • pseudo-depth movement
  • intro logos
  • arcade-style sprite scaling

No low-level 32X rendering code required.

(1 edit)

Orbis Basic 32X has reached the v5.0.6 sprite milestone.

Since v5.0.0, the compiler now includes a complete sprite workflow for real Sega 32X game development: MAPSPRITE() for mapping sprite sheets, PUTSPRITE for centered transparent sprite drawing, and SPRITEOVERLAP() for simple rectangle-based collision checks.

Sprite sheets now support runtime animation frames, 8-frame run cycles, alpha/transparent pixels, safe screen-edge clipping, and compact runtime sprite-run drawing for better performance. The new wizard demo shows LOADIMAGE, MAPSPRITE, PUTSPRITE, and FRAMERATE working together in a stable animated game loop.

(1 edit)

The SEGA 32X Finally Speaks BASIC

Orbis Basic 32x v5.0.0 is now available as the first stable release.

This is a major milestone for the project. Orbis Basic 32x is no longer just an experiment or a small demo compiler - it is now a complete BASIC-based workflow for creating real Sega 32X homebrew games and demos.

The core feature set is now included: realtime graphics, image drawing, scrolling, character animation, audio playback, looping sound/music, controller input, save/load support, timing helpers, and automatic ROM generation.

The release package also includes a universal build-all-demos helper, so all examples can be compiled with one command. It automatically detects the Free or Full Edition compiler and builds the included BASIC examples into Sega 32X ROMs.

The Free Edition is available so everyone can test the workflow first, build demos, and check compatibility before deciding whether the Full Edition is right for them.

Thank you very much to everyone following the project and supporting Orbis Basic 32x.

You can now create Sega 32X games with simple BASIC.

Hey! I'm really excited to try this!

Question: given that your downloads are marked as supporting Linux and MacOS, are you planning on supporting non-windows platforms at release? It didn't immediately work for me when running under wine in Ubuntu. (`wine ob32x_free.exe examples/hello.bas` hangs forever). 

Safety Stoat develops on *nix Operating systems, so if you do support those I'd be interested in purchasing the non-free version in the future.

(1 edit) (+1)

Hey, thank you! Yes, Linux and macOS are intended to be supported at release.

The .exe name is a little misleading here: ORBIS BASIC 32X is built as a Cosmopolitan / actually portable executable, so it should run directly on Linux without Wine. Wine is not needed and may actually cause problems.

I am developing and testing the executable on Linux Mint myself.

On Linux, please try:

chmod +x ob32x_free.exe 
./ob32x_free.exe examples/hello.bas 

The .exe extension is kept so the same file can also be used on Windows.

If it still gives you trouble when run directly, please let me know your distro and system details. I definitely want the tool to work well for *nix users too.

(+1)

Sweet. That worked. Thank you!

(+1)

Great, happy to hear it worked! Thank you for testing it on Linux.

(1 edit)

Orbis Basic 32x v5.0.0 - Release Candidate 2

A new release candidate is now available.

This build mainly focuses on polishing the release workflow before the final version. The separate demo build scripts have been replaced by a single universal build-all-demos helper, which automatically detects the Full or Free Edition compiler and builds all BASIC examples into Sega 32X ROMs.

This should make first testing much easier on Windows, Linux, and macOS.

The core feature set is now complete: realtime graphics, scrolling, character animation, audio, controller input, save/load support, timing helpers, and simple BASIC-based 32X ROM creation.

Unless a final issue appears during testing, this RC2 build is expected to become the final v5.0.0 release very soon.

Orbis Basic 32x v4.60.51 is getting much closer to a full Sega 32X game/demoscene BASIC environment.

This version adds the new unified sound system: 

LOADSOUND, PLAYSOUND, LOOPSOUND, STOPSOUND, and SETVOLUME. 

Audio can now use high-quality PCM16 or compressed 4-bit IMA ADPCM, with automatic premastering to make music and sound effects work better with the 32X PWM audio hardware.

Together with the existing graphics, PNG/JPG image loading, PUTIMAGE/PUTSUB, controller input, double buffering, math, strings, arrays, and ROM generation, Orbis Basic 32x can now be used to create complete Sega 32X homebrew games, demos, intro screens, and audio/visual experiments in BASIC.