triggering SNES revision 1 CPU DMA/HDMA crash?
Moderator: Moderators
Forum rules
- For making cartridges of your Super NES games, see Reproduction.
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.
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)
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.
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.
- 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)
Furry RPG!
Unofficial SNES PowerPak firmware
(See my GitHub profile for more)
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: 1352
- 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.
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.
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.
Re: triggering SNES revision 1 CPU DMA/HDMA crash?
I'm guessing an address bus conflict of some sort between the CPU and the HDMA controller.