I had just finished toying around with the Mac port of PPSSPP (the PlayStation Portable emulator), a relatively simple app to get going despite its lengthy install process. Curious about the person behind such an admirable effort, I decided to do some digging. My discoveries were both astonishing and humbling.
Karen Tsai (angelXwind) is a 15-year-old student from New York. A programmer, a gamer, and a tinkerer, she’s had a hand in several great projects, from the aforementioned PPSSPP for Mac, iOS, and Linux, to the popular Nintendo DS emulator for iOS, the appropriately named nds4ios.
Karen was kind enough to take time out for an interview, in which she provides insight into the history of InfiniDev, opines on the power of collaboration, and announces an ambitious new direction for nds4ios.
On Servers and Programming
K.T. — I’ve been running the aXwNET IRC network for around 2 years, initially running UnrealIRCd, then moving to InspirIRCd. At first, aXwNET was its own independent IRC network, and not much really happened there. I really just kept it running just for the sake of having it there.
After the move to InspirIRCd, aXwNET was linked to the massive IRC network known as StormBit IRC, which is where it is now. It’s been relatively peaceful, though there had been several instances of drama happening in the network. But that’s all past us now.
V.G. — How long have you been programming, and how did your interest in development begin?
K.T. — I’ve been programming since I was 9 years old, starting in Blitz BASIC, a video-game-oriented derivative of the BASIC programming language. I was a massive Sonic the Hedgehog fan back when I first discovered the BlitzSonic engine, written by Sonic Retro community members Damizean and Mark the Echidna. The engine itself was open-source, so I took a look around it.
I… understood practically nothing, but decided to try anyway. My first engine modification to the BlitzSonic engine was simply a button that would set Sonic’s speed to a high value, mimicking the “boost” action found on SEGA’s Hedgehog Engine used in Sonic Unleashed and Sonic Generations.
Quite honestly, at that time, I didn’t exactly understand everything about what I was doing, and the modification was mostly achieved by copying and pasting chunks of code until it worked, but it was an accomplishment to me, anyway.
It was largely the “I can make a computer do this” feeling that really gave me the motivation to pick up programming.
On InfiniDev and Team Freerunner
K.T. — InfiniDev began when rock88 contacted me one day. rock88 is the original developer that made the initial port of PPSSPP to the iOS platform, hence why the bundle ID for the iOS port of PPSSPP is “com.rock88dev.PPSSPP”.
He expressed interest in bringing Jeffrey Quesnelle (jeffq)’s nds4droid emulator, which uses DeSmuME as its emulation core, to iOS. And so, the first-ever port of an Nintendo DS emulator to iOS was created, dubbed “nds4ios” (even though it was actually named “Project” in Xcode).
At the initial version, 0r18, nds4ios was honestly a bit of a mess, with a UI that I threw together in a few minutes. Eventually, the emulator was updated to 0r32, increasing compatibility with a significant number of games. This is when Brian Tung (inb4ohnoes) contacted me via a reddit private message, expressing interest in working with me on the nds4ios project.
Honestly, I was very grateful his offer. Despite my prior involvement with iOS, nds4ios was actually my first UIKit application I have ever written. Soon, new members began pouring into the team, including several of Brian’s friends, my friend Angela Tsai (vanillastar67) also joined, and the rather famous Riley Testut, best known for his GBA4iOS emulator. Together, we created InfiniDev.
Jesús A. Álvarez (maczydeco) added audio support to nds4ios, while Michael Zhang (Malvix_) designed the nds4ios icon, allowing us to depart from the nds4droid icon we were using until then. Brian and I made major overhauls to the UI, which went through several iterations before settling on what we have now. Oh, the joys of MMDrawerController.
Currently, we are in the process of updating the UI for iOS 7, fixing GNU Lightning JIT, and attempting to make nds4ios more RAM-efficient (so the infamous iPod touch 4th-generation doesn’t crash). Far-off goals include paravirtualization (more on that later).
V.G. — You’re also part of Team Freerunner. Can you tell us a bit about that project?
K.T. — Team Freerunner started with Sonic Freerunner, an ambitious project headed by Azukara of Sonic Retro. It was originally a game based on the BlitzSonic engine, aiming to be a complete overhaul of the BlitzSonic engine while creating an unique Sonic fangame that would blend elements of classic Sonic games with modern ones.
My previous work on Sonic Turbine was basically fused into Freerunner very early on, undergoing many revisions in the process. After spending quite some time in BlitzSonic development, we decided to move to SonicGDK, which uses Unreal Engine 3.
As a result, “Sonic Freerunner” became the name of the BlitzSonic engine, while the main game itself would be renamed to “Sonic World Runner.”
Development in Team Freerunner was rather interesting, to say the least. There were a number of issues pertaining to organization and coordination due to the sheer size of the team, but those were seen more in the artistic end (3D modelers, texture artists, so on) than in the programming end, which I was a part of.
The radical switch from BlitzBASIC, which I have had prior experience with, to UnrealScript was slightly difficult to adjust to, as the two function very, very differently.
Unfortunately, despite all the activity, Team Freerunner eventually fell silent. Members of the team started getting busy with their lives, and development slowly ceased. Not all hope is lost, though, as Azukara is attempting to revive the project.
On the PPSSPP Project
V.G. — In our previous conversation you mentioned that your biggest contribution to PPSSPP was the PPSSPP_MEDIA project. What is the PPSSPP_MEDIA project?
K.T. — The PPSSPP_MEDIA project was a project originally conceptualized by a member of the the Chinese PPSSPP community, cv4720120318 (“cv47” for short). Her idea was to add video decoding support to PPSSPP using FFmpeg.
The initial code was initially messy and very unoptimized, mainly because cv47 actually did not have an iOS device to test on, and my iPhone 4 was nowhere near fast enough to handle PSP emulation at a speed above 7 FPS (the A4-S5L8930X has a really weak GPU).
Currently, much of the code has been revised, and has been largely taken over by other developers with far more skill than myself.
V.G. — One of the highly-awaited features for the OS X port of PPSSPP is the ability to download the emulator as a single application bundle. How far off would you say that goal is from becoming a reality? What are some difficulties you’ve faced in porting to OS X?
K.T. — The overall goal for PPSSPP’s OS X UI is to make one in Qt. The Windows build of PPSSPP remains to this day, the only desktop version of PPSSPP that actually has a desktop UI, as opposed to just running the mobile-oriented SDL UI like the OS X and Linux ports currently do.
It’s not really that far off, but development has been slow (rather, it’s been nearly untouched), as the priority really lies more with the emulator core than anything else.
The only difficulties were really just getting PPSSPP to behave with LLVM clang. However, I will say that what I feel that is “difficult” is the sheer amount of steps the end-user has to do just in order to use PPSSPP.
The user would have to download Xcode, download Homebrew, install the Xcode Command Line Tools, install SDL, and then they’d be able to launch PPSSPP. The end goal is to get PPSSPP all wrapped up as a nice application bundle, just like every other OS X application out there.
On the Mac and iOS Emulation and Dev Scene
K.T. — I’ve honestly never even heard of OpenEmu. However, it’s an interesting project, seemingly similar to RetroArch. Currently, I’m a bit busy with other projects, so I won’t really be able to contribute to it much. It’s all very interesting, though.
V.G. — What are your feelings on paid emulators like DraStic DS Emulator?
K.T. — As long as there aren’t any license violations, then I’m fine with it. In DraStic’s case, the entire emulator, even the ARM7/ARM9 binaries, is original code, so the developer, Exophase, has every right to charge $7.99 for it.
V.G. — What caused you to take such a great interest in the iOS jailbreaking community?
K.T. — Even before I obtained an iOS device, I was always amazed at the sheer amount of things a jailbroken iOS device could do. Once you learn more about mobile operating systems like iOS and Android, you really begin to realize that these mobile devices are really miniature embedded computers, and share much more in common with their desktop counterparts than you would think.
Honestly, I guess you could say that I just enjoy making stuff. I see the the numerous MobileSubstrate extensions that are available from Cydia, and realize that I could create them as well. iOS is just a fun platform to work with in my opinion.
Though, that doesn’t mean the Android community won’t be seeing things from me in the future.
On Ambitions, Buildbots, and Pineapples
V.G. — What’s the most ambitious project you’ve taken on in recent memory?
K.T. — Quite honestly, I always felt that nds4ios was one of the most ambitious projects I’ve done. Bringing a whole new emulator to iOS was something I never imagined myself doing. But hey, look where we are now.
In fact, nds4ios is trying to do something that (to my knowledge) no other iOS emulator has done before. We’re attempting to achieve paravirtualization.
The Nintendo DS has two CPUs, an ARM7TDMI and ARM946ES. Because It is possible to execute ARM7TDMI code directly on Cortex A-Series CPUs (which recent iOS devices have), this would (in theory) give a significant speed boost.
It’s a far-off goal, scheduled after we complete GNU Lightning JIT, but it’s a very interesting thing.
V.G. — What about your automated build software, KarenBuildBot? Are you planning to do any more work on it?
K.T. — Yes. In fact, quite a lot. Angela and I are working on this, including adding archived older builds, DEB generation for Debian-based Linux distributions, and also add Android APK generation to the mixture.
V.G. — Finally, what’s with the pineapple?
K.T. — It’s a bit of a joke that kinda stuck between a few friends of mine IRL (and also within InfiniDev). The pineapple I refer to constantly is actually nicknamed the “pwnapple,” which is the pineapple that is found in redsn0w and other iPhone Dev Team utilities.