A whole boss fight in 256 bytes (hellmood.111mb.de)

by HellMood 52 comments 130 points
Read article View on HN

52 comments

[−] lucb1e 38d ago
That domain is such a blast from the past for me. I spent so many hours working on projects with free webhosting as a teen!

dang/HN: this domain should probably be added to the list where the subdomain is shown next to the title, since subdomains are users' webspaces. (Might be a good candidate for the public suffix list: "[DNS labels] under which Internet users can (or historically could) directly register names".)

[−] philxor 38d ago
And it came in 5th place in the competition. The winner was this one which is 16 bytes...

https://www.youtube.com/watch?v=QKLhH_ANwIc

[−] HellMood 37d ago
The demoscene has a curated collection of "best 16 bytes ever" https://nanogems.demozoo.org/#16_byte_intros As well as 32,64 and so on ... It even goes down to 8(!) Byte productions
[−] tromp 37d ago
You can do amazing things in 8 bytes [1].

[1] https://tromp.github.io/blog/2026/01/28/largest-number-revis...

[−] HellMood 37d ago
You can (on real MSDOS!) go as low as 6 bytes

https://www.pouet.net/prod.php?which=63538

But most people wouldn't find that visually satisfying

The technical details why this works are very interesting though :)

[−] senfiaj 37d ago
I guess anything that is less than 7 bytes can be brute forced.
[−] HellMood 35d ago
Well, it would be 2^(7*8) = 72057594037927936 possible intros. Someone/something has to generate, run and evaluate them all. Theoretically it's the "halting problem" all over, to wait for the "final output" of each intro. The 16 byte effect for example takes a while to achieve its final form. So even if it is somehow managed to evaluate 1000 intros per second, we are looking at about 2 million years of time to really test ALL possible 7 byte intros.
[−] senfiaj 26d ago
I think there are some standard header bytes, so the number of combinations of the interesting parts might be much smaller. Also I said less than 7 bytes, so it's actually 281474976710656 . If header bytes reduce 1 or 2 bytes, it will be 4294967296 - 1099511627776. 1099511627776 / 1000 / 60 / 60 / 24 / 365 is around 35 years.
[−] flopsamjetsam 38d ago
I clicked on this fearing it was a "256 bytes of JS" (plus X GB of browser), and was pleasantly surprised it was actually 256 bytes.
[−] xg15 38d ago
Had a similar thought. In theory, you're right, though in practice today it's "256 bytes of binary plus X MB of DOS emulator".
[−] gmueckl 38d ago
Unless I'm overlooking something, the demo only requires DOSBox to have a machine with predefined execution speed. There are no DOS interrupt calls that I can see. Other than that, the program could probably even be trivially modified to fit in a floppy disk MBR and could potentially run without underlying OS.
[−] bpeebles 38d ago
To be more exact (in an excessive way), it uses the BIOS's code to set the video mode (INT 10h) which is probably a few dozen bytes (at least?) although I have been remiss at not ever reading them. And it depends on DOS configuring the memory space to leave an INT 20h call (to terminate the program) at a place that's easy to RET to. But, yeah, very little extra. But I'm not being negative at all and this is pretty nice code and on the impressive side of 256 byte demos from the 80s and 90s (and onward).
[−] aidenn0 38d ago
Yes, this is very minimal; if it were self-booting the INT 20h call wouldn't be needed, but there's no getting around the INT 10h, unless you specialize for very specific hardware.

The entire 5150 BIOS fit in 8k, so even if it were laden with BIOS calls (which it's not) then that would be an upper-bound.

[−] userbinator 37d ago
The VBIOS is around 32-64k. The modesetting path is probably a few k.

And it depends on DOS configuring the memory space to leave an INT 20h call (to terminate the program) at a place that's easy to RET to.

This has always been the case, and actually inherited from CP/M.

[−] rob74 37d ago
Also, MIDI - I'm not very familiar with demo programming, but I guess using MIDI saves a lot of bytes compared to trying to do something similar with only the PC speaker?
[−] xnorswap 37d ago
MIDI is a protocol for describing audio.

Sure, it saves a lot of bytes compared to PCM encoded wave-form data, but it's not really cheating anything unless we also consider the red, blue and green parts of the computer monitor to be cheating because we're not outputting colours as raw wavelengths, but instead the monitor is decoding compressed signals into actual colours.

[−] rob74 37d ago
What is this "cheating" you speak of? I wasn't expressing any judgement, just saying that using MIDI helps save bytes. But now that you mention it, the bitmapped graphics that we take for granted nowadays also help (it gives you a whole memory space to work with that doesn't count towards the length of your program, rather than having to "race the beam" -https://en.wikipedia.org/wiki/Racing_the_Beam). Not sure if there's a demoscene for the Atari 2600, but that would probably be the most "bare-metal" you could get...
[−] HellMood 37d ago
Thanks :)

and yes, your observations are spot on.

[−] direwolf20 37d ago
256 bytes (plus X kB of BIOS) (plus Y kB of hardware schematics)
[−] ErroneousBosh 37d ago
But there's nothing stopping you running it on a real DOS machine.

I expect someone will then say "though in practice today it's 256 bytes of binary plus a whopping 64kB of BIOS ROM and 16kB of video RAM" ;-)

[−] rustystump 38d ago
Why is that bad? If the bytes could easily run within the same constraint in another env/language why the hate?

I am with u on the excessive ram of browsers. It is insane. Still, it is one of the most portal and easy ways to share something. Heck, u can run a dos emulator in your browser.

[−] TapamN 37d ago
Well, it's "256 bytes of x86" (plus X KB of VESA bios) (plus Y KB of FM synth patches) (plus Z KB of microcode) (plus...)
[−] rwoerz 37d ago
Or a 256 bytes prompt
[−] HellMood 40d ago
Technical write up for "Endbot" 256 bytes MSDOS program with plot, sync, sound, and payoff. Released April 4th at Revision Demoparty 2026.
[−] s3anw3 38d ago
This takes me back to the NES era, where developers squeezed entire worlds into a few kilobytes of ROM. What blows my mind here is that even the NES had ~40KB of program space — and this entire boss fight, complete with sprite animation, scrolling landscape, and MIDI music, fits in 256 bytes. The NES ROM header alone is 16 bytes. Incredible work.
[−] parkertomatoes 38d ago
Audio doesn't work, but here's an emulator link

https://parkertomatoes.github.io/v86/?type=com&content=aACgB...

[−] ale42 38d ago
Didn't run it (yet) but it looks nice. Great that some people are still able to optimize code! I'm wondering if this would run on actual hardware (VGA + a sound card supporting MPU401 emulation)
[−] gavinray 37d ago
My favorite SNES game (Uncharted Waters 2) is a 2MB ROM.

I think about that every time I send a screenshot. The depth, complexity, and audiovisual beauty of that game stuffed into a space roughly a few times larger than a capture of my 1440p monitor in 2026.

[−] HellMood 37d ago
https://www.pouet.net/prod.php?which=105909

The "silent" version is only 219 bytes

A new version that adds new features into

the remaining bytes is in the works

[−] rob74 37d ago
Hate to be that guy, but I just can't help it: this is an impressive demo, but for me a "boss fight" is something interactive, which this program obviously isn't. That's probably the reason why the title of the article is (now?) simply "Endbot", while the name of the HTML file is (still?) "A_whole_boss_fight_in_256_bytes.html".
[−] JoshBlythe 37d ago
What a throwback! Reminds me of older gameboy games! Really nice project!
[−] vermilingua 37d ago
[−] Anmol-Baranwal 38d ago
[dead]