See, before I got my Dreamcast in November 1999 I owned a Nintendo 64. I couldn't get a Dreamcast at launch because my dear old mother (God rest her soul) forbade me from owning more than one console at a time. Consoles, she wagered (and therefore games of all types) led to a malady known simply as "brain rot." Her words, not mine.
Regardless, I tell you this to set the scene of my pre-Dreamcast gaming habits. I wasn't what you'd call a hardcore Nintendo fan, you understand - the Nintendo 64 was actually the first Nintendo system I had owned at that point, having been a devout Saturn apologist immediatley prior and before that one of the 7 people in the UK who owned an Atari Jaguar (Jag reference: check). No, I got a Nintendo 64 because I simply had to have 'the fastest, most powerful games console on Earth,' which was ironic, seeing as that's how Nintendo's platform was officially marketed at one point.
Oooh...a Sonic the Fighters preview? Sold! |
In the very early days of the Nintendo 64's existence, it was known as the Ultra 64, which apart from being possibly the sexiest moniker ever to grace a games console, also invited many a developer to prefix their upcoming titles with the word 'ultra.' With this in mind, one of the games that piqued my interest very early on was Ultra Doom.
By the time the magazines were teasing Ultra Doom, I had already played the original Doom on the PC (a slightly decrepit 386 that even at the time was wheezingly obsolete, what with its Windows 3.1 operating system and lack of CD-Rom drive), and had then sampled Doom's delights/horrors on the Atari Jaguar and the Sega Saturn respectively. But Ultra Doom - which was later renamed Doom 64 - now...that held a certain fascination and morbid curiosity. It was Doom, but not as we knew it. Side note: I was also very much looking forward to the Ultra 64 port of Red Baron, but we'll probably never know what happened to that particular footnote of gaming history. Moving on...
Give GT Interactive a ring on that number bottom left. I dare you. |
From the first time I saw those pink plasticine (clay) demons, foreboding sky boxes and brand new levels reproduced in tiny low resolution magazine preview shots, I knew I would one day play Doom 64. Quite simply, it was my destiny. Lo and behold, the prophecy was eventually fulfilled and Doom 64 was a constant inhabitant of my Nintendo 64's cartridge slot once I managed to get hold of a copy in late 1997 or early 1998. I can't quite remember exactly when I got Doom 64 because it was 27-odd years ago...and now I feel the crushing weight of middle age gripping my soul. Thanks for that.
Still banging on about Turok nine months later. Boring! |
What I do remember though, is the magazine reviews. The journos of the era, I seem to recall, while not crushingly negative, weren't exactly enamoured with Doom 64: some reviews slagged off the sprite based visuals, puzzle design and complete lack of multiplayer options. Turok Dinosaur Hunter had also been out for a while by the time Doom 64 released, and many reviews were lukewarm on Midway and GT Interactive's Doom update for its reliance on 'old fashioned' visuals and gameplay tropes.
That didn't bother me, though - I thought Doom 64 was excellent and I can clearly remember being awestruck the first time I saw that darkened corridor in the second level where the neon arrows are painted on the floor and ceiling. It was just mesmerising and fresh to me, especially having played other versions of 'normal' Doom to death. I should also mention at this point that I had also played the PlayStation port of Doom on a friend's console and I loved the colourful lighting...but, y'know, I didn't have a PlayStation. It is what it is.
![]() |
It's about to kick off. Nice candles though. |
By now, you're probably wondering what any of this tripe has got to do with the Dreamcast, and I think you'd be well within your rights to demand a refund of your internet data considering you came here to read about Dreamcast stuff. But here's the bait and switch: Doom 64 is now available on the Dreamcast...and it's possibly the best way to play 1997's Doomiest release in the present year...
The Doom 64 Remasters
Doom 64 was exclusive to the Nintendo 64 until March 2020, when the game was re-released in remastered form for the Switch, PS4, Xbox One and PC. Naturally, it is also playable on the PS5/PS5 Pro and Xbox Series X|S systems too. The update was handled by serial expert remasterers Nightdive Studios, and they are damn fine examples of how to do...er...a remaster. For reasons known only to my subconscious (aka my id. heh.), I have purchased these remasters on every platform apart from the Stadia (because, y'know, Stadia) and have played them extensively as they represent an accessible way to experience Doom 64 on modern platforms with a host of quality of life improvements.
Updated visuals, enhanced audio, better controls and the addition of extra content in the form of The Lost Levels (Nightdive's expansion of the Doom 64 mythos which links the game to the later Doom releases) all make the 2020 remasters worthy purchases for anyone keen to experience the game on modern platforms, without having to go digging in the attic/garage/eBay for an N64, a SCART cable and a compatible tellybox. Yes, I know upscalers exist but give me a break.
I will not apologise for Jaguar references. |
Now, in 2025 Doom 64 has finally come to the Dreamcast in spectacular fashion, with some features not even seen in Nightdive's previously mentioned remasters. These include - and I kid you not - bump mapping, real time lighting (for the first time), additional content in the form of expansions The Lost Levels and Knee Deep in the Dead, and a raft of other visual and gameplay enhancements which are exclusive to the Dreamcast port. The bump mapping is especially impressive, lending itself to the environment whenever weapons or enemy projectiles and explosions go off - personally I've never seen anything quite like this on Dreamcast, and it looks fantastic.
Original Doomguy makes a fully animated cameo on the VMU screen! (in this case, a VM2 provided by the legendary Chris Diaoglou at Dreammods). |
![]() |
The bump mapping and lighting on the walls is rather excellent. Also: eat chaingun, Imp bastard. |
Doom 64 for Dreamcast gives players the choice of running at either 30fps or uncapped (targetting 60fps, which for the most part it consistently hits), and has VMU saving, VMU display and rumble support. The controls are superbly mapped to the stock Dreamcast controller (analogue stick for movement and triggers for strafing), and there are additional input modes which even consider the Retro Fighters StrikerDC controller. No Twin Stick or maracas support yet though. Yet.
Interestingly, you can also toggle some visual settings, such as whether the game sports the familiar N64-style texture smoothing or opts for a pixellated texture pallete; and there and three seperate detail options - low, medium and ultra (which I like to think is a nod to the Ultra 64, and I will die on this hill - Update: Jnmartin84 confirmed that it is!)
![]() |
Texture filter on, ultra graphics. |
![]() |
Texture filter off, ultra graphics. |
![]() |
Texture filter off, low graphics. Look at the light top centre for reference. |
Personally, I just leave the detail on ultra and the texture smoothing set to 'on' for the best experience. There's also the ability to mess about with the positioning and colour of the on-screen HUD, and even turning it off altogether if you're absolutely a sucker for punishment.
![]() |
I just love the splashes of light from the plasma rifle. Really makes the pinkie death animations pop. |
The build we have sampled here at the Junkyard is essentially feature complete in terms of the Doom 64 experience, and as someone who has some modest history with the original game and the remasters, I can't help but gush about how impressive an accomplishment Doom 64 for the Dreamcast really is. But rather than just take my word for it, we thought it would be interesting to speak to the brains and the brawn behind the Dreamcast porting project - jnmartin84.
Developer Interview with jnmartin84
DCJY: Hi jnmartin84, thanks for taking the time to answer our pestering questions about this epic Doom 64 porting project for the venerable old Dreamcast! Let's start at the beginning. What's your history with Doom 64?
jnmartin84: Sure, thanks for reaching out. Well, with the announcement of the Nintendo Ultra 64 and then Ultra Doom, I was ready to see what the hype was all about. I remember I saw a big spread in the magazine GamePro, with new weapon and monster graphics and I was immediately hooked. I rented Doom 64 (as it was then called) as soon as my local store got a copy and played the hell out of it on a couple of tiny TVs. One of them was a black and white!
Reminds me of when I played International Superstar Soccer 64 on a tiny handheld black and white TV just because I could. It wasn't ideal. Anyway, where did the idea to port Doom 64 to the Dreamcast come from?
There were a few disjointed steps in starting the project. In 2020 or 2021, I connected online with a guy named Immorpher over my work on my Nintendo 64 port of the original Doom. Immorpher is well known in the Doom community and he was working with reverse engineered Doom 64 code on the Nintendo 64, and he showed me how to set up the ancient LibUltra development environment to build it. I hacked on it for a bit and one thing I did was make it run at 640×480 on real Nintendo 64 hardware. It looked great...but it was slow.
Fast forward to 2023, and I was going through some of my things. I pulled my old Dreamcast out of a box, and found that it still worked. I was wondering if there was still an active homebrew scene and then found that KallistiOS was alive and well and set up a new toolchain. I then got some old projects working again with it.
The actual decision ended up being an off the cuff message to Immorpher: "I'm bored and don't know what to work on, I think I'll port Doom 64 to Dreamcast." That was September 2023, and I finally decided to start working on porting Doom 64 to Dreamcast in late March 2024.
![]() |
"No, that green really suits you! Brings out your eyes!" |
Well, we - and pretty much everyone who has sampled it - are mightily impressed with what we've seen. Can you tell us who else is involved in this project?
The actual development has been all me. I haven't been working alone though.
I've had subject matter expert support from Immorpher. He's the guy when it comes to Doom 64. He introduced me to the Doom 64 reverse engineering/modding scene. He showed me so many of my bugs and inaccuracies along the way. I would have never resolved those without him.
I bounced so many technical ideas off of him too while trying to figure out how to shoehorn the game into memory. How to transform art and deal with palettes. How the sound and music worked. Doom 64 for Dreamcast is actually a port of one of his mods, Doom 64 Merciless Edition for Nintendo 64.
I've also run into technical difficulties and bugs in KallistiOS along the way. Being able to directly communicate and work with the people maintaining KallistiOS has been huge to making the rapid progress I did. In particular, Falco Girgis and Paul Cercueil spent a bunch of their time debugging issues, helping me figure out the problems that weren't on my end and improving KallistiOS along the way. It literally wouldn't run the way it is now without that work.
![]() |
I've never actually noticed how hench most of Doom's enemies are. |
That's one of the great things about the Dreamcast scene, there are loads of really knowledgeable people who are only too happy to lend a hand to cool projects such as this one. Now, it's no secret that Doom 64 looks marvellous - can you tell us a little about the enhancements you've made to Doom 64 for Dreamcast?
Over the summer, after remembering some of the old GL Doom ports I had played, I made an impulsive statement and decision to try to implement dynamic vertex lighting for projectiles. I had a prototype working quickly.
I don't remember how the bump mapping part came about, but that became the next challenge/dare. I spent a month or so realizing I had no idea what I was doing, then had a moment of clarity and got the math worked out. I worked with people on Discord to figure out how to cram another full set of textures into RAM and then I sat down and cranked out 490-odd 3D normal map textures with CrazyBump.
The dot3 bump mapping is my favorite part in combination with the lights, it makes it look like a completely different game.
![]() |
The awesome Doom 64 intro battle is present and correct. |
We couldn't agree more. It looks absolutely amazing, with multiple light sources fizzing about and the bump mapping, and it all runs so smoothly. With this in mind, have there been any difficulties encountered along the way?
There have been some difficulties, sure. The list is pretty extensive and quite technical though, but here they are:
Just getting from "I want to port this" to "all of the Nintnedo 64 specific stuff is stripped out and it builds again" takes a week or two when you can't work on it full time.
Nintendo 64 is big-endian and Dreamcast is little-endian. Worse is that Doom 64 data has a mix between the two (Nintendo 64 native graphic lumps are big-endian, but map data generated from PC tools is little-endian).
Cartridge access times aren't fast but compared to GD-ROM they might as well be instant. They're so fast that Doom 64 can use a relatively small zone heap for caching lumps. When one is needed and not in cache, it gets DMA-ed from the cartridge to RAM and decompressed. This happens many times per frame. A random seek to access something on CD can be a half-second hard pause in your game. I separated the map WADs into separate files from the main WAD so the IWAD can be cached in RAM full-time. I also cache all bump maps and other graphics in RAM fulltime. There is just enough RAM left over to allocate a larger zone heap than used on the Nintendo 64, to support larger levels and reduce the burden of CPU time spent reloading and decompressing graphics. There are no disk accesses until a new level is loaded, or music is playing.
![]() |
The chaingun simply never gets old. |
Sound and music work in a different way. The Nintendo 64 plays/mixes sound and music on the RSP [Reality Signal Processor] with separate microcode. Samples are DMA-ed from ROM as needed. It is all very fast and requires very little memory overhead. The Dreamcast sound chip has a CPU but it is essentially useless. I play back sounds by jamming an ADPCM-compressed copy of every single sound effect into the sound RAM at startup and playing them back by index. Because of this simplification, I don't support the reverb effect from the Nintendo 64 version.
There aren't enough CPU cycles left over after running the engine and transforming all of the geometry to play music as MIDI, so I am using raw ADPCM-compressed streams for music in order to fit them all on a CD. These require zero CPU overhead to decode as they are decoded in the sound hardware.
![]() |
It was at this moment I realised that things hadn't gone well. |
Every graphic in Doom 64 is paletted. Monsters have unique 256 color palettes; skies and backgrounds have unique 256 color palettes. Every small item has a unique 16 color palette. Every single wall/floor texture has a unique 16 color palette. Some of those textures even have multiple 16 color palettes.
Dreamcast supports paletted colors, but a maximum of four 256 color palettes per frame. And they cannot change mid-frame. This required coming up with a way to re-index graphics with common palettes and rewriting the game data and engine to use them.
The rendering architectures are wildly different. The Nintendo 64's RDP is very much an immediate mode renderer. You upload a texture, possibly a palette, throw a few command words at it, you have your textured 3D triangle or 2D rectangle in your framebuffer, in isolation.
![]() |
This...is my boomstick! |
Every single wall, plane or thing that gets rendered, every frame, is uploaded into TMEM on the fly (texels and palette). It tries to be smart and not reload texture for wall or plane unless necessary, but it is still fast enough it is happening continuously. You only ever need to buffer as much geometry as needed to put a single primitive on screen. The Fast3D microcode will batch vertices into bundles of 32 for efficiency, but it isn't a hard requirement.
The Dreamcast PowerVR requires you to build up your entire scene and at the end, it will do its deferred, tile-based rendering magic and give you an image. This has drawbacks such as requiring every texture you need to draw a scene to fit into the VRAM simultaneously. You also need to fit every vertex needed to draw the scene into VRAM simultaneously. 40% of the PowerVR memory is used between framebuffer, vertex buffer and caching non-enemy sprites plus HUD graphics.
![]() |
A rare moment of calm. Enjoy it while it lasts. |
Even with the relatively large 8MB of VRAM, there is not enough memory to cache every sprite full-time. I had to write a sprite management system that attempts to keep all sprites needed to draw the most recent frame in VRAM. It will evict them if space runs low. Sometimes this isn't enough. There is another layer that will just dump all textures and sprites when VRAM is exhausted. This doesn't happen often in practice but is required for some of the Lost Levels and the additional Doom E1 content. Occasionally there will be a one frame graphical glitch when this happens. I've minimzed the effect but there's no way around it, just a side effect of deferred rendering.
Wow! That's quite the list of difficulties...and to be honest I didn't understand a lot of it mainly because I'm a bit thick, but also because I have approximatley zero game programming ability. Nice explanation though. You mentioned The Lost Levels and Doom E1 - what's the story with those additions to the Dreamcast port?
Immorpher showed me the remade Episode 1 maps a few years back. I did some work running them on real Nintendo 64 hardware and tried to see if there was a way to make them run better. They were actually developed by z0k. Over the summer we wanted to see if custom maps would work so I tried them again and had some support from a user called Mittens over on the Simulant Discord with modifying the levels to have simpler geometry and better performance. In just the past few days, I wanted to see how those maps would feel with different music. I'm a huge fan of Andrew Hulshult's IDKFA, so I encoded a copy of the nine Episode 1 tracks he created and hooked it all up together in the code.
Immorpher also showed me the 2020 Doom 64 remaster - I hadn't been following things closely enough to even know about it. He got those levels working on actual Nintendo 64 hardware and had a nice campaign selection setup going, and that made me want to support them on Dreamcast. I'm glad I did as they look so good with the new lighting.
![]() |
Music from Andrew Hulshult's awesome IDKFA features. |
Yes, totally agree - the coloured lighting is superlative. I guess the question on everybody's lips is: what are your release plans for the game? Will it be a free download?
A release is always going to be tricky. The game itself is still for sale, and copyright is very much active. I put a lot of effort into making the conversion from Nintendo 64 ROM and Nightdive release data files to Dreamcast assets as painless as possible. It will always be a requirement.
There should at least be a pre-built ELF file in the repo in the near future, but that's as close to a release as I can legally get.
![]() |
You can really play around with various HUD settings. |
That makes sense. Nobody needs a Bethesda-shaped boot on their face. Just on the topic of Doom though, you're clearly as enamoured with the franchise as I am (if not more so!). What does Doom mean to you?
It's my favorite series of all time. I got Doom II way too young back in 1994 and I did a bunch of modding. Then I found the source ports in the late 90s and decided around 1999 I wanted to port original Doom to Nintendo 64, but had no idea what I was actually doing as I was still messing with programming on my own. Fast-forward 15 years, a degree and a decade of work experience and I actually made it happen with 64Doom. It's software rendered PC Doom/Ultimate/Doom 2/Plutonia/TNT running on Nintendo 64 hardware with full sound and music. Six more years and I was introduced to reverse engineering scene for Doom 64. A few more years later and here we are.
I'd say Doom is why I got my degree and how I ended up in my career. So does it mean a lot to me? That seems like a fair assessment.
***
Rip and video-tear!
Massive thanks and respect to jnmartin84 for taking the time to answer my questions. I think at this point you'd probably like to stop squinting at my shit screenshots though and see Doom 64 running on a Dreamcast. Well, you're in luck. Our pals over at The SEGAGuys have come up with the goods once again, and have put together a rather excellent little summary of Doom 64 running on the Dreamcast, explaining all of the enhancements and of course showcasing the game in action. Turn the volume up and have a little gander at this (disclaimer: there is no video/screen tearing. I reserve that effect for my own shoddily made productions):
Doom, oh Doom
Doom is possibly my favourite game franchise of all time. I have played pretty much every version except the Tapwave Zodiac port of Doom II (has anybody actually ever played that?). There's no other franchise in gaming that I hold so dear to my heart. WADs, total conversions, Brutal Doom, Doom with ray tracing, Doom with voxels, MyHouse...everything. I find myself playing it repeatedly, no matter what the platform year after year, and I know many of the maps like old friends.
Is it possible to play Doom 64, Doom II and read Masters of Doom all at once? Let's find out! |
From the original 1993 release to Doom Eternal and everything in between, I can't get enough. I have read countless articles on the topic of Doom as well as books such as Masters of Doom and Doom Guy and I hang off every word decino uploads to YouTube - hell, I even bored the shit out of John Romero himself when I met the dude at an event back in 2014. Eventually he was quite keen to get away from the frothing Jaguar fanboy setting up the RetroCollect Super Burnout challenge, but not before I rugby tackled him and forced him to sign my copy of Jaguar Doom. Sorry about that, John.
VLC player was quite keen to photobomb us. |
All this is to say, I think I know a little bit about Doom...and Doom 64 for the Dreamcast impressed me so much I felt I needed to pen (type) all this to let you know how amazing a port it is and share jnmartin84's work. Yes, you can play it on any number of modern platforms. But to play it in such a well constructed package on the Dreamcast...well, that's just black magic.
![]() |
This seems like a good way to end things. |
We can't link to a download of a cdi for this project for obvious reasons (basically, I don't wan't Bethesda or Nightdive beating down the Junkyard's gates), but if you'd like to know more about jnmartin84's quest to bring Doom 64 to the Dreamcast, and how to build your own version of it, you'd be wise to head over to his Github repository here and have a read of the documentation surrounding this porting project. As ever, if you've played this impressive Dreamcast interpretation of Doom 64, please feel free to jump into the comments to let us know your thoughts.
7 comments:
Do you like Doom, Tom?
Jokes aside, an excellent read. Incredible work from Jnmartin84!
Trademark facetious Charnock style, complete with Jag references? Here at the Junkyard in 2025? You just love to see it!
This is, imho, one of the single most important pieces of software in the entire history of the Sega Dreamcast. Graphics experts have been debating for years whether the PVR could actually do this much bump-mapping in a real game sceanrio, or whether it was too taxing...
The technique was just too new and the DC's lifespan was just to short for it to ever get truly utilized... until now.
Thank you so much for doing this release justice with the interview.
Thanks for your comment Falco, you're 100% right - it's such an impressive and important development for the Dreamcast. Also huge respect for your continued work on KallisiOS, this and GTA 3.
Haha! Thanks Lozz
Cheers Lewis, I do love a bit of Doom. That new art gallery Doom thing is awesome too XD
For anyone who is having trouble building, someone has uploaded a cdi of the latest build to the Internet archive.
Post a Comment