[HN Gopher] RP2040 Doom
       ___________________________________________________________________
        
       RP2040 Doom
        
       Author : xkriva11
       Score  : 174 points
       Date   : 2022-03-14 13:59 UTC (9 hours ago)
        
 (HTM) web link (kilograham.github.io)
 (TXT) w3m dump (kilograham.github.io)
        
       | ChuckMcM wrote:
       | Fun stuff, it always amazes me that people are surprised. Not
       | having lived through it is a part of that I'm sure.
       | 
       | The RP2040 is more powerful than an 80286. The PC/AT which was
       | hugely more powerful than the original IBM PC (on which DOOM also
       | ran). Put a keyboard, mouse, and an frame buffer on an STM32F4 or
       | F7 and you've got the computational and capability equivalent of
       | the PC's that powered the world in 1985. People did accounting,
       | CAD, spreadsheets, email, all sorts of things on them. Amazing I
       | know, but here we are.
        
         | _joel wrote:
         | Sure, but it's not about the speed of the hardware but what was
         | done to port it to the hardware. RAM and ROM would be larger
         | then. It has 256KB, I remember 286's having well over 1MB,
         | 386's even more!
         | 
         | I don't think PC/AT was sub $1 either :)
        
         | vbezhenar wrote:
         | I thought about building toy pc with rp2040 but I wasn't able
         | to solve gpu problem. Driving display seems very hard task
         | without some dedicated hardware. And using serial output is not
         | fun.
        
           | II2II wrote:
           | There are a lot of options on this front. As far as I can
           | tell, most displays for embedded platforms are sold as
           | modules that you interface with via a serial or parallel bus.
           | There are libraries out there to handle the grunt work, if
           | you don't want to dig through data sheets yourself.
           | 
           | If you want something that doesn't use any dedicated
           | hardware, interfacing with analog displays (e.g.
           | NTSC/PAL/VGA) can be done with a handful of resistors on GPIO
           | pins. Conceptually, it is easier but actually dealing with
           | timing is a pain. Again, libraries that deal with the grunt
           | work are available.
        
         | bombcar wrote:
         | Doom required a 386 (and really wanted a 486) iirc.
         | 
         | Wolfenstein worked on 286.
        
         | klelatti wrote:
         | Isn't it a __lot__ more powerful than a 286? 32 bit dual core
         | at 133 MHz - roughly a Pentium say?
         | 
         | Plus some of the early 8 bit machines drove a display with
         | minimal extra hardware - eg the ZX80 / ZX81 although it was
         | very very slow as a result!
        
           | ChuckMcM wrote:
           | In terms of instructions per clock and I/O bandwidth it
           | compares more favorably to 16 bit architectures than 32 bit
           | ones even though the Cortex-M family is nominally 32 bits.
        
             | klelatti wrote:
             | I think memory bandwidth is key and I don't know how the
             | RP2040 stacks up but even 486 wasn't superscalar and maxed
             | out at 66MHz by comparison.
        
       | IMSAI8080 wrote:
       | Wow. That's just amazing work.
        
       | RF_Savage wrote:
       | Oh boy, that is really impressive.
        
       | gchadwick wrote:
       | Awesome! A huge amount of work must have gone into this.
       | 
       | I did some playing around with VGA graphics from the Pico when it
       | first came out (wrote a simple library to produce SNES like
       | graphics, wrote it all up on my blog
       | https://gregchadwick.co.uk/blog/playing-with-the-pico-pt6/). It
       | felt like Doom should be doable but I figured you'd need an off
       | chip RAM expansion interfaced via the PIO. Clearly not.
       | 
       | The Pico really is a very fun board to play around with. Could be
       | a great target for a retro style mini console thing.
        
         | jrockway wrote:
         | > Could be a great target for a retro style mini console thing.
         | 
         | I've been playing with this thing. It's quite neat:
         | https://shop.pimoroni.com/products/picosystem?variant=323695...
         | 
         | (Note that it's a dev board; if you just want to play AAA
         | games, not the thing to buy. If you want to program a game and
         | show it off, it's what you want.)
        
           | klelatti wrote:
           | Thanks for highlighting this - looks awesome.
        
             | kefabean wrote:
             | These are truly fab little devices - i bought a couple for
             | my kids to play simple (not too addictive) games and
             | hopefully get them in to programming.
             | 
             | question is, how would one go about compiling Doom for the
             | Picosystem? that would be so cool...
        
       | 0des wrote:
       | Music and sound too???
       | 
       | ...what am I doing with my life
        
       | WithinReason wrote:
       | This thing even has networked multiplayer! In about 256K of RAM
       | and 2MB flash! (It's the Raspberry Pi Pico board)
       | 
       | Carmack would be proud!
        
         | tenebrisalietum wrote:
         | In contrast with these limited platforms:
         | 
         | SNES Doom - 128KB RAM, I think a 2MByte ROM, CPU is 65816 at
         | 3Mhz + SuperFX RISC CPU at 21Mhz, which also had its own 64KB
         | of RAM.
         | 
         | PSX Doom - 2MB RAM + 1KB fast scratchpad, able to load from a
         | standard 650MB CD, CPU is a MIPS R3051 at 33Mhz + the PSX
         | accelerated graphics, not used except to draw strips
         | 
         | So doing this in a device that has not too much more RAM than
         | the SNES and also has to livestream the VGA signal Atari 2600
         | style is exceedingly impressive. It's a dual CPU unit but
         | basically having to spend a core manually bit banging the VGA
         | signal like that is what fascinated me the most.
        
           | _Microft wrote:
           | I haven't checked but don't think that the second core was
           | bitbanging the VGA signal. The RP2040 has PIO (programmable
           | I/O) mini cores that can read directly from RAM (DMA) and
           | address the GPIO pins directly. They most likely used that to
           | their advantage.
           | 
           | Edit: yes, see
           | https://kilograham.github.io/rp2040-doom/rendering.html
        
         | TillE wrote:
         | Those are important limitations, but there's a lot of room for
         | solutions when you have a dual core CPU which is many times
         | faster than a 486.
        
           | WithinReason wrote:
           | Doom 1 itself has 4MB of RAM as a minimum requirement:
           | 
           | https://www.computerhope.com/games/games/doomx.htm#doom
        
       | anthk wrote:
       | I would love nethack/slashem on this, but I think NH 3.4.3 needs
       | 2MB of RAM at least.
        
       | AlotOfReading wrote:
       | What a coincidence, I was working on porting doom to the e-ink
       | badger2040 last week. Getting doom to fit into memory was fairly
       | straightforward, but they did a better job than me. I'm very
       | impressed they got the original WADs and networking going as
       | well. Great work!
        
         | whiskers wrote:
         | Hah! I never imagined DOOM as a use case when I was designing
         | the Badger 2040 - how foolish of me, in hindsight it's obvious!
         | 
         | How far did you get with it? Any video of the end result?
        
           | AlotOfReading wrote:
           | I got things drawing with low-complexity WADs, but had
           | issues/graphical snow after a few seconds in and needed more
           | polish to fit the original WAD in memory. I figured the video
           | would be best if it opened with the hangar level, so I
           | haven't made a one yet. Might be worth rebasing off this
           | effort instead.
        
       | vardump wrote:
       | I'm speechless. That was... an impressive effort.
        
       | qwertox wrote:
       | > I2C networking for up to 4 players
       | 
       | How does one even get these ideas?
        
         | sitzkrieg wrote:
         | two free gpios left, clearly
        
       | anthk wrote:
       | Also, check fastdoom:
       | 
       | https://www.youtube.com/watch?v=EZvI8wCVOPU
       | 
       | https://www.youtube.com/watch?v=Eh31az9epAo
        
       | _joel wrote:
       | This is a work of art, I've learnt a lot reading this, thank you.
        
       ___________________________________________________________________
       (page generated 2022-03-14 23:00 UTC)