-
-
Notifications
You must be signed in to change notification settings - Fork 4
Nexus File Formats
Dungeon Master Nexus is a Sega Saturn title. All multi-byte values are big-endian (SH-2 native order) unless noted otherwise.
The game ships on a single CD-ROM. Track 1 is the data track containing the Saturn executable and all game files. Tracks 2-9 are Red Book audio tracks used as level music. The data track is an ISO 9660 filesystem.
| Field | Value |
|---|---|
| Size | ~555 KB |
| CPU | Hitachi SH-2 (big-endian, 32-bit RISC) |
| Load address | 0x06004000 (Saturn work RAM high) |
The main SH-2 executable contains the game engine, resource table
pointers, embedded string tables, and the sound library (sndlib2.c).
Key embedded data regions (offsets within DM.BIN):
| Offset | Content |
|---|---|
| 0x012880 |
FONT resource pointer table (3 entries to work RAM) |
| 0x0294C0 |
TEXT + TABL resource pointer table |
| 0x02AFF8 |
PLRD resource pointer table (champion data) |
| 0x038F34 |
SNDLEV01-SNDLEV15 filename table (12 bytes each) |
| 0x039100 |
SDDRVS.TSK filename string |
| 0x03910C |
sndlib2.c source reference |
| 0x0373CC |
FONT256.S2D and STABG.BIN filename strings |
DM.BIN contains direct SH-2 address references to Saturn hardware:
| Address range | Hardware | References |
|---|---|---|
| 0x25C00000-0x25C7FFFF | VDP1 VRAM (command tables, textures) | ~238 |
| 0x25D00000-0x25D00010 | VDP1 registers (TVMR, FBCR, PTMR, EWDR, EWLR, EWRR, MODR) | 14 |
| 0x25E00000-0x25EFFFFF | VDP2 VRAM (tile maps, pattern data) | variable |
| 0x25F00000-0x25F00106 | VDP2 registers (TVMD, CHCTLA, MPOFN, CLOFEN, COxR/G/B) | 10 |
| 0x25F80000-0x25FBFFFF | VDP2 CRAM (color RAM / palettes) | ~45 |
The 0x25xxxxxx prefix is the Saturn cache-through mirror of 0x05xxxxxx.
| Field | Value |
|---|---|
| Size | ~39 KB |
| CPU | SH-2 |
Secondary SH-2 executable loaded during initial boot. Contains early initialization,ings logo display, and handoff to DM.BIN.
| Field | Value |
|---|---|
| Files | LEV00.DGN through LEV15.DGN (16 levels) |
| Size | 147-321 KB each |
Each DGN file contains the complete level geometry and game state.
| Structure | Content |
|---|---|
| Structure1A | Wall/alcove descriptors, bound to grid cells |
| Structure1B | 64x64 typed cell grid: collision, floor/ceiling/wall materials, animation IDs, height data |
| Structure1F | Direct-coordinate records: items, floor decoration, floor sensors |
| Structure2 | Animated texture descriptors with payload/palette references |
| Structure3 | Texture selector tables for wall/floor/ceiling materials |
Each cell occupies a fixed number of bytes and encodes:
| Field | Description |
|---|---|
| Collision reference | Walkability and blocking state |
| Wall material | Index into material texture table |
| Floor material | Index into floor texture table |
| Floor animation ID | Animation descriptor reference |
| Ceiling material | Index into ceiling texture table |
| Structure1A reference | Link to wall/alcove descriptor |
| Post-grid 0x30 reference | Extended geometry data |
| Field | Value |
|---|---|
| Size | 72,332 bytes |
| Format |
RES* tagged resource archive |
Offset Size Description
0x00 4 Magic: "RES*"
0x04 4 Total file size (big-endian)
0x08 2 Entry count (big-endian)
0x0A 2 Reserved (zero)
0x0C N*12 Resource directory
Each directory entry is 12 bytes:
Offset Size Description
0x00 4 Resource tag (ASCII: "FONT", "TEXT", "PALT", "PLRD", "CRET", "DGT2", "TABL", "LAST")
0x04 4 Resource index (big-endian)
0x08 4 Offset within file (big-endian)
| Index | Tag | Sub-index | Offset | Description |
|---|---|---|---|---|
| 0 | FONT | 0 | 0x000C0 | Half-width font (291 glyphs, 6x12, 2bpp) |
| 1 | FONT | 1 | 0x01C2C | Full-width font (250 glyphs, 12x12, 2bpp) |
| 2 | FONT | 2 | 0x03F78 | Kanji font (710 glyphs, 12x12, 2bpp) |
| 3 | TEXT | 0 | 0x0A374 | Text strings bank 0 (449 strings) |
| 4 | TEXT | 1 | 0x0C42C | Text strings bank 1 (40 strings) |
| 5 | TEXT | 2 | 0x0C61C | Text strings bank 2 (101 strings) |
| 6 | TEXT | 3 | 0x0E480 | Text strings bank 3 (25 strings) |
| 7 | TEXT | 4 | 0x0E824 | Text strings bank 4 (15 strings, menu options) |
| 8 | PALT | 0 | 0x0EBA4 | Palette data |
| 9 | PLRD | 0 | 0x0EDAC | Champion/player record data |
| 10 | CRET | 0 | 0x0F2B4 | Creature data bank 0 |
| 11 | CRET | 1 | 0x0FF1C | Creature data bank 1 |
| 12 | DGT2 | 0 | 0x10B84 | DGN type 2 data |
| 13 | TABL | 0 | 0x118D4 | Character encoding table (216 entries) |
| 14 | LAST | 0 | 0x00000 | End-of-directory sentinel |
Each FONT resource within the RES* archive has a nested header:
Offset Size Description
0x00 4 Tag: "FONT"
0x04 4 Resource index (big-endian)
0x08 4 Tag: "FONT" (repeated)
0x0C 4 Data size in bytes (big-endian)
0x10 2 Version/flags
0x12 2 Bits per pixel (0x0002 = 2bpp)
0x14 2 Glyph count (big-endian)
0x16 2 Glyph width in pixels
0x18 2 Glyph height in pixels
0x1A 2 Reserved
0x1C 8 Palette (4 entries, Saturn 15-bit BGR555)
0x24 ... Glyph bitmap data (2bpp packed)
| Font | Glyphs | Width | Height | BPP | Purpose |
|---|---|---|---|---|---|
| FONT0 | 291 (0x123) | 6 | 12 | 2 | Half-width ASCII/katakana |
| FONT1 | 250 (0x0FA) | 12 | 12 | 2 | Full-width hiragana/symbols |
| FONT2 | 710 (0x2C6) | 12 | 12 | 2 | Kanji |
The embedded 4-color palette uses Saturn 15-bit color (MSB + 5-5-5 BGR):
| Index | Value | Color |
|---|---|---|
| 0 | 0xFFFF | White (B=31, G=31, R=31) |
| 1 | 0xDEF7 | Light gray (B=23, G=23, R=23) |
| 2 | 0xB9CE | Dark gray (B=14, G=14, R=14) |
| 3 | 0x8000 | Black (B=0, G=0, R=0) |
Offset Size Description
0x00 4 Tag: "TEXT"
0x04 4 Resource index (big-endian)
0x08 2 String count (big-endian)
0x0A N*2 String offset table (each offset relative to byte 0x08)
0x0A+N*2 ... String data (TABL-encoded)
Strings use a custom encoding decoded through the TABL lookup table. Characters in the 0xE0-0xE4 range are multi-byte TABL references that index into the 216-entry TABL character map for Shift-JIS output.
Offset Size Description
0x00 4 Tag: "TABL"
0x04 4 Resource index (big-endian)
0x08 432 216 entries x 2 bytes each
Each 2-byte entry maps a TABL index to a character code. If the first byte is 0x00, the second byte alone is the code; otherwise both bytes form a 16-bit Shift-JIS character code.
| Field | Value |
|---|---|
| Size | 25,012 bytes |
| Format | SEGA SATURN SCR |
Offset Size Description
0x00 16 Magic: "SEGA SATURN SCR\0"
0x10 4 Character count (big-endian, low 16 bits: 256)
0x14 4 Header descriptor (0x12 observed)
0x18 8 Reserved
0x20 256 Section table: 32 entries x 8 bytes (offset BE u32, size BE u32)
0x120 ... Section data
Sections 0, 2, 4, 6 are populated; section indices 1, 3, 5, 7-27 are reserved (zero). Entries 28-31 contain non-zero values that fail bounds checks and are skipped by the parser.
| Field | Value |
|---|---|
| Size | 53,744 bytes |
Game string table used for item names, descriptions, and UI text.
| Field | Value |
|---|---|
| Size | 100,352 bytes |
| Items | 243 entries |
| Record size | 40 bytes per item |
| Data offset | 0x800 (first 2048 bytes are header) |
| Offset | Size | Description |
|---|---|---|
| 0 | 1 | Item index (verification) |
| 1 | 1 | Item category (0=Weapon, 1=Armor, 2=Accessory, 3=Potion, 4=Scroll, 5=Container, ...) |
| 2 | 1 | Carry locations bitmask |
| 3 | 1 | IBS flags |
| 4-7 | 4 | Raw data (purpose under investigation) |
| 8 | 1 | Weight |
| 9-15 | 7 | Raw data (purpose under investigation) |
| 16-18 | 3 | Action IDs (3 action slots per item) |
| 19 | 1 | Raw data |
| 20-23 | 4 | Inventory image reference |
| 24-27 | 4 | Floor image reference |
| 28-31 | 4 | Name string reference |
| 32-35 | 4 | Description string reference |
| 36-37 | 2 | Attribute word |
| 38-39 | 2 | Action string reference |
| Files | Size range |
|---|---|
SN_FLOOR.MNS, SN_WALL.MNS
|
43-49 KB |
*.MNS (creatures) |
15-88 KB |
Monster sprite banks containing TEXT sections and BGR555 pixel data. Each MNS file is a self-contained sprite archive for one creature type or static material set.
| File | Creature | Size |
|---|---|---|
| ANTMAN.MNS | Ant Man | 53,768 |
| BIGWORM.MNS | Big Worm | 53,784 |
| BORKETH.MNS | Borketh | 67,644 |
| CHAOS.MNS | Chaos / Lord Chaos | 88,572 |
| DRA_ZOM.MNS | Dragon Zombie | 83,508 |
| D_GOLD.MNS | Gold Dragon | 44,000 |
| D_RED.MNS | Red Dragon | 55,276 |
| D_SILVER.MNS | Silver Dragon | 41,952 |
| GHOST.MNS | Ghost | 48,840 |
| GIGGLER.MNS | Giggler | 43,484 |
| GOLEM.MNS | Golem | 48,140 |
| GRN_DRA.MNS | Green Dragon | 56,976 |
| H_HOUND.MNS | Hell Hound | 46,364 |
| LAS_MON.MNS | Last Monster | 76,232 |
| LORD_RIB.MNS | Lord Order | 19,500 |
| MINI_DRA.MNS | Mini Dragon | 35,612 |
| MUMMY.MNS | Mummy | 55,420 |
| OBAKE.MNS | Ghost (alt) | 15,280 |
| OITU.MNS | Oitu | 46,524 |
| RAT.MNS | Rat | 57,496 |
| RED_DRA.MNS | Red Dragon (alt) | 62,256 |
| ROCKPILE.MNS | Rock Pile | 57,680 |
| SCORPION.MNS | Scorpion | 53,052 |
| SCREAMER.MNS | Screamer | 29,668 |
| S_SHIELD.MNS | Animated Shield | 31,164 |
| S_SWORD.MNS | Animated Sword | 49,716 |
| VEXIRK.MNS | Vexirk | 51,640 |
| WORM.MNS | Worm | 55,832 |
| Field | Value |
|---|---|
| Size | 89,060 bytes |
| Entries | 162 PRS3-compressed entries |
BPK is a packed archive of PRS3-compressed bitmap entries used for menu graphics, UI elements, and startup screens.
PRS3 is an LZ-style compression scheme. Each BPK entry has a header describing mode, dimensions, and packed size. The decompressor reads payload bytes through an indirect register, using a bit-buffer refill pattern with mask 0x0000FF00 for control state.
Decompression details (opcode grammar, literal/back-reference layout, output handling) require Saturn executable evidence and are not yet fully proven.
| Files | SMAP00.BIN through SMAP15.BIN |
|---|---|
| Size | 17-30 KB each |
Per-level sprite map data. One file per dungeon level, containing sprite placement and animation state for the level's creatures and objects.
| Files | SLEV00.BIN through SLEV15.BIN |
|---|---|
| Size | 2-11 KB each |
Per-level saved state data, tracking dynamic game state (doors opened, items moved, creatures defeated) for each level.
| SAL files | SNDLEV00.SAL through SNDLEV15.SAL |
|---|---|
| SAL size | 297-469 KB each |
| MAP files | SNDLEV00.MAP through SNDLEV15.MAP |
| MAP size | 66-90 bytes each |
SAL files are sound sample archives. Each begins with the container
preamble dsp01.EX (8 bytes). The archive contains PCM tone banks
with a directory structure described by the companion MAP file.
MAP files contain the tone-bank directory grammar for the corresponding SAL file:
Offset Size Description
0x00 2 Header marker
0x02 2 Record count
0x04 N*R Record table
Each MAP record maps a sound event selector to a tone bank entry within the SAL archive, providing offset, size, sample rate, and loop point information.
| Field | Value |
|---|---|
| Size | 26,610 bytes |
The Saturn sound driver task, loaded into the sound CPU (MC68EC000) RAM.
The main SH-2 CPU communicates with it through the SCSP (Saturn Custom
Sound Processor) register interface. The driver implements PCM playback
via a submitPCMP call interface, referenced in the embedded sndlib2.c
source strings.
Error messages embedded in DM.BIN for the sound system:
-
"playing %s"— SAL file playback log -
"insufficient mem %d"— memory allocation failure -
"cannot open sound file %s"— SAL file not found -
"BUFSIZE should be in boundary of SECTORSIZE"— buffer alignment error -
"pcmtype = %x"— PCM format diagnostic
| Field | Value |
|---|---|
| Size | 45,104 bytes |
Champion portrait/face graphics data.
| Field | Value |
|---|---|
| Size | 5,448 bytes |
Small resource fixup file loaded early in initialization.
| File | Size |
|---|---|
| TITLE.BIN | 112,216 bytes |
| TITLE.CG | 167,968 bytes |
Title screen graphics. TITLE.CG contains the full-color title artwork; TITLE.BIN contains the title screen layout/metadata.
| Field | Value |
|---|---|
| Size | 160,044 bytes |
Tile map data used by VDP2 for background layer composition.
| Field | Value |
|---|---|
| Size | 7,168 bytes |
Normal scroll (background) plane 3 data for VDP2 composition.
| Field | Value |
|---|---|
| Size | 72,198 bytes |
Logo background graphic in DG2 format.
| File | Size | Purpose |
|---|---|---|
| POTEFT.BIN | 3,256 | Potion effect graphics |
| STONE.BIN | 4,400 | Stone/petrification effect |
| DEATH.BIN | 4,400 | Death animation graphics |
| Field | Value |
|---|---|
| Size | 38,640 bytes |
Switch, button, and sensor visual state graphics.
| File | Size | Purpose |
|---|---|---|
| WARNING.BIN | 101,256 | Warning/disclaimer screen |
| GAMEOVER.BIN | 103,024 | Game over screen |
| File | Size | Purpose |
|---|---|---|
| DMN_ABS.TXT | 182 | Abstract/description |
| DMN_BIB.TXT | 91 | Bibliography/credits |
| DMN_CPY.TXT | 97 | Copyright notice |
Plain ASCII text files with game metadata for the Saturn disc browser.
| File | Size | Purpose |
|---|---|---|
| DMV0.AVI | ~35.9 MB | Opening cinematic |
| DMV1.AVI | ~29.2 MB | Mid-game cinematic |
| DMV2.AVI | ~41.0 MB | Ending cinematic |
Saturn Cinepak AVI video files for full-motion video cutscenes.
| Track | Levels | Purpose |
|---|---|---|
| Track 2 | 0-1 | Dungeon music (levels 0-1) |
| Track 3 | 2-3 | Dungeon music (levels 2-3) |
| Track 4 | 4-5 | Dungeon music (levels 4-5) |
| Track 5 | 6-7 | Dungeon music (levels 6-7) |
| Track 6 | 8-9 | Dungeon music (levels 8-9) |
| Track 7 | 10-11 | Dungeon music (levels 10-11) |
| Track 8 | 12-13 | Dungeon music (levels 12-13) |
| Track 9 | 14-15 | Dungeon music (levels 14-15) |
| Address | Size | Description |
|---|---|---|
| 0x05C00000 | 512 KB | VDP1 VRAM (sprite command tables, texture data) |
| 0x05D00000 | 32 B | VDP1 registers |
| 0x05E00000 | 512 KB | VDP2 VRAM (tile maps, pattern data) |
| 0x05F00000 | 304 B | VDP2 registers |
| 0x05F80000 | 256 KB | VDP2 CRAM (color RAM / palettes) |
| 0x06000000 | 1 MB | Work RAM high (executable, game data) |
| 0x25000000+ | — | Cache-through mirror of above |
Saturn uses 15-bit BGR555 color with an MSB transparency/priority bit:
Bit: 15 14-10 9-5 4-0
M BBBBB GGGGG RRRRR
Where M is the MSB (priority/transparency depending on mode).