A fork of sbstnc's fork of openMenu.
A replacement menu for the GDEMU optical drive emulator for the Sega Dreamcast. This version is built using the KallistiOS (KOS) 2.1.0 SDK with custom patching for GDFS support.
- Prerequisites (Native Build)
- Compilation (Native Build)
- Development using Dev Containers (Currently Broken)
- Compiling in Docker Container without VSCode Dev Container
- Usage
- Contributing
- License
- Acknowledgements
Building openmenu natively (outside of the provided Dev Container) requires a
specific setup of the KallistiOS SDK and toolchain. This is complex and the
recommended method is using the Dev Container.
If you wish to proceed natively, you will need:
- Git: For cloning the repository and applying patches.
- CMake: Version 3.19 or higher.
- Ninja Build System: CMake is configured to use Ninja by default in the presets.
- KallistiOS (KOS) SDK & Toolchain:
- You need the
v2.1.xbranch of KallistiOS (as used in theDockerfile). You can check out a specific tag or commit within that branch if needed. - The KOS source tree must be patched before building KOS itself: The
patch file
docker/kos_patch/fs_iso9660.patchfrom this repository needs to be applied to the KOS source tree usinggit apply. Detailed instructions for applying this patch can be found indocker/kos_patch/README.md. This patch adds necessary GDFS support to thefs_iso9660filesystem driver. - You need to build the
dc-chaintoolchain (SH4 cross-compiler, etc.) and then KOS itself (after patching). - Instructions for setting up a KOS environment can be found in the official
KOS documentation or guides like the Dreamcast Development Wiki. The
process used in this project's
Dockerfile(docker/Dockerfile) can also serve as a reference for building KOSv2.1.xand applying the patch. - Crucially, you must have the KOS environment variables sourced (typically
via
source /path/to/kos/environ.sh) in your shell before attempting to compileopenmenu.
- You need the
Note: Ensure your KallistiOS environment (using the v2.1.x branch, patched
as described above) is correctly set up and sourced in your current shell
session before running these commands. Specifically, the KOS_CMAKE_TOOLCHAIN
environment variable must be set.
-
Clone the repository:
git clone https://github.com/sbstnc/openmenu.git cd openmenu -
Compile openmenu:
# Configure using the 'dc-release' preset cmake --preset dc-release # Build using the 'dc-release' preset configuration cmake --build --preset dc-release
This will use the
kos-cccompiler and associated tools defined by your KOS environment. -
Output: The compiled binary ready for the GDEMU will be
1ST_READ.BIN. An ELF file (openmenu.elf) is also generated, which might be useful for debugging or emulators. -
Clean:
cmake --build --preset dc-release --target clean
NOTE: This feature is currently broken in VS Code as of 2025-11-5. Please use the Compiling in Docker Container without VSCode Dev Container instructions to build
This project includes a Dev Container configuration for a consistent and
ready-to-use development environment. It includes the correctly patched
KallistiOS SDK (v2.1.x branch with the fs_iso9660.patch applied). This
is the recommended way to build and develop openmenu.
Prerequisites:
- Docker Desktop (or a compatible Docker engine).
- Visual Studio Code.
- The Dev Containers extension installed in VS Code.
A pre-built image containing the necessary environment is available on Docker
Hub (sbstnc/openmenu-dev:0.2.2 as specified in
.devcontainer/devcontainer.json). This image contains KOS v2.1.x patched as
required.
- Clone the repository:
git clone https://github.com/sbstnc/openmenu.git cd openmenu - Open the cloned repository folder in VS Code:
code . - VS Code should detect the
.devcontainerconfiguration and prompt you: "Folder contains a Dev Container configuration file. Reopen folder to develop in a container?". - Click "Reopen in Container". VS Code will pull the pre-built
sbstnc/openmenu-devimage from Docker Hub (if you don't have it locally) and start the container. - If you don't see the prompt, open the Command Palette (
Ctrl+Shift+PorCmd+Shift+P) and run the "Dev Containers: Reopen in Container" command. - Once the container is running, you can open a terminal within VS Code
(
Terminal > New Terminal). The KOS environment is already set up. You can compile the project directly:# Configure using the 'dc-release' preset cmake --preset dc-release # Build using the 'dc-release' preset configuration cmake --build --preset dc-release
If you prefer not to use the pre-built image from Docker Hub or want to build it
yourself (e.g., to incorporate newer KOS updates from the v2.1.x branch or
modify the build process):
-
Ensure Docker is running.
-
Clone the repository:
git clone https://github.com/sbstnc/openmenu.git cd openmenu -
Run the make target to build the image:
cd docker ./build.shWarning: This process downloads and compiles the entire KallistiOS toolchain and SDK (from the
v2.1.xbranch) and applies the necessary patch. It can take a significant amount of time (potentially hours) depending on your machine and network speed. -
Once the build completes successfully, you will have a local Docker image tagged
openmenu-dev:latest(and potentiallyopenmenu-dev:<version>). -
Update Dev Container Configuration: Before reopening in VS Code, edit the
.devcontainer/devcontainer.jsonfile. Change theimageproperty from"sbstnc/openmenu-dev:0.2.2"to"openmenu-dev:latest"(or the specific version tag you built, e.g.,"openmenu-dev:0.2.2"if you built that tag locally).--- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,5 +1,5 @@ { "name": "Dreamcast Dev", - "image": "sbstnc/openmenu-dev:0.2.2", + "image": "openmenu-dev:latest", // Or your locally built tag "runArgs": [ "--userns=keep-id" ],
-
Now, open the project folder in VS Code (
code .) and use the "Dev Containers: Reopen in Container" command. VS Code will use your locally built image. -
Compile within the container as described in the previous section:
make
- Follow the instructions in Building the Dev Container Image Locally up to step 4
- Verify that the Docker image exists
docker images
- Build the Docker container
docker run --name openmenu-dev -it -d -v ./..:/openmenu:rw openmenu-dev
- Open bash in container
docker exec -it openmenu-dev bash - Change to source directory in the container
cd /openmenu - Build the application
# Configure using the 'dc-release' preset cmake --preset dc-release # Build using the 'dc-release' preset configuration cmake --build --preset dc-release
- Build the tools
# Configure using the 'native-tools-release' preset cmake --preset native-tools-release # Build using the 'native-tools-release' preset configuration cmake --build --preset native-tools-release
The primary output is 1ST_READ.BIN. This file is intended to replace the
existing 1ST_READ.BIN within the tools/openMenu/menu_data directory of your
GDMENU Card Manager installation. After replacing the file, use the GDMENU Card
Manager tool to prepare your SD card for the GDEMU.
You can potentially run the openmenu.elf file using a Dreamcast emulator that
supports ELF loading, or via dc-load-ip / dc-tool if you have the necessary
hardware setup (requires KOS_LOADER environment variable to be set, see
Makefile.mk's run target).
Found a bug or have a suggestion? Please open an issue on the GitHub Issues page.
The core code of this project is licensed under the Modified BSD License - see
the LICENSE.md file for details.
External libraries included in the external directory have their own licenses.
Please refer to the respective directories for details.
This project builds upon the work of many individuals in the Dreamcast homebrew community. Special thanks to:
- HaydenKow (mrneo240): For starting the original openMenu project.
- megavolt85: For the version of openMenu this fork is based on, and work on the GDEMU SDK aspects.
- sbstnc For documenting the build process, cleaning up code, and adding features
- u/westhinksdifferent: For the UI design mockups.
- FlorreW, hasnopants, Roareye: For their work on the Metadata Database.
- sonik-br: For the GDMENUCardManager tool.
- protofall: For the Crayon_VMU library.
- ReveriePass: For custom boxart contributions.
- marky-b-1986: For theming ideas.
- The KallistiOS team: For the essential Dreamcast SDK.