Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

So uh I didn't see it mentioned, but the question of why this code is in the games arises.

Is it buggy code, or something intentional like anti-emulator sneakery?



It's pretty likely that it's just buggy code that happened to work on hardware.


Definitely just working by chance in this case. This comes up a lot, unfortunately. Small budgets, tight deadlines, games not validated for correctness under software emulation for detecting these types of edge cases prior to shipping.

Another example: there are several GBA games that dereference null pointers, but it works because there is no memory protection fault hardware in the GBA. Since the BIOS is mapped to address 0 and yet locked out from reading post-boot (in a failed anti-copying mechanism), you have to emulate the open bus behavior to run these games correctly as a result.

There are also several anti-emulator routines in the GBA library, such as lying about the type of save memory (flash, EEPROM, or SRAM) that a given game actually has (by including strings in the ROM from the Nintendo SDK used to access them.)


Still, in the case of Hello Kitty, there's got to be a reason the developer added that loop at startup, right? They might have not understood the intricacies of how or why it worked, but presumably they were trying to do something.


> Then I noticed a difference between my test ROM and Pokémon Emerald when they hang. There was music playing in Pokémon. There was also music playing in Sonic Pinball Party. There wasn’t music playing in Hello Kitty, but this gave me an idea.

Maybe there was supposed to be music playing, this was for timing it, and it was removed, broken, or just forgotten about?


>games not validated for correctness under software emulation for detecting these types of edge cases prior to shipping.

Did they have software emulation for that hardware at the time the game was written?


For the Game Boy Advance, yes. There was both a secretive internal Nintendo GBA emulation kit, and the public emulator development community had devkit games emulated before the system even officially launched.

I understand it was less practical to do this for say, the NES or SNES. But it should have been done for the GBA. It's not just important for future hardware to be able to easily emulate GBA games, it also protects against product refreshes breaking games, something that plagued quite a few classic Game Boy games as newer models came out and fixed bugs in the older models.


Could be original authors knew that the DMA fetched value is on the bus and waited until certain kind of value was visible.

Perhaps to "fix" some weird DMA related bug.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: