Live data from Hacker News

Modder re-creates Game Boy Advance games using the audio from crash sounds

arstechnica.com

21–30 of 89 posts

Re: Modder re-creates Game Boy Advance games using the audio from crash sounds

#21
post #16

Earlier quoted context omitted.

The author's previous video[1] explains the technical details regarding this behavior. Basically the way GBA sound works is there is a buffer in RAM that the audio is streamed from, and an interrupt is supposed to signal the hardware to begin reading data from the beginning of the buffer again. However, if the interrupt is never fired (such as when the game crashes), the audio stream will go beyond the buffer and rea…

Would this be dependent on the audio file that was being played during the crash to start at address 0 of the ROM? It seems like it'd be highly unlikely you'd be able to get 100% of the ROM. Now if this was a hack where the thought was, "What if we dumped the whole ROM to the audio buffer, could we recover the complete ROM through audio analysis?"

The ROM on the GBA is mapped into memory at high memory addresses (0x08000000 and above). The audio "working" buffer is in low memory (I think somewhere near 0x02000000?). An interrupt fires when the audio chip reads to the end of the working buffer that looks something like this:

- run the function to fetch the next batch of audio to audio working RAM

- reset the audio read pointer to the beginning of audio working RAM

When interrupts are disabled (because the game has crashed), that "reset pointer" code never runs and the audio circuit keeps reading way past the end of its buffer, incrementing forever. Eventually it would increment into the 0x08000000 range in which case the sounds it's emitting map directly to the bits in the ROM.

Re: Modder re-creates Game Boy Advance games using the audio from crash sounds

#22

Why would this happen in the first place? Is it common for these games to dump state to audio? Is it a deliberate debugging tool for the game devs?

It's pretty uncommon and it's not a deliberate debugging tool. In this case, the GBA could, hypothetically, have had a way to "park" the architecture on a game crash, or "watchdog" the system (by tying state update somewhere that should run periodically to a non-maskable interrupt that reboots the machine if that state update stops happening).

Simply because it costs more to do those things, the GBA doesn't (Nintendo instead opting for the time-worn approach of the great game cart manufacturers of old, "if our games don't have bugs we don't have to worry about the behavior of the hardware in undefined state!"). So when a GBA game gets into some crash states (infinite loop with interrupts disabled, for example), the audio chip doesn't know the system is crashed and keeps doing its very simple job: reading sequential bits in RAM and converting them to sounds. Without the housekeeping that normally runs when the game is in good working order shepherding that read operation, it just keeps reading and eventually gets to the bits representing values in the cartridge ROM.

Re: Modder re-creates Game Boy Advance games using the audio from crash sounds

#23

The issue with long runs of 0x00 is related to "clock recovery". > Some digital data streams, especially high-speed serial data streams (such as the raw stream of data from the magnetic head of a disk drive and serial communication networks such as Ethernet) are sent without an accompanying clock signal. The receiver generates a clock from an approximate frequency reference, and then phase-aligns the clock to the tra…

I love how we used to use a bunch of very clever "code book" systems like 8b/10b which did a lot of careful work with small runs of bits to ensure the clock was recoverable and to avoid line capacitance issues.

Then we just moved to things like 64/66b which takes a giant chunk of bits, adds a short header to guarantee a clock transition, then runs everything through a pseudorandom scrambler.

Re: Modder re-creates Game Boy Advance games using the audio from crash sounds

#24

This is insanely impressive. I'm sure many of the techniques used like the "majority vote" algorithm cited are underutilized across many industries.

I wondered about it for film scanning, specifically with a fan project like 4K77 where they're dealing with potentially damaged theatre prints rather than pristine masters— having multiple of them and being able to use that to eliminate scratches and so on would potentially save a ton of time on manual fixing in post.

Re: Modder re-creates Game Boy Advance games using the audio from crash sounds

#25
post #7

