5 ms·
I don't think I would call this undefined behavior... the behavior is defined by what happens on the hardware when it's executed! There are many, many classica
by yc-kraln 7y ago
I don't think I would call this undefined behavior... the behavior is defined by what happens on the hardware when it's executed!
There are many, many classical effects on raster hardware which are accomplished by changing registers within the horizontal blanking period... copper bars, mode 7, certain paralax scrolling. When you're on a resource limited system it becomes an art to get the most out of the platform. Look at the difference between Mario 64 and Conker's Bad Fur Day... or Genji: Days of the Blade (PS3) vs Persona 5 (PS3) Even with modern consoles, there is a marked improvement in the apparent visual quality over the lifetime of the device, as developers learn how to squeeze more and more out of the platform.
- dllthomas 7y ago> developers learn how to squeeze more and more out of the platform That's a part of it, to be sure, but another dynamic is that developers have to squeeze more out of the system. Dropping old techniques on new hardware will probably give you a game that looks "better" than what's already out. Once everyone has done that, to look "better" you need something new other than hardware.
- furyofantares 7y agoThat’s another part of it, to be sure, but yet another dynamic is that it being a mostly fixed system, rather than a wide array of target hardware, is what makes it feasible to implement these tricks and accumulate knowledge in the first place. It all kind of goes hand-in-hand — the fixed nature of the hardware makes it so you have to find these tricks in order to compete with games that play on newer hardware, and also makes it so that it’s possible to do so. I find it fascinating. But I suppose the market would have just found different stabilizing points were this not the case.
- dllthomas 7y agoAgreed.
- papln 7y ago"Unefined" refers to the spec, not the hardware. https://en.wikipedia.org/wiki/Undefined_behavior https://en.wikipedia.org/wiki/Undefined_behavior This case appears to be "undocumented scenario" or "unsupported use-case", though.
- kazinator 7y agoDo we know that the developers didn't confirm this hack with the hardware people? It could be "defined by e-mail".
- jupiter90000 7y agoFunny to think Zelda was made before email was probably used at these companies :)
- philipov 7y agoYou are playing semantics to try to justify it. If it's not in the official spec, it's undefined behavior.
- kazinator 7y agoI don't agree with the suggestion that there is no difference (other than word semantics) between relying on empirical observations and relying on a privately communicated piece of spec. The one playing semantics is you, since your apparent concern is the definition of the term "undefined behavior" and whether something falls under that definition. My point is about how well an engineering decision is justified, not what term applies to it according to some document.
- ohazi 7y agoDoes anyone actually care? This was embedded software designed to run on exactly one system, not some libc designed to run on 20 architectures ranging from 8-bit microcontrollers to VLIW supercomputers.
- 7y ago
- bluedino 7y agoSuper Mario Bros, vs Super Mario 3 (NES) Combat vs Keystone Kapers (Atari 2600)
- reificator 7y agoI'd love to compare but I don't know what Persona's giant enemy crabs look like.
- 0xcde4c3db 7y agoAlso, the specific phrase "undefined behavior" is typically invoked in a context related to the C programming language. In the C standard and some standards related to it, undefined behavior is just one point on a spectrum of (un)definedness: - implementation-defined: Not defined by the standard, but implementations must choose a consistent behavior and document it (e.g. what's shifted in when right-shifting signed integer types) - unspecified: Not defined by the standard; implementations must choose some way of addressing the situation, but need not document it (e.g. the order in which function arguments are evaluated) - undefined: Entirely outside the scope of the standard; implementations may assume that such situations never occur, and need not have any sensible or consistent behavior (e.g. dereferencing NULL) In that taxonomy, I think this is much closer to "unspecified" than "undefined". The latter is usually used in scarier contexts like random memory corruption or crashes, not consistent behaviors that rely on deliberate implementation choices as we see here.