- cross-posted to:
- [email protected]
- cross-posted to:
- [email protected]
I’m more confused than anything. What?
For some reason, when a GBA game crashes, the GBA will output the content of the game cartridge as audio over the headphone jack. This person noticed it and created a script that can re-create the ROM file (content of the cartridge) from the audio that the GBA outputs.
When I read shit like this I realize I don’t know a damn thing about computers
Oh, that’s not new tech.
Programs used to be on standard audio cassettes.
In fact, there were even radio shows that would broadcast games. Listeners could then record the audio onto a cassette and play it on their zx spectrum or commodore 64What the fuck, see know nothing about computers, despite a career in IT and a homelab addiction
It’s all data, whether that data is text, an image, audio, or a binary containing computer code.
Raw audio data is just a series of amplitudes. It has a bit depth (which says how many bits are in each amplitude sample) and a frequency (what is the change in time going from one amplitude to the next). Using those, you can convert it to an analog signal that can be played on a speaker. And if you use the same values to convert that signal back to digital, you end up with the same input signal (though with some random noise added and if you get unlucky and your sample phase lines up with the player’s transition phase, you won’t be able to extract the original signal, though it might sound similar). The multiple recordings help mitigate these issues.
Given that data format, any arbitrary file can be treated as raw sound that can be transmitted as analog audio.
The only real difference between this and other transfer methods we use to transfer files is that this involves a less reliable conversion from digital to analog back to digital because it wasn’t designed to do that like USB, COM, wifi, etc connections are.
Sending data over audio was how dial up Internet worked. My guess here is that the audio playing hardware loses the ability to come to a stopping point at the end of the audio file after a crash and starts playing the data in the memory after the audio file ends as if it were audio.
It might also be a debugging behavior built into the device
That’s my guess as well.
The guy who uploaded the video that corporate content farm is “reporting” on actually covers exactly why this happens. In short, the gba plays sound from a certain part of ram, which a cpu interrupt continously refreshes. In the event of a crash, it keeps playing sound, but doesn’t get the interrupt to keep it playing the proper data from ram. If you let it cycle through all of ram, it eventually leaks out and just starts playing, well, everything else, eventually getting to the game rom. Relevant Videos
Interesting. I’m check those out, thanks!
I assume the game was playing an audio sample while it crashed, and the hardware never stopped playing, meaning it just kept playing through the entire address space.
Having not watched this yet, I’m going to guess that this failure state basically results in the processor simply incrementing its address pointer indefinitely which will inevitably just loop across the whole contents of the rom, along with current state ram data? Outputting audio might be a bug in this case, a hardware bug that is. Unless it was an esoteric way for the system designers to debug using oscilloscopes? Maybe it was meant to just dump ram contents but ended up hitting all rom addresses? Either way, I’m excited to watch this when I get some more time and just wanted to speculate based on the short description of the video I read.
I’m guessing it was a debug mechanism. There are other systems that use the audio port as a serial port in debug mode, so I’m guessing that’s what’s happening here.
Here’s a link to the original video https://youtu.be/0-7PSmYYHF0
I’m pretty sure in the guy’s video that came before that one, he said that he didn’t know if other games handled audio in the same way that the Gen 3 Pokemon games did, and that they might not be able to be copied this way.
I’m interested to see if someone can do this again, but with a completely different game, maybe Metroid Fusion or something, idk.