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.