Skip to content

BANNER.DAT

Text-mode startup resource. Loaded by DARKLAND.EXE before the VGA mode switch. Contains the welcome banner rows, the startup selection menu, and the memory/disk diagnostic strings.

Extension
BANNER.DAT
Location
DARKLAND\
Byte order
Little-endian (16-bit)
Size
1,519 B fixed — 20-entry offset table (40 B) + string payload
Compression
None
Magic
None — 20 LE uint16 offsets at 0x00, first entry always points to 0x0028
Status
Documented
Source
RE — direct byte inspection + DARKLAND.EXE runtime tracing (2026-04-16)

Reverse-engineered from DARKLAND.EXE startup analysis and direct file inspection (2026-04-16).

File Layout

Offset 0x0000 – 0x0027:  word[20]  offset_table  — 20 absolute byte offsets into this file
Offset 0x0028 – EOF:     entries 0..19             — display rows and diagnostic strings

The header is 20 little-endian uint16 values. Each value is a file-absolute byte offset to one entry.

Entry Table

EntryFile offsetContent
00x0028Blank top row (79 spaces + CR LF $)
10x007BBanner row 1
20x00CCBanner row 2
30x011DBanner row 3
40x016EBanner row 4
50x01BFBanner row 5
60x0210Banner row 6
70x0261Banner row 7
80x02B2Banner row 8
90x0303Banner row 9
100x0354Banner row 10
110x03A5Banner row 11 (highlighted)
120x03F6Banner row 12 (highlighted)
130x0447Banner row 13 (highlighted)
140x0498Diagnostic: disk space error
150x04C6Diagnostic: conventional memory required
160x0502Diagnostic: conventional memory available
170x0541Diagnostic: additional memory needed
180x057EDiagnostic: memory override warning
190x05B9Diagnostic: EMS requirement

Entries 0–13 are display rows; entries 14–19 are startup diagnostic strings.

Display Rows

Entries 1–10 are 80-column CP437 null-terminated rows that build the text-mode banner:

+----------------------------------------------------------------------------+
|                       Darklands(TM) - Version 483.07                       |
|        In Medieval Germany, reality is more horrifying than fantasy        |
|        Program & Audio-Visual Copyright (C) 1992 by MicroProse,Inc.,       |
|                            All Rights Reserved.                            |
+----------------------------------------------------------------------------+

                              1) Tactical Battle code
                              2) Role-Playing code
                              Select:

Entries 11–13 (the menu rows) each begin with raw bytes FF 0F. The startup renderer interprets 0xFF as an inline control/escape byte: the following byte is applied as the current text attribute. 0x0F is bright white on black — the attribute used for the menu prompt rows.

Diagnostic Strings

These are plain null-terminated C-style strings used by the memory-check stage at 1699:1150:

EntryString
14Insufficient free disk space - 512K required.
15Darklands requires %ld bytes (%dK) of conventional memory.
16Your machine has only %ld bytes (%dK) of conventional memory.
17Therefore, you need to free an additional %ld bytes (%dK) .
18You have chosen to override the memory check - BEWARE!!
19Darklands requires at least 176K of EMS memory free.

Entry 14 (disk-space check) is consumed by an earlier startup path; entries 15–19 are used by the conventional/EMS memory check.

Inline Attribute Encoding

Rows that need custom text colours embed a two-byte escape sequence inline:

0xFF  <attribute>  rest of row text ...

The renderer at 0C6D:00A9 recognises 0xFF and applies the following byte as the current DOS text mode attribute byte before continuing. This allows the banner to display distinct foreground/background colour combinations without switching video modes.

Consumer

DARKLAND.EXE function 1699:0114 loads BANNER.DAT as a loose file and uses the 20-entry offset table to index the in-memory blob. The startup memory-check helper at 1699:1150 later reuses entries 14–19 for formatted diagnostic output through INT 21h / AH=09.

Confidence

High. File layout and all 20 entry offsets confirmed by direct byte inspection. Renderer behaviour confirmed by runtime tracing.