triggering SNES revision 1 CPU DMA/HDMA crash?

Discussion of hardware and software development for Super NES and Super Famicom.

Moderator: Moderators

Forum rules
  • For making cartridges of your Super NES games, see Reproduction.
Post Reply
lidnariq
Posts: 10677
Joined: Sun Apr 13, 2008 11:12 am
Location: Seattle

triggering SNES revision 1 CPU DMA/HDMA crash?

Post by lidnariq »

Does anyone know how to reliably trigger the DMA/HDMA crash? I was hoping that we might be able to figure out what was going on using poot36's slightly-broken SNES, but byuu tells me it's not simply as easy as just starting one of each transfer type at the same time.
User avatar
Ramsis
Posts: 341
Joined: Sun Jul 01, 2012 6:44 am
Location: Lion's den :3
Contact:

Re: triggering SNES revision 1 CPU DMA/HDMA crash?

Post by Ramsis »

I struggled with this very bug in an early alpha build of my PowerPak firmware. I could try and write up a test ROM that reproduces it (the original code unfortunately wasn't preserved, but I do remember the details). This might take a few days though as I have little spare time right now ...
Some of my projects:
Furry RPG!
Unofficial SNES PowerPak firmware
(See my GitHub profile for more)
lidnariq
Posts: 10677
Joined: Sun Apr 13, 2008 11:12 am
Location: Seattle

Re: triggering SNES revision 1 CPU DMA/HDMA crash?

Post by lidnariq »

If you have any down time, I'd appreciate it.

Only caveat is that poot36's SNES breaks the stack pointer when you issue a PLB or PLD instruction, but you probably don't need those.
User avatar
Ramsis
Posts: 341
Joined: Sun Jul 01, 2012 6:44 am
Location: Lion's den :3
Contact:

Re: triggering SNES revision 1 CPU DMA/HDMA crash?

Post by Ramsis »

Here you go. :)
Screenshot (the bug isn't emulated though)
Screenshot (the bug isn't emulated though)
Source code is included so you can tinker around with it if you feel like it. BTW, I ensured there were no plb/pld instructions used. :wink:
Attachments
dma-hdma.7z
Test ROM that lets you trigger the infamous DMA<>HDMA clash
(96.94 KiB) Downloaded 226 times
Some of my projects:
Furry RPG!
Unofficial SNES PowerPak firmware
(See my GitHub profile for more)
User avatar
Ramsis
Posts: 341
Joined: Sun Jul 01, 2012 6:44 am
Location: Lion's den :3
Contact:

Re: triggering SNES revision 1 CPU DMA/HDMA crash?

Post by Ramsis »

Screenshots of some of the less dramatic effects:

Image

Image

Image

I especially like the solid green background color it brings up at some point. :wink: Note how the text cursor position gets messed up as well.
Some of my projects:
Furry RPG!
Unofficial SNES PowerPak firmware
(See my GitHub profile for more)
User avatar
mikejmoffitt
Posts: 1352
Joined: Sun May 27, 2012 8:43 pm

Re: triggering SNES revision 1 CPU DMA/HDMA crash?

Post by mikejmoffitt »

This is beautiful and weird; is the cause of this crash written up somewhere? A little searching didn't return much.
lidnariq
Posts: 10677
Joined: Sun Apr 13, 2008 11:12 am
Location: Seattle

Re: triggering SNES revision 1 CPU DMA/HDMA crash?

Post by lidnariq »

I was hoping to trigger the crash on poot36's SNES (since he has a logic analyzer there) but it hasn't been cooperative yet.
Near
Founder of higan project
Posts: 1553
Joined: Mon Mar 27, 2006 5:23 pm

Re: triggering SNES revision 1 CPU DMA/HDMA crash?

Post by Near »

> This is beautiful and weird; is the cause of this crash written up somewhere? A little searching didn't return much.

Nobody knows.

Given that it crashes the program execution, I have no way to write a software test to verify what's going on.

My best guess is that it ends up fetching (H)DMA data for instructions to execute and/or fetching instructions [and subsequently displacing the program counter] for (H)DMA to process.

But from over a decade of past experience, it'll most likely end up being far more convoluted than that. When it comes to the SNES, it's never the most logical behavior.
tepples
Posts: 22345
Joined: Sun Sep 19, 2004 11:12 pm
Location: NE Indiana, USA (NTSC)
Contact:

Re: triggering SNES revision 1 CPU DMA/HDMA crash?

Post by tepples »

I'm guessing an address bus conflict of some sort between the CPU and the HDMA controller.
Post Reply