triggering SNES revision 1 CPU DMA/HDMA crash?

Discussion of hardware and software development for Super NES and Super Famicom. See the SNESdev wiki for more information.
Forum rules
  • For making cartridges of your Super NES games, see Reproduction.
lidnariq
Site Admin
Posts: 11802
Joined: Sun Apr 13, 2008 11:12 am

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

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
Site Admin
Posts: 11802
Joined: Sun Apr 13, 2008 11:12 am

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

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

Post by Ramsis »

Here you go. :)
dma-hdma.png
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:
You do not have the required permissions to view the files attached to this post.
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

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: 1353
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
Site Admin
Posts: 11802
Joined: Sun Apr 13, 2008 11:12 am

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: 22993
Joined: Sun Sep 19, 2004 11:12 pm
Location: NE Indiana, USA (NTSC)

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.