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
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.asmfile, 2,149 lines of MASM/TASM-style assembly - Toolchain
- TASM / MASM 6.x + 16-bit linker →
balduin.exe - Binary
- Runs the original
balduin.exefrom 2004 — 3,577 bytes (~3.5 KB), unmodified - Emulator
- Emulated with js-dos — DOSBox compiled to WebAssembly
- Repository
- github.com/larskluge/balduin