ueb10.asm 2,149 lines of assembly Heiko & Lars FH Wedel x86 real-mode

Balduin der Ball

2004

A 16-bit DOS platformer hand-written in x86 assembly, running in VGA mode 13h.

VGA mode 13h 320 × 200 256 colors ~70 Hz
Speed 26,532 cy/ms

About

Written in 2004 by Heiko and Lars as Übung 10 — assignment ten — of an x86 assembly programming course at Fachhochschule Wedel. Every line, from the VGA mode switch to the keyboard interrupt handler to the level loader, is hand-written 16-bit real-mode assembly targeting MS-DOS. The game runs in VGA mode 13h with direct writes to A000:0000, a 64 KB double-buffered framebuffer, and a custom 'BALD' level format stored as a grid of sprite indices.

Technical details

CPU target
Intel 386 (.386), 16-bit real mode
Rendering
VGA mode 13h, 320 × 200 × 256 colors, direct writes to A000:0000
Double buffer
64 KB offscreen buffer, vsync-locked copy on vertical retrace (~70 Hz)
Palette
8-bit BMP palette programmed into the VGA DAC via port 3C8h
Input
Custom keyboard ISR installed at boot, default handler restored on exit
Level format
16-byte header ('BALD' magic) + width × height grid of sprite indices, up to 128 × 128
Source
A single ueb10.asm file, 2,149 lines of MASM/TASM-style assembly
Toolchain
TASM / MASM 6.x + 16-bit linker → balduin.exe
Binary
Runs the original balduin.exe from 2004 — 3,577 bytes (~3.5 KB), unmodified
Emulator
Emulated with js-dos — DOSBox compiled to WebAssembly
Repository
github.com/larskluge/balduin