Glad to see this getting more attention here, it was posted a few days ago but drowned ( https://news.ycombinator.com/item?id=39037104 ). The original video has a lot not mentioned in this brief article, including a custom adapter that the hacker had to cut together manually to get the right audio quality out of the DS.

Link to "original video": https://www.youtube.com/watch?v=0-7PSmYYHF0

The video was great. I think my favourite part is where he dumps the Chinese knock off version and finds the random ARM code and reverse engineers it. So much cool stuff in there.

Re: Modder re-creates Game Boy Advance games using the audio from crash sounds

#26

Earlier quoted context omitted.

Link to "original video": https://www.youtube.com/watch?v=0-7PSmYYHF0

The video was great. I think my favourite part is where he dumps the Chinese knock off version and finds the random ARM code and reverse engineers it. So much cool stuff in there.

Right? This kind of stuff just makes me look silly in what I'm able to achieve. I can only accomplish watching a video of some guy doing bad ass stuff and maybe holding onto a few notional details. People are just super smart sometimes.

Re: Modder re-creates Game Boy Advance games using the audio from crash sounds

#27
Does anyone know what's going on when the TheZZAZZGlitch's emulator reports that the game tries to jump to an invalid address? I'm not so familiar with the ARM7 processor used in the GameBoy Advance, but I can't imagine how it would be possible to construct a jump call with an invalid value. Additionally, what would happen if one of TheZZAZZGlitch's incorrectly reconstructed ROMs was run on a real GameBoy?

Re: Modder re-creates Game Boy Advance games using the audio from crash sounds

#28
post #14

Earlier quoted context omitted.

> I imagine the 0xFF might be converted to 0x00 due to DC blocking capacitors/high-pass filtering, audio circuits aren't really suited for non-audible content. Yeah, you want to generate a signal with no DC bias, something as simple as Manchester encoding will go a long way. If that's not good enough, there's NRZ or even a convolutional encoding. You also want to make sure you either send a sin wave, or if you can't…

Would it be possible to get a higher quality read from using something like an Arduino's I/O pins and some bit-banged C code? I'd be curious to see what would be possible using cheap, off-the-shelf tools since a lot of people don't necessarily have an oscilloscope laying around. :P

Without looking up datasheets, just form the top of my head: the Arduino DAC most likely has 12 bits resolution (as common for cheap uCs), and maybe even slower sampling than a soundcard. A sound card was probably better than that even in the 1990s (say a Sound Blaster).

Re: Modder re-creates Game Boy Advance games using the audio from crash sounds

#29
post #14

Earlier quoted context omitted.

Would it be possible to get a higher quality read from using something like an Arduino's I/O pins and some bit-banged C code? I'd be curious to see what would be possible using cheap, off-the-shelf tools since a lot of people don't necessarily have an oscilloscope laying around. :P

Without looking up datasheets, just form the top of my head: the Arduino DAC most likely has 12 bits resolution (as common for cheap uCs), and maybe even slower sampling than a soundcard. A sound card was probably better than that even in the 1990s (say a Sound Blaster).

The original Sound Blaster could only record at 8-bit resolution at up to 12 kHz. The 2.0 could record at up to 15kHz, still 8-bit.

The second generation of Sound Blaster was the first that could record at 44kHz (mono) sampling rate, but was still only 8-bits of resolution.

It wasn't until the 3rd generation Sound Blaster 16 that 16-bit audio could be recorded.

Re: Modder re-creates Game Boy Advance games using the audio from crash sounds

#30

The issue with long runs of 0x00 is related to "clock recovery". > Some digital data streams, especially high-speed serial data streams (such as the raw stream of data from the magnetic head of a disk drive and serial communication networks such as Ethernet) are sent without an accompanying clock signal. The receiver generates a clock from an approximate frequency reference, and then phase-aligns the clock to the tra…

I love how we used to use a bunch of very clever "code book" systems like 8b/10b which did a lot of careful work with small runs of bits to ensure the clock was recoverable and to avoid line capacitance issues. Then we just moved to things like 64/66b which takes a giant chunk of bits, adds a short header to guarantee a clock transition, then runs everything through a pseudorandom scrambler.

A sprinkle of entropy improves everything
Post reply on HN