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?
skmp: Life at uni was social but extremely non challenging (lul) Some handles [usernames] I regurarly used were drk, drk||Razi, drk||Raziel; also Raziel back in the pscode days, but there was another emudev person called Raziel, so I prefixed my then clan name from Counter Strike, Darkan, shortened to drk. (Darkan was a play on words on Dragan, a pretty awesome PC game for* its time)
Cool. So I guess it took an good while to redo everything on reicast again, or you ended up taking most code from NullDC?
skmp: 99.5% was NullDC. I first ported it to WinCE, and I had the compiler but no device, but it was an easy way to isolate the x86 parts. Once that was compiling, I ported to GCC, and then I think it was PSP, then Wii, then PS2.
So you’re telling me you ported it to WinCE…the same WinCE used on the Dreamcast?!?
skmp: Yeah, pretty much. Someone else meanwhile (gligli) did an xbox360 port independently. After PS2, I moved to ps3, but the SDKs were meeh, and I fell again in depression so decided to take a break. (most of that is documented in my drk.emudev.org block, which is in archive.org)
Moopthehedgehog [reicast tester]: WinCE had like 5 versions though, Dreamcast uses 2.1 I think; 5 is like XP.
skmp: Yeah, I targeted 4 or 5, VS2k5 iirc. That’s why I did it that way, didn’t port all of the handles and WinAPIs.
mrneo240 [reicast tester]: I believe WinCE is kinda 3-ish, though.
On a side note mrneo240, were you part of NullDC/reicast development at one point? Or just were involved from other emulation projects and Dreamcast homebrew? Just got curious.
mrneo240: Only homebrew developer, never emu.
Was it trivial or tough to port the rendering stuff to OpenGL in order to support other platforms? (As I assume that NullDC originally used D3D)
skmp: Yeah, it was trivial: The renderer is the easiest part, and for PSP I also wrote a tiny PSP-GPU emulator so I could debug PSP code on PC. (It did PSP -> OpenGL) The psp version was quite a grind, but hlide helped a bit too (they are french)
What do you expect or plan for reicast in the near future?
skmp: I want to fully do the reicast vs libswirl separation, with libswirl beeing a toolkit that can be used to put together dreamcast emulators. reicast will remain as is, and hopefully get better, and use libswirl as it’s backend. nullDC will also use libswirl, but at a different configuration aiming for newer devices and usability. reicast is the swiss army knife, nullDC will be the premium apple expirience, and libswirl will be available under BSD, containing all of the core tech, for anyone to use free of charge.
So you mean that NullDC returning in the future was more than an April Fools joke? xD
skmp: We’re only serious during April Fools; that’s why we released on April 1st 2007. It’s a reverse troll. I’m greek, I love my drama and troll :p (as long as it’s funny for everyone involved, that is; getting people killed isn’t what I call fun but let’s not derail again)
Was keeping the NAOMI support on separate binaries in Reicast an design choice, or just an carry over from that decision in NullDC?
skmp: Carry-over for performance reasons. Doing the switch at runtime has a (minimal) runtime cost of around 0.2%, which is unjustified for convenience. 0.2% optimizations in the JIT take a few weeks to develop, mostly because my design is so very much broken at this point. We plan to refactor that and replace it with a declarative-generative fully tiered JIT and AOT architecture. I’m aiming for a 40% performance win.
What have been your thoughts on NAOMI 2?
skmp: Sure, if we have time. The DEMUL team has stated in the past that they are willing to share some information (and DEMUL already supports it).
To mix things up a bit…what is your favorite emulator? (Outside of anything Dreamcast-related)
skmp: ePSXe. I played so many games on it as I couldn’t afford a PS1. I used emulators cause I didn’t have money to buy the consoles as a kid. I used to trash collect and put together PCs that some pharmaceuticals threw out; was lucky to grow up in a privileged part of Athens. Also, Bleem gets a special mention: They are my personal heroes, going against Sony and winning, kept open source possible; but killing their baby (they went bankrupt from the lawsuit, Connectix brought the rights and released it as VGS afair). Their code for ps1 on dc is pretty genius. I think nullDC was the first “scene” emulator to use MMU for fastmem and page tracking. Reversing Bleemcast when I was getting it to work, they did the same with the SH4 MMU; almost a decade before me (doing the math, more like 6 years). Much kudos such respect.
I had seen from a Tech Rules video that Bleemcast was assumedly developed through Assembly in order to achieve such performance. I found very intriguing that you had reverse-engineered it, any comments about that?
skmp: That description matches with what I’ve seen. I had to run Final Fantasy Chronicles (was my favorite PSX game) along with Breath of Fire IV. (I love teh draganz) So I wanted to see Bleemcast running in NullDC running on my PC 🙂 Two levels is always more fun than one, right?
I guess that you owned an Dreamcast, did you ever play on the internet back in the day?
skmp: I only brought a Dreamcast much later on, around 2005-06. I was freelancing with some people on the internet and I had solid money, so I got it for emudev. Never played any games on it, all I wanted was the BIOS sound and I went fairly OCD on the entire thing. I remember when I had my first harsh existential crysis when I was 16. I solved it like “I’ll look into the meaning of life after I emulate the dreamcast, mmkaay?” and things escalated. Had to have something to keep ugly thoughts out of my head. So I guess that in a way, it was my toy and my companionship, along with Z and PsyMan.
What emulators have you used to play online before? (excepting NullDC)
skmp: I haven’t actually done that. Only played a couple of matches with PsyMan on NullDC for development, and that’s all. We couldn’t get determinism right, it was SSE vs SSE2 giving different results, and games desynced. I won both on my copy and his copy, though it was a different stage, somehow :p (Dead or Alive 2 Limited Edition was our testing game)
On a context outside of NullDC/reicast, what emulator has impressed you the most?
skmp: I was heavily influenced by refraction and the PCSX2 project. I was a kid and they were my family. Reffy even setup the nullDC forum for me in ngemu. I was saddened when ngemu got sold off and we lost our domains in 2007-ish. PCSX2 also inspired me to think about open source and set the base for my current world view that extends far more than just emulation. PCSX2 was co-started by shadow- who did pcsx, and he’s a greek for the Northern City of Thessaloniki; I only saw him online years later. It also was a huge undertaking, completely dwarfing nullDC or others emulators of it’s time, and the first, truly successful, “scene” open source emulator in my eyes. I was priviledged enough to be a contributor in their project for a few years.
Got any thoughts about all the other Dreamcast emulators that have been around?
skmp: There are so many I lose track; Makaron and DEMUL are awesome and far more complete than reicast and nullDC. Their source is closed so I can’t vouch for the code quality though; but they are definitely less psychedelic on that matter. I wrote nullDC in sprints of 40-70 hours non-stop coding, and crashing 20-30 hours after for several years. My personal record is 119 hours. Life gets pretty psychedelic after the 30 hour mark; it’s free drugs after 100 hours. Most of my contributions to the scene were done in those late hours.
Moopthehedgehog: 119 hours is around 5 days
skmp: Yeah I know, did I tell you I got to 170kgs right? I was consuming 5-10K calories per day, and at least 1L or cola light per hour. At that time, I wanted life to end, didn’t care much about health.