Skip to content

Caleb Tested v1 – OEM Japanese 6-Player Multitap + Language Freeze Fix

Pre-release
Pre-release

Choose a tag to compare

@calebshub calebshub released this 27 Aug 17:48
· 0 commits to master since this release

This is a hardware-tested build of SAROO based on upstream v0.9 with two fixes:

  1. Menu input support for an official Japanese Sega 6-player multitap.
  2. A fix for an out-of-bounds language hash-table access that can cause the SAROO menu to freeze when switching languages.

Both fixes have been tested together on real Sega Saturn hardware.

This release was compiled using the SH-ELF toolchain bundled with SaturnOrbit after testing revealed a physical-disc boot regression in locally compiled builds made with a newer GCC 9.3.0 SH-2 toolchain.


OEM Sega 6-Player Multitap Menu Support

Problem

With stock SAROO firmware, a controller connected directly to Saturn controller port 1 can control the SAROO menu normally.

However, when an official Sega 6-player multitap is connected to controller port 1, a controller connected to socket 1 of the multitap cannot control the SAROO menu.

Cause / Investigation

SAROO's existing pad_read() code recognizes a directly connected controller using the 0xF1 peripheral response.

During testing, the official Japanese Sega 6-player multitap instead reported a 0x16 response.

For example, with the controller idle:

16 02 FF FF

Holding A produced:

16 02 FB FF

Using SAROO's existing active-low controller logic, FB FF translates to:

PAD=0400

which corresponds to SAROO's:

#define PAD_A (1<<10)

Fix

When Saturn controller port 1 reports the 0x16 multitap response, SAROO now reads the controller in multitap socket 1 as menu PAD1.

This allows controller 1 on the multitap to navigate and operate the SAROO menu.

The Saturn game itself continues to handle the multitap and additional controllers normally after launch.

Hardware Testing

This fix was tested on real Sega Saturn hardware with an official Japanese Sega 6-player multitap.

Confirmed working:

  • SAROO menu navigation through multitap socket 1
  • Game selection and launching
  • 1-4 controllers connected through the multitap
  • Standard Saturn controllers
  • Hori arcade sticks
  • Multiplayer operation after launching a game

Multitap Limitations

This should not be considered a fully general Saturn multitap parser.

The current implementation includes fixed p += 18 handling that has been validated with the hardware and controller configurations available during testing.

In particular:

  • Testing was performed with an official Japanese Sega 6-player multitap.
  • North American and European Sega multitaps have not been tested.
  • Third-party multitaps have not been tested.
  • Other peripheral combinations have not been comprehensively tested.
  • Only multitap socket 1 is used to control the SAROO menu. Other controllers are intended for use by games after launch.

Additional hardware testing and feedback are welcome.


L Button / Language Switching Freeze Fix

Problem

Pressing the Saturn controller's L shoulder button on the main SAROO menu changes the menu language.

During testing of the multitap modification, switching languages caused the SAROO menu to freeze.

Further investigation found an existing out-of-bounds access in SAROO's language hash-table code. The behavior was sensitive to the compiled binary's memory layout: an unmodified locally compiled v0.9 build did not exhibit the freeze, while the build containing the multitap modification did.

Cause

SAROO declares its language translation hash table as:

static STR_ENTRY *lang_str_table[64];

However, the table was indexed using:

hash & 0xff

and:

(lang_str[i].hash) & 0xff

A 64-entry table has valid indices from 0 through 63.

Using & 0xff can produce values from 0 through 255, allowing the code to access memory outside lang_str_table.

Fix

Both language hash-table indexes are changed from:

& 0xff

to:

& 0x3f

This restricts the calculated index to 0-63, matching the 64-entry table.

Hardware Testing

Confirmed on real Sega Saturn hardware:

  • L successfully changes the SAROO menu language.
  • The menu redraws correctly.
  • The UI remains responsive.
  • Repeated language changes work correctly.
  • Language switching works with a controller connected directly to port 1.
  • Language switching also works alongside the multitap modification in this combined build.

Build Toolchain / Physical Disc Compatibility

