\thread
Does developing for consoles encourage better programming habits?
You haven't achieved mastery over your machine until you have utilized undocumented instructions. As for the 'emulators', their job is to copy the hardware, bug for bug.
Terry played chicken with a train.
Tell that to the developers of Unreal Engine 4
AKSHUALLY...
I'm fairly certain that at least the original PlayStation had several minor hardware revisions. Because of this, a lot of low level hardware functions had to be accessed through the BIOS so as to ensure every game would be compatible with later hardware revisions. Prior to this, console programming was the wild west, with all kinds of undocumented features and quirks bugs being used in insanely clever ways to do impressive things. That was lost once consoles started having BIOS and later OSes taking control of things. Today, a console is just a computer with a hard limit on processing power. If it doesn't downright use a PC graphics API like DirectX, it will at least be a proprietary yet very familiar imitation of one. Not very interesting stuff to be honest.
Look up "the game hut" on jewtube. It's this guy who worked at Traveler's Tales in the 90s. He has tons of videos explaining a bunch of ingenious stuff they did with the Sega Genesis and other systems.
Don't forget the obvious example of the N64 and the extension back.
Should have to do a project on the VCS2600 Where you have to count every clock cycle and learn to live with 128 bytes of ram.
The N64 also had the 64DD (that was only released in Japan). While there were generally no actual hardware expansions released for most of those consoles: they all were built with expansions in mind. The Genesis had a CD expansion, and the PlayStation started out as a CD expansion for the SNES. And the NES and SNES (at least) could have extra chips added to the cart. While the hardware was far more captive, it was not nearly as captive as OP seems to think, and really most new hardware came about because it was easier to market a new system than an expansion to an old system.
Both the SNES and NES also had an expansion connector that went largely unused other than some Japan-exclusive weirdness.
The problem with game consoles is how they use weird CPU architecture and then you're basically learning platform-specific shit that is guaranteed to be thrown out in a few years, and it'll be obsolete and useless. PS4 and Xbone are the only recent examples that this isn't true for (they're both x86), but it's still true that a lot of console stuff ages poorly. You can still run old Java code on a new computer, using old Apache Commons shit. But the problem with new and disposable appliance-type stuff is that they come with their own proprietary APIs and things that come and go all the time. Hell, even doing mobile app development is similar. Too many different SDKs and OS fragmentation for Android, and shit used to be done in Java but now they're switching to Kotlin. And Android IPC is annoying as hell. As for iOS, you used to do things in Objective-C but now they're switching to Swift, and so on.
Consoles are only good if you wanna be a vidya developer, but that's just a neckbeard pipe dream. And in terms of tech and practicality from a development standpoint, they suck.