triggering SNES revision 1 CPU DMA/HDMA crash?
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?
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.
-
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?
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)
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?
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.
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.
-
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?
Here you go. 
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.
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.
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)
Furry RPG!
Unofficial SNES PowerPak firmware
(See my GitHub profile for more)
-
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?
Screenshots of some of the less dramatic effects:



I especially like the solid green background color it brings up at some point.
Note how the text cursor position gets messed up as well.



I especially like the solid green background color it brings up at some point.
Some of my projects:
Furry RPG!
Unofficial SNES PowerPak firmware
(See my GitHub profile for more)
Furry RPG!
Unofficial SNES PowerPak firmware
(See my GitHub profile for more)
-
mikejmoffitt
- Posts: 1353
- Joined: Sun May 27, 2012 8:43 pm
Re: triggering SNES revision 1 CPU DMA/HDMA crash?
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?
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?
> 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.
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.