- For making cartridges of your Super NES games, see Reproduction.
Me neither. But I made a circuit that lets you do it.
Hard to make? Not really. Is it neat? Kinda. But is it helpful? Barely.
Naturally that means I'll probably document it on my site for a few people to look at briefly at some point.
Looks like you've got two serial-to-parallel shift registers, appropriate logic (since the on-the-wire signal is active low, maybe an OR gate) and ... some kind of one-shot, like a 555 or a 74'123.
Yeah, it's got its uses! Paired with my wireless SNES controller I made like five years ago, there's some good laziness potential here haha. I just don't normally find myself resetting all that much.
I'll draw out a schematic when I get a chance and post it here, but you've got it mostly right. A basic description:
- Two 74HC595 shift registers to decode serial controller data to parallel, grabbed from controller PCB on the front of the console.
- Wired outputs of shift registers corresponding to the buttons for the reset function to OR gates (74HC32) to create one output that would activate when (at least) Start+Select+L+R were pressed (but you can obviously choose whatever button combo you want).
- Took this combined output to trigger an edge-triggered monostable 555 circuit, with output used to pull pin 26 on the SNES cartridge connector (/RESET) to GND for ~0.25 seconds. Important that it is edge-triggered - a normal one-shot will hold the reset line down until you cycle power, since the trigger never gets un-triggered
- Logic inversion and miscellaneous transistors used where necessary.
- Only five wires from the controller input PCB and one wire from pin 26 on cartridge connector were needed.
Ultimately a little PCB that sits on top of the controller port PCB would be easy - only need to route a wire from the cart connector to the board.
I did notice a bit of trouble with my multicart, sometimes the 555 wouldn't trigger immediately, I think there's some interaction on the /RESET line I need to investigate, might be screwing up the RC on the 555. It does work though, just a little glitchy. No problems on normal carts.
Now we just need to give the SNES some wi-fi and call it the SCES Z: Super Corona Entertainment System for gen Z.poorstudenthobbyist wrote: ↑Wed Dec 16, 2020 5:24 pmYeah, it's got its uses! Paired with my wireless SNES controller I made like five years ago, there's some good laziness potential here haha. I just don't normally find myself resetting all that much.
But but but this is one of the innovations of the PC-Engine!
The console did not come with a reset button and intentionally encouraged game developers to implement (soft) reset with controller input.
It's debatable whether this was a good idea though, as its combination (Select + Run) was very easy to (accidentally) pull off and expect destruction of friendships in competitive multi-player games when one of the players decides to rage reset the game!
or or or we're so resourceful that we'll spend a few hours making a device to improve our standard of living by an infinitesimal amount!
No, wait, that's just what engineers do
Code: Select all
;joyena - bitmap mask of which pads 1~5 are allowed to perform soft reset ;joy - input states for pads 1~5, read for button hold actions ;joytrg - 0-1-transitions for pads 1~5, read for button trigger actions pad_read: ... .soft_reset_check: clx .loop_sr: lda <joyena and .sreset_tbl,x beq .next ;if pad not allowed to perform soft-reset, next pad lda <joytrg+0,x cmp #$04 bne .next ;if SELECT not newly pressed, next pad lda <joy+0,x cmp #$0C bne .next ;if not holding RUN and pressing SELECT, next pad jmp [$FFFE] ;else, soft-reset .next: inx cpx #$05 bcc .loop_sr ;if not all pads are tested, test next pad rts .sreset_tbl: ;table that is compared with joyena .db $01,$02,$04,$08,$10
Never. Isn't that what the RESET button is for? It should be big enough to poke with the controller end.Ever wanted to reset a SNES with the controller?
Yeah, it should be a good idea if it is not that easily triggered, and it's actually in the game code, so any game developer can change this in their games if they want.
But as Pokun pointed out the quick "Select + Run" combo was the official way to do this on the system and it's in the code of the official dev. kit, so at least 90% of games still did that unfortunately.
So, when I do this with my original Link to the Past cart, it works fine.
When I do this with Link to the Past on my custom board, it works fine.
When I do this with Sim City 2000, it works fine.
When I do this with Tales of Phantasia, it works fine.
But... when I do this with Donkey Kong Country, the shift register input is, well, shifted by one button. Usually. Sometimes for a split second, it'll snap back to a normal position (you can actually see me struggle with this in the video - I thought I wasn't pressing all the buttons at once, but I was actually hitting the buttons just fine, it just wasn't doing it correctly until I was holding it down long enough that it glitched to the right point).
So when this happens, Up becomes Start, and Start becomes Select, etc. Except... this behavior doesn't happen in the actual game. The game plays perfectly fine, no jumbled inputs. It's just the output of MY shift registers.
However.... checking on an oscilloscope shows absolutely no difference in the data coming into the shift register. Just the output pins. And just on MY shift registers. Trigger on the latch pulse, checking the datastream. All input is the same between games.
The behavior doesn't change even if I disconnect the /RESET line - so I'm not even directly affecting any signals on the SNES itself. I'm only reading the controller data, and turning on some LEDs.
Soooo I dunno what's going on. I've got decoupling caps all over the place, and the signal on the scope doesn't look noisy at all. The ONE thing I noticed, is that Link to the Past for example, takes a while to start polling for controller data. Donkey Kong Country starts polling nearly as soon as you turn on the console. There might be something there.
It's not the worst thing in the world (thankfully it's not messing up the button inputs on the SNES, that'd be a real problem), but I mean it's weird that it only happens with certain games. DKC2 does the same thing.
So even though I think it unlikely, how does the STROBE pin behave on DKC vs other games?
My oscilloscope shows the exact same traces when measuring the latch and data pins, triggering on latch, no matter what game it is. Unless you mean a different pin from the SNES console and not on the controller port.
Unless of course something is changing between latch pulses, and I'm missing it on the scope.