OceanBlast is an open-source, independent research and emulation project targeting the Nikko digiBLAST (2005), a European multimedia handheld console powered by the Samsung OCEAN-L-20 System-on-a-Chip (Samsung S3C2410 architecture, ARM920T CPU core).
The goal of this project is digital preservation, architectural documentation, and software interoperability for an obscure and historically undocumented platform.
Interactive Console Skin (--window-mode skin) |
Cartridge Loading Illustration Preview |
|---|---|
![]() |
![]() |
Prebuilt Windows Binaries: Ready-to-run Windows 64-bit builds (
oceanblast.exe+ skin assets) are available on the GitHub Releases page.
Double-click bin/oceanblast.exe (or oceanblast.exe from a release archive) without arguments to open the 1024Γ768 OceanBlast frontend:
- Press Strg+O, choose Datei β ROM ladenβ¦, or drag and drop a legally dumped
.bincartridge image directly onto the OceanBlast start screen. - Open Einstellungen β Steuerung to test your controller live (XInput, DirectInput8, Google Stadia, Xbox, PlayStation, or generic USB gamepads), apply a controller preset (Stadia / Xbox, PlayStation, digiBLAST / USB), or click any row in the mapping table to interactively learn a controller button or keyboard key.
- Adjust audio volume, aspect ratio (3:2 Native, 4:3, Stretched), integer/smooth scaling, window appearance (Plain Window, Console Skin, or Fullscreen via F11 / Alt+Enter), and CPU timing under Einstellungen (persisted to
%APPDATA%\OceanBlast\windows.ini).
Automatic per-cartridge settings are enabled by default (see docs/43, docs/34, and docs/33).
All tested cartridges boot autonomously through the 4-KB S3C2410 Steppingstone SRAM, U-Boot 1.1.2 (nidc NAND ID & checkbattery ADC checks), and the embedded Linux 2.6.11 kernel without kernel panics or guest segmentation faults. Sustained full-speed gameplay and glitch-free audio synchronization remain under active development.
For the complete chronological engineering log and all 44 technical reports (docs/00βdocs/43), see CHANGELOG.md.
| Cartridge Title | Boots (U-Boot + Linux) | Menus / In-Game Status | Audio Status | Display / Technical Notes & Docs |
|---|---|---|---|---|
Crazy Jack [G] (EN) |
β Yes | π’ Title, Level Select & In-Game | π‘ Plays (underruns) | Native 12-bpp LCD444 via GPH8 = 1 (docs/16, docs/25, docs/42) |
Cuccioli Cerca Amici [G] (IT) |
β Yes | π‘ Main Menu & Save-Slot Select | π‘ Plays (unverified) | 64 MB NAND (0x98, 0x76) (docs/12, docs/28) |
DigiQUAD [G] (EN) |
β Yes | π’ Main Menu & Racing Scene | π‘ Improved (docs/20) | Native 12-bpp LCD444 (GPH8 = 1); DMA fix (docs/18, docs/42) |
Gormiti: Agguato nella Valle [G] (IT) |
β Yes | π‘ Title, Character Select & Bracket | π‘ Plays (unverified) | Scene transition sensitive to input timing (docs/17, docs/28) |
Gormiti: Lotta Oscura [G] (IT) |
β Yes | π‘ Intro & Title / Start Prompt | π‘ Plays (unverified) | 32 MB NAND (docs/12, docs/28) |
Gormiti: Masters of the Gorm Island [G] (IT) |
β Yes | π’ Main Menu & In-Game Level/HUD | π‘ Plays (unverified) | 32 MB NAND (docs/12, docs/28) |
Pitfall: The Lost Expedition [G] (EN) |
β Yes | π‘ Intro, Title & Gameplay | π‘ Plays (slow pacing) | Native 12-bpp LCD444; auto 2Γ ratio (docs/21, docs/34) |
Rayman 3 [G] (M10) |
β Yes | π‘ Intro, Title & In-Game | π‘ Stutters under load | High CPU/blitter load (docs/12, docs/18) |
Spider-Man: Mysterio's Menace [G] (EN) |
β Yes | π’ Main Menu, Story & In-Game | π‘ Plays (metallic/crackling) | ~17.5 FPS sampled changes at 1Γ (docs/12, docs/18) |
Superstar Chefs [G] (EN) |
β Yes | π’ Menus & Interactive Gameplay | π‘ Improved at 4Γ (docs/37) | Native 12-bpp LCD444 (GPH8 = 1); auto 2Γ ratio (docs/24, docs/42) |
Wade Hixton's Counter Punch [G] (EN) |
β Yes | π’ Intro, Menus & First Fight | π‘ Improved (-50% frame work) |
GPH8 = 1 removes 16-bpp shadow blit (4.5M -> 2.25M steps/frame) (docs/41, docs/42) |
| Cartridge Group | Boots & Launches Player | Video Output | Media Controls & Audio | Notes & Documentation |
|---|---|---|---|---|
| Gormiti / SpongeBob / Yu-Gi-Oh! (Video) | β Yes | π’ Visible Episode Imagery | π‘ Keypad Controls Active | 240-row scanout & coherent frame latch (docs/28, docs/31, docs/32) |
| SpongeBob / Winx (IT/ES Combined Game+Video) | β Yes | π’ Language Menu & Episode Video | π‘ Keypad Controls Active | Native 12-bpp LCD444 (GPH8 = 1) & I2C EEPROM (docs/16, docs/42); intl. Winx has corrupt blocks (docs/14) |
| Sonic X / Winx (IT/ES Video-Only) | β Yes | π‘ Decodes Frames at High CPU Budget | π‘ Play/Pause/Seek Verified | Dark at 1Γ; decodes colored RealVideo frames at higher budget (docs/30, docs/33) |
| Totally Spies / Winx (NL Video-Only) | β Yes | π΄ Black Framebuffer at Tested Budget | π‘ Player State Reaches PLAYING |
Active framebuffer remains zeroed at 2.5B steps (docs/28, docs/30) |
The Nikko digiBLAST hardware is built around the Samsung S3C2410A / OCEAN-L-20 processor:
| Subsystem | Hardware Specification | Emulation Status |
|---|---|---|
| CPU Core & MMU | ARM920T (ARMv4T, 32-bit ARM + 16-bit Thumb, CP15, MMU, 16 KB I/D-Cache) | β Interpreter with fast page-cache, AP permission faults (Linux COW), and bounded batches (docs/05, docs/37) |
| Memory & Boot | 4 KB Steppingstone SRAM (0x00000000), 32 MB SDRAM (0x30000000) |
β
Autonomous 4 KB NAND boot copy, SDRAM mirroring (0x32000000), and MMIO bus (docs/01) |
| NAND Flash | S3C2410 NAND (0x4E000000), Toshiba TC58 / Samsung K9 (16β128 MB) |
β
Read ID (0x90 for nidc), 512+16 raw OOB passthrough, and 1-bit Hamming ECC synthesis (docs/03, docs/39) |
| Clocks & Timer 4 | PLL (MPLLCON, CLKDIVN) & PWM Timer 4 (0x51000000, HZ=200) |
β
Register-derived FCLK/HCLK/PCLK, 200-Hz IRQ 14, and 1-Β΅s TCNTO4 interpolation (docs/17, docs/23, docs/41) |
Display (s3c2410fb) |
2.7" TFT LCD (0x4D000000, 240Γ160 / 240Γ240, 12-bpp LCD444 & 16-bpp RGB565) |
β
DXGI VSync presenter, coherent frame latch, GPH8 handheld LCD strap, 12-bpp & 16-bpp decoding (docs/10, docs/32, docs/42) |
| Audio (DMA2 + IIS) | S3C2410 IIS (0x55000000), DMA Ch. 2 (0x4B000080), CS43L43 DAC |
π‘ Consumed-sample DMA capture, dynamic IIS rate detection & Win32 waveOut resampler (docs/20, docs/23) |
Input (greykbd) |
GPIO Ports F & G (0x56000050), External IRQs EINT0..23 |
β
D-Pad, A/B/C, L/R, Start/Select, media keys (KEY_P/S/B/N), and XInput / DirectInput8 / Stadia controller remapping (docs/33, docs/43) |
| I2C EEPROM & ADC | 2-KB I2C EEPROM (0x54000000), Battery ADC (0x58000000) |
β
Persistent/volatile 2-KB EEPROM state and checkbattery ADC conversion (docs/03, docs/16) |
- A C++17 compiler (
g++/ MinGW-w64 or MSVC) andwindreson Windows make(optional, for automated builds and test suites)
makeOr compile directly with windres and g++:
windres src/display/oceanblast.rc -O coff -o build/oceanblast_res.o
g++ -std=c++17 -Wall -Wextra -O2 -Isrc \
src/main.cpp \
src/memory/bus.cpp \
src/cpu/arm920t.cpp \
src/cartridge/cart_parser.cpp \
src/display/display_win32.cpp \
src/audio/audio_win32.cpp \
build/oceanblast_res.o \
-lgdi32 -luser32 -lwinmm -lcomdlg32 -lcomctl32 -lshell32 -lole32 -ldinput8 -ldxguid -ld3d11 -ldxgi -ld3dcompiler -lgdiplus \
-o bin/oceanblast.exemake test
make test-windowsbin/oceanblast.exe <path_to_cartridge_dump.bin> [--steps <N>] [--gui] [--window-mode <plain|skin>] [--fullscreen] [--scale <2|3|4>] [--sound] [--clock-mips <N>] [--profile]| Console Button | Hardware Line | Default Controller Binding | Host Keyboard Key |
|---|---|---|---|
| D-Pad | GPF2 / GPF7 / GPF3 / GPF6 |
D-Pad (POV Hat) or Left Stick |
Arrow Keys |
| Button A / B / C | GPF0 / GPF1 / GPF4 |
B1 (A/Cross) / B2 (B/Circle) / B3 (X/Square) (B4 in Stadia/Xbox preset) |
Z (K) / X (J) / C |
| L / R Shoulder | GPG11 / GPG8 |
B5 (LB/L1) / B6 (RB/R1) |
A (Q) / S (W) |
| Start / Stop | GPG10 (EINT18) |
B8 (Start/Options) (B12 on Stadia DInput) |
Enter or F9 |
| Select / Play-Pause | GPG9 (EINT17) |
B7 (Back/Select) (B11 on Stadia DInput) |
Space or F10 |
| Rewind / Forward | GPG0 / GPG13 |
LT (L2) / RT (R2) or B9 / B10 |
F8 / F12 |
| Open ROM / Fullscreen / Stop | β | β | Ctrl+O / F11 (Alt+Enter) / Escape |
OceanBlast is an independent open-source software implementation written from scratch for hardware documentation, digital preservation, and interoperability. Hardware and system behavior is modeled using publicly available documentation (such as the Samsung S3C2410A User's Manual) combined with empirical protocol and binary interoperability analysis.
- OceanBlast does not contain, distribute, host, or link to any proprietary software, bootloader/kernel binaries, copyrighted game ROMs, commercial operating system images, or cryptographic secrets.
- All testing and usage of this emulator require users to supply their own legally acquired cartridge dumps for personal preservation and research purposes.
- Reconstructed visual skin assets in
assets/are original vector/raster reconstructions created for the emulator interface.
Development and interoperability analysis are conducted in good faith for research, education, digital preservation, and software compatibility (see, where applicable in your jurisdiction, statutory provisions regarding interoperability and research such as EU Directive 2009/24/EC Art. 6, 17 U.S.C. Β§ 1201(f), or Β§ 69e UrhG). Note: This statement describes the project's technical scope and intent and does not constitute legal advice.
All product names, logos, brands, and trademarksβincluding Nikko, digiBLAST, Grey Innovation, Samsung, RealPlayer, Ubisoft, and individual game or media titlesβare the property of their respective owners and are referenced solely for descriptive identification. OceanBlast is completely independent and is not affiliated with, authorized, sponsored, or endorsed by Nikko Entertainment B.V., Grey Innovation Pty Ltd, Samsung Electronics Co., Ltd., or any game publishers.
THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. SEE THE GNU GENERAL PUBLIC LICENSE v3.0 FOR FULL TERMS.
This project is licensed under the GNU General Public License v3.0 (GPLv3). See the LICENSE file for the full license text.


