Yup, yet another interview, but this time with something even more interesting: I managed to interview some of the devs of the reicast emulator developers (which also were responsible for NullDC); not only this allowed for experiences to be recounted about the emulator scene (and explanations about how things worked), but it also was quite an long one this time around, so be prepared for that 🙂
Reicast official logo
Both NullDC and reicast are emulators created to emulate the SEGA Dreamcast console, which was released in Japan on November 27, 1998; and later on September 9, 1999 in North America. Despite the Dreamcast having innovated with several features (like online play, the design, being more powerful than whatever else was avaliable), it was overshadowed by the existence of the Sony Playstation 2 when it was out, and it was discontinued in March 2001. However, despite its short life, the Dreamcast lived on the hearts of many, and this really showed with the communities that appeared around it. Of course, one way that people from the internet would be able to know and appreciate the Dreamcast and its games, was through an emulator.
The original nullDC logo, made by gb_away. It was used in all nullDC versions until 1.0.4
NullDC was first released to the public in 2007 by its two main developers skmp and ZNullptr (named drk||Raziel and ZeZu back then) that still work on reicast to this day, and another two guys from the original team, GiGaHeRz and PsyMan. NullDC received some few but significant updates until August 2011, where the last version of it was released. However, its legacy would last in reicast, developed by the same staff behind NullDC, starting around 2013, and having support for more platorms instead of just Windows (namely, Linux, Android, and MacOS). On the topic of the team themselves, they even had provided introductions of themselves on a GitHub thread; but beyond that, there is much more story behind NullDC, as like with every person, there’s always a story behind each one, as well as their projects and the scene.
In this occasion, skmp (and ZNullptr) provided an interesting insight about many things that went on during the NullDC and reicast development processes, as well as some comments about the emulation scene (they liked to joke around as well). Had to get on quite late in order to complete the whole thing, but I’d say it was worth it, and I’m sure it will also be enjoyable for many others (including you). Without any further ado, please enjoy this interview 😀
This interview was conducted on April 17, 2020. The entire interview was made through an Discord server, and most of it is presented as it happened.
Hello there skmp. Was interested in interviewing you about NullDC and reicast; NullDC always has quite intrigued me, and I would also be able to use some of the info for an article I’m working about on my site.
skmp: Uh, sure. Do you want just me, or the rest of the team as well? I’m sure Z would be interested.
If the rest of the team would also be down for it, sounds good then.
skmp: Have you seen our weekly live streams at all?
Been a bit busy so couldn’t check them out yet, but I do know about them.
skmp: Not really important what’s in them; just if you want to get an idea about our style.
Alright! So, first of all, how would you describe the reicast team (including yourself)?
skmp: We are a bunch of random humanoids
Since how long have you guys been around the emulation scene (or developing emulators)?
skmp: Emulator user since ’97 or so; my first dev attempts must have been in ’99 or 2000. My first attempt for DC is probably in 2002.
I’m aware that at first, most of the reicast staff worked at developing NullDC. What inspired you (skmp) into developing nullDC?
skmp: I was inspired from Ikarus
Ikarus? You mean Ikaruga? Or are you talking about something else?
skmp: A Dreamcast emulator Znullptr was involved in, led by Cyrus64 (as far as I remember). Site might still be up on archive.org
Znullptr: *laughs* Ikaruga…that was a good game *smiles* Yes, Ikarus was by Cyrus and me. It was the first DC emulator to have 3D graphics, then the first to run a commercial game.
skmp: That was in early 00’s, right Z?
Znullptr: Yep, 2000. A lot of info for KOS (KallistOS) was contributed as well. It’s a software library for writing Dreamcast software, written originally by Dan Potter.
[Edit note: While info about this early emulator can often be found under the name “Icarus”, the mentions will still be kept as “Ikarus” as it was done on the interview.]
What was the Dreamcast game that impressed you guys the most? As in, favorite game or something that really inspired development for Ikarus/NullDC?
skmp: Toy Commander. It had exceptional concept art.
Znullptr: I just wanted to work on a next-gen emu, but I did like some of the games obviously. Sword of the Berserk was good. The Dreamcast also just had a nice hardware architecture too.
skmp: Yeah, SOTB was amazing. My true inspiration though, always was the Dreamcast boot sound. It was so…serene (though it’s not a game, not sure if it counts)
I’d say it also does! *smiles*
skmp: Yeah, good old times. I miss being a kid.
I’m very glad that you guys are able to take some time for this by the way. I always get fascinated to talk with people like you guys, that know their stuff in programming, as well as having been there in the scene back in the 2000’s; I didn’t exist at that time *laughs*
skmp: By the way, KOS is KallistOS; Kallisti means “the most elegant” in greek or something nearby (κάλιστος)
Around what time NullDC started development (if can remember?)
skmp: Uh, that’s uber complex. Some parts were from dc4ever, my second attempt in C#. Here’s an reconstructed history in Github made from backups. I took a lot of inspiration from dcemu, another project I think it was on Sourceforge, that I joined as an extremely junior dev. (C-based) I also did an attempt in VB6, but it didn’t have unsigned ints so I had to switch to programming environment (that never got named). TL;DR: try, fail, try, fail, try, fail, you get it.
Znullptr: I’d say it was around 2005 or so.
skmp: I think we had named it dc_test around that time, right? I even had some timestamped screenshots on the reicast page. *links to page*
ZNullptr: I had been working on the next generation of Ikarus at the time, and we just were starting building something else from pieces.
Something I just thought about is that, for example, to develop an DC emu you had to focus in several things, like the CPU, the PowerVR GPU, and the sort Can you guys describe on what thing did each one specialize during development? (If there were specific parts to each one, unless everyone just contributed in general from what they found)
ZNullptr: Little bit of everything, the only complete thing one person worked on and not the other would be skmp and his recompiler.
skmp: Don’t forget about your renderer, Z.
Znullptr: Yeah, at the time I worked on PVR and you [skmp] worked on recompiler. Later I worked on the ARM recompiler and you did your own graphics too, so…*shrugs*
skmp: Before joining forces, Z gave me a binary copy of his Ikarus plugin, which I plugged into my C# code, and started to run some kamui code. A few weeks later we decided to join forces and work on a C/C++ version, as far as I remember. I think it’s only fair at this point to mention PsyMan; the project could have never been continued without him.
Znullptr: Yeah, he didn’t come into the equation for a while, but he certainly was there for a long while.
skmp: I think it was in Christmas 2006 (or maybe either Christmas 2005 or NYE 2006) when you sent him a beta while drunk, thinking he was my friend. (I didn’t know the guy)
Znullptr: Sounds like something I’d do, and probably meeting PsyMan was towards ’07; that’s more when games were playable and we needed testing.
skmp: Nah, we released the first beta release on April 1st, 2007; he was already involved at that point. We had Crazy Taxi running in Summer 2005, so we needed testing from then.
Znullptr: Sure, but it wasn’t playable.
skmp: I also had my first major mental breakdown in 2006; he [PsyMan] did “metal” support by sending me this song when I was effed up: (Xandria – Black flame) (I had a 10 year long depression, from 1998 to 2008) Why do you think I always stand by his side? It’s likely I wouldn’t be around if it wasn’t for him and his consistent and constant support ever since I met him. That’s why I always called him the manager :p Psy also did community mangement and kept the nasty parts away from me.
Znullptr: After being in emudev server, I now know that mental health issues are rampant in ’emudev’…
Good to know everything turned out well for you skmp. What was the first game that you remember that booted on NullDC/dc_test (or that you used at first to test if everything worked right)?
skmp: Craxy Taxi.
Znullptr: Yeah, there were other games close as well, or some may have booted first. But Crazy Taxi was always a target, easy to get running as a first ‘real’ game. As amusing as this is, some of the emulator packs (like SEGA Smash Pack) ran very quickly.
skmp: *laughs* Crazy Taxi worked even before the BIOS. (damned AICA and that XD/FD mov bug, such stupidity) *links to two pictures* That was my dev PC back then (and the first dev PC for NullDC), and that was me.
Photo of skmp’s computer during early NullDC development
Photo of skmp during early NullDC development
Now that you mention Sega Smash Pack, what did you guys think about the note left by the developed to Echelon rippers? (that was found quite some years later for that matter)
Znullptr: I don’t remember the note, I fuzzily recall there being one but what it said. But you’d be surprised at how many things have easter eggs & jokes, odd strings in binaries and such.
skmp: I didn’t know it even existed, didn’t spend much time with rips. I dumped my own games (that’s how GDI files were created)
Around what time was the very first NullDC stable release was unleashed to the world?
skmp: April 1st 2007.
ZNullptr: CDI was from an commercial product, and GDI was created in…2008?
skmp: CDI was from DiskJuggler. GDI was an easter egg in the first release (I think), but I forgot. *links to ngemu thread* It was used in 2008. *links to another thread* WinCE in 2006 lol
What was the game that most got requested or hyped often when nullDC was just out?
skmp: Hmm, that’s an tough one, I can’t recall. Our first beta ran around 80% of the games, but we covered the catalogue so vastly it wasn’t an issue like FFX and Naruto games were for PCSX2. Sega Rally 2 was one of the ones that didn’t work.
ZNullptr: Any and all, mostly the ones that didn’t work lol Shenmue didn’t work right away either, as it crashed somewhere in the game on the first beta.
skmp: Oh. Likely. *writes excellent bug*
ZNullptr: That was my job.
skmp: Evidently, NullDC is an bugfest masquerading as an Dreamcast emulator
Did it support the four controller ports on the first beta?
skmp: Yup, and netplay too. I recall writing the netplay on my birthday as a gift to the world. (my first domain for NullDC, http://nulldc.emudev.org/, is still up)
I’m aware that the netplay function in the very first build was removed on later builds. Can you comment about that?
skmp: Okay, I revise my previous statement: I write bugs and remove features; that’s my official role (The code was lost, or I was bored)
ZNullptr: That type of netplay over dialup sucked.
skmp: Yeah. Well, I had ADSL back then, but pings still sucked.
Can you describe how that netplay worked?
skmp: Well, it’s trivial really: It first makes sure that the two emulators start on the same state, as NullDC was hard deterministic, and that meant that the same user inputs would result in the same output. (That was a design goal, and an PITA to get to) So you just needed to send the other player’s key inputs over the network, and the two NullDC instances were in sync. The netplay logic was less than 1.000 lines of code, likely lower than 200. As the user, you had to configure the other players as “virtual inputs”, and you could do up to 4-way netplay this way, with any combination of Local VS Remote players. It worked perfectly if RTT was < 16ms (Round Trip Time; how much time it takes to send a packet of data to someone over the internet and get a reply back ); I had 24ms to PsyMan so I didn’t further look into it. (30 fps games were fine, but 60fps games were getting delayed input by one frame – which I deemed not acceptable; our quality standards were always sky high…if only Reicast was the same *laughs*) Netplay was also there (of sorts) in later versions, and was in the open source version as well. The netplay server was lost when the code was open sourced, as I had forgot to include it.
Fair enough. It only officially supported Windows, right?
Outside of the official NullDC plugins, did you guys know about any third-party plugin dev for NullDC? As in, knew the devs through internet or something, or at least if were aware of third party plugins?
skmp: Several ones, many of which are included in the source drop. facon4ever made an input one (from PCSX2)
That one was PuruPuru Input Plugin IIRC, right?
skmp: Yeah. mudlord started work in PVR, but then I dropped off collapsing into depression in 2010. KrossX3 did another input plugin as well. We also had ElSemi’s audio backend as a plugin from his post-chankast work, right?
ZNullptr: Maybe. There also was ectord3d from Ikarus.
skmp: ElsemiAICA, chankaAICA, chankaPvr, zNullGD, zNullPvrGL…Well, I guess Z’s plugins were merged to core as well.
Now that you mention ElSemi, I guess that you guys knew him, right?
skmp: Yeah of course I knew him (and garoffi). Much later, I worked for Blitworks (their company) at some point, but I odn’t know if ElSemi was involved there. Overall, Ikarus was born in the british-usa scene (boob.co.uk), demul in the russian one, chankast in the spanish one (emulatronia.es) and nullDC was the first truly international effort (usa/greece + we got code drops from pretty much everyone else). There also was Makaron…I think it was polish? I got inspired a lot personally from DEMUL’s source, the dynamic vmem registration is a “re-imagination” of their handler system, and it’s sad that they decided to close their source.
How would you describe the process that went under to integrate Naomi support on NullDC?
Znullptr: One day I decided to get the BIOS running (lol)
skmp: Was about a week of work or so of mad hacking and plagiarizing Chankast code for me :p (the damned CRC buffers) The mmap logic in it is directly from Chankast. And yeah, the BIOS was already working when I got my hands on it.
Was the feature of upscaling the graphics resolution an feature implemented early on development, or was added later as an afterthought?
skmp: It was a natural part of the 3D plugin design existing from Ikarus. Right, Z?
Znullptr: Natural part, but not in the same way as, say, PPSSPP; we don’t scale geomtery resolution.
skmp: We now have a fairly complete reference Software renderer, but that would have been prohibitively slow in 2000. (and we should do that [geometry resolution scaling] now!)
ZNullptr: Yeah, everything was prohibitively slow in 2000, I started on a 300mhz Pentium III, TNT2, and like…512MB of RAM.
skmp: I had an 600EB, and also had an TNT2, and those were harsh targets, but we could have gotten fullspeed on the 600. The Chankast team developed a fullspeed Xbox port (733mhz) and NullDC was far more optimized than Chankast. Kind of stupid of SEGA not using that in collaboration with Microsoft, but who am I to judge.
Were you guys aware of nullDC Naomi being used to play Guilty Gear XX Accent Core online back in 2011 through an netplay input plugin?
skmp: Nope, good job on that one. I think it should be noted here that I strong armed Z into opening the source, namely…by not asking him much about it :p (apologies Znullptr, I know you’ll never forgive me)
These binaries were lost to time few years ago, but they resurfaced recently as the owner of an netplay community, FGC Arcadia, contacted someone from the GG scene and provided him that build.
ZNullptr: Anyhow, I’m off. Gonna get some game time in before bed.
skmp: bye Z
Not sure how aware you are about the Sonic community, but what did you think about communities like Sonic Retro using NullDC and the sort in order to do heavy researching on the Sonic Adventure games?
skmp: I wasn’t aware of that activity, but I feel the code was well used if that happened.
I guess it made sense to research an Dreamcast game through an Dreamcast emulator lol
skmp: Yup, we also had a full debugger; I bet that helped :p Oh, and regarding NAOMI, I think that this thread is relevant.
Around at what point was Modem/BBA support added, if it did happen?
skmp: Uh, modem was never really implemented. flyinghead did that in reicast like last year; I was too lazy. I started looking at BBA on November 25, 2006, when I added 2 ExtDev plugins.
Also, regarding BBA, what did you think about Dreamcast Live and the community behind it reviving some of the Dreamcat game servers?
skmp: I think it’s an amazing effort. I know someone here has a PSO server…BlueCrab maybe? Sylverant or something?
BlueCrab: Oh look, someone mentioned me and Sylverant. Yes, Sylverant is my server 😉
How did you feel with nullDC last release (and with nullDC overall after all these years?)
skmp: I felt pretty horrible for releasing such a mid quality code base with so many games not working, but I couldn’t stand my life anymore…I was 170 kgs and with zero social knowledge. After crashing on 2010 and thinking I might kill myself, I decided to open source nullDC so it didn’t get lost in case I went down. This thread was my almost suicide note. I was knee-deep in existential problems, but again, as always, PsyMan saved the day. (Placebo also helped :p)
I have to admit that I also had some issues with socializing many years ago; internet and games was often my only relief, but at least there are things that make you look forward, and of course as you say, you end up meeting friends that are always there for you and enjoy the same things. May be going a bit personal here, but I have so much to thank to all of my friends, as well as these nice communities on the internet.
skmp: Yeah, the internet definitely saved my life; totally unlike these days, where emudevs kill themselves left and right…it’s disturbing. We just lost another person a few months ago, and someone from the Dolphin group in 2016.
Very sad to hear about those things going on.
skmp: You might want to lighten things up.
…Well, what do you think of how NullDC helped many people around the world (including me) to enjoy Dreamcast games? Not only for those that had one but due circumstances had none anymore, but also for people like me that always were intrigued by it.
skmp: I feel lucky; it was just my personal academic work, I never thought it would be useful for anyone else.
What were the reasons for you to start developing reicast? (after stopping development on NullDC and starting anew)
skmp: I was bored, I did surgery and lost 70kgs, socialized and got a girlfriend; all that took years but also filled me with a lot of positive energy, specially cardogram (my then GF); she even made a site for NullDC to cheer me up :p (but sadly I never useed that site :/)
The first thing you started developing it for was Android, right?
skmp: No, PSP.
skmp: A friend from university was a mod at some PSP CFW sites, gusretalis. I think Psy made the first video of that as well.
What was the platform you ported reicast to after that? Windows or Android?