HN Hall of Fame Weekly email

Statically Recompiling NES Games into Native Executables with LLVM and Go

andrewkelley.me Essays & writing Essays & articles Computer science Class of 2017-08 Hall of Fame
Screenshot of andrewkelley.me captured 2026-07-20
Page preview · captured 2026-07-20

The originally submitted URL now redirects to the address above. Updating the destination does not change the item’s HN history, Hall membership, or rank.

Resurfaced independently across 8 calendar years, with breakout response in 4 of them.

submissions
12
submitters
12
observed span
2013–2026
peak thread · 96 comments
560 pts
latest 20+ return · 2017-09-15
265 pts

Submission timeline

2007–2026

One slot for every year since HN launched. Height is that year's peak points; orange marks a 100+ point or 50+ comment breakout. Select a bar to open its strongest thread.

First comments on top threads

HN comment order

This is amazing. Also, this is the Dark Magic of programming that I don't think I'll 100% grok in 20 years, but its good to try! edit: now that I think of it, I really need to keep expanding my knowledge. I'm going to go through this post in my terminal and try to at least make the stuff work, so I can start understanding this process. I've been trying to learn Go and C better anyway. Thanks for providing…

tibbon·560-point thread·

I have actually been rather obsessed with this lately. You'll see that there's a few problems he runs into that he deems insurmountable, which sounds like a challenge! Specifically, there's the issue with an instruction which is effectively a computed goto: A jump instruction that takes an address and then jumps to the address STORED at that address. Since there is no way to know at compile time what addresses are going to stored at a place, you're forced to…

All that work, and then he hits the expected killer problem - self modifying code. Getting past that without an interpreter is going to be tough. Not impossible, because the self modifying code isn't that dynamic in the places he found it. It's not like it's reading external input and compiling it. There are a limited number of cases to be handled. It's amusing seeing this in a machine which gets its code from a ROM.

Animats·265-point thread·

Assembler programmers of that vintage were crazy. I did a fair amount of reverse engineering of Honda engine computers[0] from the late 80's early 90's and this kind of thing was the status quo. These things had 256 _bytes_ of memory, and they used every single one, some of them being multiplexed to do multiple things. There are some interesting, digestible bits in the serial interrupt handler[1] [0]: https://github.com/benogle/obd0vtec_dev/blob/master/src/stoc... [1]…

mrbogle·113-point thread·

The first top-level comment from each of the four biggest threads, in HN’s own order. Excerpts are shortened; open a comment for full context.

Breakout years
4

100+ points or 50+ comments

Total points
1311

reference only — not used in Hall rules or ranking

Total comments
231

reference only — not used in Hall rules or ranking

Every submission