This release was compiled using the SH-ELF toolchain bundled with SaturnOrbit:

sh-elf-gcc.exe (GCC) 3.4-GNUSH_v0501
GNU binutils 2.15

During development, a separate physical-disc boot problem was discovered when SAROO was compiled locally using a newer GCC 9.3.0 SH-2 toolchain.

The problem was reproduced using unmodified upstream v0.9 source, demonstrating that it was not introduced by either the multitap modification or the language hash-table fix.

Hardware testing produced the following results:

Build Language Switching Physical Disc Boot
Official upstream v0.9 binary Working Working
Unmodified v0.9 compiled with GCC 9.3.0 Working Failed
Unmodified v0.9 compiled with SaturnOrbit GCC 3.4-GNUSH_v0501 Working Working
This patched build compiled with SaturnOrbit GCC 3.4-GNUSH_v0501 Working Working

The GCC 9.3.0 build compiled and ran SAROO normally, but attempting to load a physical Saturn game disc failed on the tested hardware.

Rebuilding unmodified v0.9 using the SaturnOrbit SH-ELF compiler restored physical-disc booting. The combined multitap and language fixes were then rebuilt using the same SaturnOrbit toolchain and tested successfully.

This does not establish that SAROO cannot be built successfully with newer GCC versions in all configurations. It documents the reproducible behavior observed with the GCC 9.3.0 toolchain used during development of this release.

For that reason, the downloadable firmware provided with this release was built using the SaturnOrbit SH-ELF toolchain.

Final Hardware Verification

The exact firmware binary included in this release was tested successfully for:

  • SAROO menu navigation using socket 1 of an official Japanese Sega 6-player multitap
  • Game selection and launching
  • 1-4 controllers connected through the multitap
  • Standard Saturn controllers
  • Hori arcade sticks
  • Multiplayer operation after game launch
  • L-button language switching
  • Repeated language switching without freezing
  • Physical Saturn game-disc detection and booting

Download / Installation

Full Plug-and-Play Package

Download:

SAROO-caleb-tested-v1-full.zip

This package is based on the official upstream SAROO v0.9 firmware release and includes the complete firmware folder structure with the patched ssfirm.bin already installed.

After extracting, the package contains:

SAROO/
├── mcuapp.bin
├── saroocfg.txt
├── ssfirm.bin
└── update/
    └── SSMaster.rbf

ISO/

The following files are unchanged from the official upstream v0.9 release:

  • SAROO/mcuapp.bin
  • SAROO/saroocfg.txt
  • SAROO/update/SSMaster.rbf

Only SAROO/ssfirm.bin has been replaced with the hardware-tested multitap/language-fix build.

To use the package:

  1. Extract the ZIP.
  2. Add your Saturn game images to the ISO/ folder.
  3. Copy the contents to your SAROO SD card.

Firmware-Only Update

If you already have a working SAROO installation and only want the patched firmware, download:

ssfirm-caleb-tested-v1.bin

Rename it to:

ssfirm.bin

and replace the existing:

/SAROO/ssfirm.bin

on your SD card.

Back up your existing ssfirm.bin before replacing it.

The .bin file is raw firmware and is not an archive.


Verified Checksums

SHA-256 of the hardware-tested ssfirm.bin:

ba6937688f02396d019b022e13e4806b213e42acc145ada8be7b791a35378f2a

SHA-256 of the full plug-and-play package SAROO-caleb-tested-v1-full.zip:

3c9e394f0dcfe042e12da9d363fd7cfb454c5798410eb415278ab04056b2b243

Source

This release is built from the caleb-tested-v1 tag and is based on upstream SAROO v0.9.

It combines the OEM Japanese Sega 6-player multitap menu-input fix with the language hash-table bounds fix described above.

The source changes are independent of the compiler issue documented above; the SaturnOrbit toolchain is used for the downloadable firmware because it produced the working physical-disc behavior observed during hardware testing.

Feedback from users testing other official Sega multitaps, regional variants, third-party multitaps, different controller configurations, or other SH-2 build toolchains is especially useful.