> he accomplished this without the source code

Sure thing, who needs source code? This is HN.

But instead of reverse-engineering, I would just find or write an emulator, in case I would be asked to "port" another software.

It's actually sad that for the most part, we don't know who is responsible for the good and bad features of software we use. In movies, there is an extensive practice of showing "credits" at the end, and I enjoy reading them in detail. Software development should have the same culture (some games do, and then some "Easter eggs" do).

> In movies, there is an extensive practice of showing "credits" at the end, and I enjoy reading them in detail.

Thanks to huge protracted union fights. You’ll find the credits in an old US-produced movie—say, Gone with the Wind—are much more sparse than in one from the last decade or two. Incidentally, those fights happened too early to include CGI artists, and those often do go uncredited (undercredited?) even today.

Not that the Hollywood unions are a definite positive in all respects, or that the whole idea of fighting an oligopsony by establishing a monopoly in the shape of a cooperative doesn’t ring warning bells in my mind. But the movie industry absolutely would not credit most people if it could get away with it, and I wouldn’t expect the software industry to be any different (barring rare early pre-financialization examples[1]).

[1] https://www.folklore.org/Signing_Party.html

> I would just find or write an emulator

Nowadays, yes. Back then, systems could barely run the OS they came with...

Probably not well enough for a game, no. But the Apple II[1] and even the Apollo Guidance Computer[2] used interpreted bytecode to make their programs more compact. (The AGC actually had near-seamless interworking between native code and bytecode!) Also Pascal P-code, Microsoft BASIC’s pretokenized source, almost every Forth implementation ever, etc. The performance cost was pretty significant as you’d expect, but the result was still fast enough for the task.

It was also pretty common to use more capable machines to get some headroom for development tools, either by compiling for one (DOOM on NeXT) or by cross-debugging the system under test from it (a still-in-progress Lisa when developing the Macintosh; a DEC minicomputer, IIUC, when developing MS-DOS). You still do the former when you run an x86-64 image in your Android emulator; you probably still do the latter if you are targeting a microcontroller.

[1] https://en.wikipedia.org/wiki/SWEET16

[2] https://media.ccc.de/v/34c3-9064-the_ultimate_apollo_guidanc...