Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pc-demonsforge-doc

A measured description of one directory: 2 files, 226,141 bytes, holding THE DEMON'S FORGE (Mastertronic, MS-DOS, 1987; designed by F. Brian Fargo, written by Randy Walsh and Troy Worrell — all of it read off the object's own title screen) in the copy that names its packager in its first 49 bytes: Demon's Forge by Mastertronic. Dos Driver by Mok. The object is not published. What is published is what could be counted, decoded, rendered and checked — and this time 72.7 % of it was a file nobody had opened past its directory, and the directory had been read one record off.

The short card

what it is a room-by-room CGA adventure with a parser: a gladiator thrown into the demon Anarakull's dungeon to find its exit — and 72.7 % of it is a 160 KB self-booting diskette image, opened this session down to its 75 room pictures
studio Mastertronic — (c) 1987 MASTERTRONICS ltd. on the title screen; designed by F. Brian Fargo, written by Randy Walsh and Troy Worrell, per the same screen; Mok wrote the DOS patch
year 1987 — the copyright the title screen prints, at GAME.DAT +0x125B and +0xB7D8 and FORGE.EXE +0xA3D8; the file-system date, 1999-08-23 on both files, is Mok's copy
platform IBM PC, CGA 320 × 200 four-colour (with a PCjr path in the code); originally a self-booting 160 KB diskette, here as a DOS program plus its image
files 2, one flat directory
bytes 226,141 — FORGE.EXE 61,789 (27.3232 %), GAME.DAT 164,352 (72.6768 %)
distinct sha1 2
the clock one, 1999-08-23, the copy's; the game's date is a printed 1987
coverage specified 27.3232 %, derived 72.6768 %, opaque 0, residue 0
the archive 120 named entries: two MZ programs, one empty CGA frame, the intro, 75 rooms and 28 objects as vector drawings, all rendered, ten save slots — eight of them a player's, named PAUL
crossings 0 of 2 hashes over 113 repositories — the sixth zero in a row
tools 589 Python files: 587 inherited (1 changed), 2 written

The work this time was a reader for a file that turned out to be a diskette. GAME.DAT is 512 + 40 × 8 × 512 bytes: a signature sector, then a single-sided diskette whose boot sector loads MZ programs off a 121-record directory without DOS. Record 2 of that directory is FORGE.EXE, byte for byte except 151 bytes in which Mok replaced int 13h with int 21h, a busy loop with the BIOS clock, and halts with exits — which is why the pre-briefing found the prose "in both files". The rooms would not render from their bytes: the fifth byte of each record was not a colour and 256 was not the width. Their grammar was read out of the engine's drawing interpreter with dosdis.py — a ninth x bit in the op byte, a span fill against white with 36 dither patterns, a mode-register write as the first record — and forgedat.py draws all 75 rooms and 28 objects the way the engine does, 2,647 of 2,849 fill seeds landing on white, none leaking. Out came the game: two horned guards at a cave mouth, a well, a crypt, a throne, a forge with an anvil, a maze whose wall reads First Left and Then Right Until Stop, a rabbit looking out of a doorway in room 28 where the state table puts it, and Anarakull, horns up, in room 75.

The pre-briefing's directory reading was wrong in four independent ways — the name comes after the coordinates, the "type" is a length, the page is 512 bytes, the second coordinate is an offset — and every name in its table was one record late. Its five predictions score two right, one half, two wrong; the wrong two were the two built on that reading.

There is a witness. The ten save slots are named, and the one called Not Saved is the only one whose bytes equal the initial state. Someone called Paul saved eight times.

The chapters

Six, and the count is the object's. Two carry the 72.7 %: one for the diskette and its directory, one for the pictures, because a format whose grammar lives inside an executable takes the directory and the disassembly to open. One carries the program, its parser tables and Mok's 151 bytes.

01 — THE DEMON'S FORGE: two files, and the one that was a diskette what it is, the denominators, the two dates and which is the game's
02 — The technical sheet every figure with the command that makes it again
03 — GAME.DAT: a self-booting diskette in a file, and the 120 things on it the boot sector read to the end, the directory read the engine's way, the boot chain closed, the saves and their names
04 — The pictures: a vector grammar read out of the engine, and 75 rooms rendered the interpreter, the line, the fill, the closures, what the rooms show, one room in text
05 — FORGE.EXE: an unpacked program that is the diskette's engine, plus 151 bytes of Mok six segments, the verb and noun tables, the fifteen patches that make a DOS program of a diskette's engine
06 — Corrections, five predictions scored, and the calibration term seven corrections, two right / one half / two wrong, +8.00, rule 0 as a log

Method

Every figure is reproducible from the repository root with the object beside it in demons-forge/; the commands are in docs/02 and the tool runs they came from are in notes/. Nothing was executed, installed or emulated: the boot sector, the pre-loader and the engine were read as data with a disassembler, and the pictures were rendered by a Python transcription of the routines that listing shows. The object, _pre/, _work/, prompt.txt, .claude/ and tools/__pycache__ are not published; README, docs/, notes/, tools/ and .gitignore are.

About

A measured description of THE DEMON'S FORGE (Mastertronic, MS-DOS, 1987, designed by Brian Fargo): two files, one of them a 160 KB self-booting diskette image whose 120-entry directory, boot chain and 75 vector room pictures are decoded with a grammar read out of the engine. Nothing executed; nothing of the object published.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages