What's new

hatmoose

Champion
Joined
Mar 25, 2021
Messages
1,074
Reaction score
2,240
Location
New Zealand
I've been working on these for a while but I never got around to writing it up - I learned a lot from this one

So I have some Minigun Supergun 2.5 Advanced that I made thanks to FrankFJS awesome work, project log for that is here
https://www.arcade-projects.com/thr...d-the-projects-that-others-have-shared.17296/

And I have a bunch of pads and various hacked-up controllers (including the worlds most expensive icade with all Sanwa parts) for testing, but I really wanted to use my "good stuff" like my Sega HSS-0136 with it as well.
IMG_6757.jpeg

So clearly the thing to do was make some Saturn2Neo adaptors.

I based my work on Arthimus guthub code here
https://github.com/Arthrimus/Saturn_Controller_Demux
and gerbers here
https://oshpark.com/shared_projects/wuq1ltGg
There is a slightly more modern revision here that has removed some SMD resistors, added an indicator LED, and removed the programing jumper, next time I might give that one a go
https://www.arcade-projects.com/threads/sega-saturn-to-neo-geo-controller-adapters.8858/

This project is actually nearly finished, so I'll try to remember all the stuff I did and post it here

I ordered all of the boards off PCBway - I was woried that they might not cut the retention clip into the PCB correctly because their online tool doesnt show it, but it was in the drill file, and in the gerber, and they did it perfectly. I also got a bunch of other boards for other stuff I'm working on (129x clone card and etc) I really dont like the solder mask from other PCB manufacturers OSHpark, scratches too easily, so I got a bunch of different colors to see if there was any improvement.
IMG_6251 (1).jpeg

I also got the top "lid" to provide mechanical strain releif for the saturn port, PCBway count this as a seperate PCB whihc doubled the manufacturing costs - a promising start :)
IMG_6252.jpeg

All the standard parts came from Digikey because they ship to NZ for free (for orders over $NZ100 only) and because the are good brands with a good supply chain - RS components had some fake stuff comingled recently.
IMG_6342.jpeg

Some of the parts for this were ONLY available off Aliexpress (female saturn ports) so I bought these ones - Unfortunately for the environment it's not possible to just buy the port, I had to buy the extention cable and cut the female port end off.
The quality was much better than I expected for three dollars per unit - delivery took 25 days :-/ Getting these things ready to be installed was very labor intensive - I'll do a seperate post on them later.
https://www.aliexpress.com/item/1005002668796484.html
 
Nice!

I know Console5 sells Saturn extension cables guaranteed to be non-working Because one of the cable ends is famously unreliable. Hopefully the supplier on aliexpress has better quality.
 
Nice!

I know Console5 sells Saturn extension cables guaranteed to be non-working Because one of the cable ends is famously unreliable. Hopefully the supplier on aliexpress has better quality.
Hahaha, I do love some genuine honesty in product descriptions!
the engineers that designed the originals back in the 90’s probably had a brief like this
“One million insertions, per day, by rabid monkeys, using chisel. Also cheese, carrot sticks and hummus”
 
Here are the PB15 and Saturn connectors all ready to be horribly mistreated
IMG_6876.jpeg

The female end of the Saturn cable is glued shut. In order to get this particular model to fit the board I had to cut away the pin retaining clip with side cutters. I removed and desoldered all the pins and re-aligned them so they make good mechanical contact. It's possible for the pins to be be mis-inserted into the housing which i'm pretty sure is the problem with the console5 ones. As long as they are inserted correctly they are great, but I can see how a chinese factory selling these for three bucks each might not have the worlds best quality control, and if the pins are not inserted all the way, or inserted too far, they dont seat properly.
IMG_6904.jpeg

Once I had re-aligned all the pins I was able to fold the tail end flat against the housing
IMG_6905.jpeg

And this provides just enough length to solder the pins to the back side of the board. It would be tempting to pull the pins back in the housing another 1mm or so, then they would poke throguh the back more and look much nicer when soldered. This would cause the mis-alignment probem that I mentioned above. Dont do this, they need to be fully seated in the housing even tho this means they are going to be quite short out the back.
IMG_6906.jpegIMG_6907.jpeg

So that's about it for hardware - Next up learning how to flash code onto an Arduino

Edit - should have mentioned, this is hilariously labor intensive. Nearly an hour to disassemble, desolder, remove, re-align pins, re-insert pins, re-assemble and check this one port, future ones would be a bit faster now that I know what to look for and what the problem is. Hopefully we can find a good source of female saturn ports.
 
Last edited:
That’s awesome that you went through the trouble with pin alignment.
 
So the news on these is not good. I simply cannot get them to work.

I can’t get the programmer to recognise them as a valid device to write the code to.

I’ve tried everything I can think of, I’ve gone so far as to burn the code onto a standard Arduino Nano (which also uses an atmega328 too) desolder the chip off the nano and graft it onto the sat2neo - and it still doesn’t work.
1ED51A88-09EE-4A49-8E58-A071097DA39F.jpegED672286-6529-456A-9BE5-B45D3EF20CEA.jpeg

It does work when I wire the ins and outs directly to the nano. so I’m suspecting a problem with the board. I’ve made 5 of them so it’s unlikely I’ve screwed up all 5, more likley the old design just doesn’t work with the currrnt code branch.

I’ve also tried older releases of the code, still without success (won’t even recognise the device)

So I've given up on these boards I’m going write this off as a failed experiment, order newer frankFJS design and start over.

annoying!
 
Last edited:
I went back to square 1 with these guys and started again with the PCB's and code from here
https://www.arcade-projects.com/threads/sega-saturn-to-neo-geo-controller-adapters.8858/

Unfortunately in the interim the global component shortage has bitten hard, really hard - getting pretty mainstream parts is now pretty much impossible. And rather than getting better it seems to be getting WORSE
https://www.msn.com/en-us/health/me...l-chip-shortage-hitting-automakers/vp-AAOKK5J

After delicate negotiations with warlords, people-smugglers and organ-harvesters I managed to land 5 of these in my country. It feels like they were the last 5 left on earth. Pre-covid these were a dime a dozen, we used to give them away by the bagfull to our hackfest attendiees. Now prices are through the roof and delivery times are.. well the last update was 3 aug when I ordered them... so nearly 60 days.
IMG_7798.jpegIMG_7797.jpeg

Because these are bare chips I'll be using an FTDI programmer to set the fuses before the code can go on - when you're a bumbling idiot like me this is somewhat risky. Normally that would not be a problem; but when they are pretty much irreplaceable it adds a thrill of risk. Clearly the most sensible thing to do is get drunk before starting
 
The package that FrankFJS put together is absolutely awesome.

Finished making the new SAT2NEO and the Quick Programing Board - The QPB makes things much neater. I'm still not quite there with 4 sided SMD chips, I still need to tape them down to get them perfectly straight
IMG_7828.jpegIMG_7831.jpegIMG_7827.jpeg

Writing the code to the finished device was harder than expected because the eXtreme burner AVR website is broken - So I had to learn how to use the Arduino IDE and avrdude instead. The arduino IDE doesnt let me set the fuses directly, but avrdude (which is called by the Arduino IDE) does let me write fuses

So in the end I settled on this string to write the code and set the fuses
avrdude -CC:\Users\House\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\2.1.3/avrdude.conf -v -patmega328pb -cusbasp -Pusb -Uflash:w:C:\Users\House\AppData\Local\Temp\arduino_build_753259/saturn_controller_demux_remap_autofire.ino.with_bootloader.hex:i -Ulfuse:w:0xe2:m

Where I came unstuck last time was that there was no indicator LED on the version of the SAT2NEO board that I was using. And because I had never done this before I didnt know what the expected behavior was. If anyone else does this expected behavior for the indicator LED is as follows

If anyone else reads this my notes are as follows
Expected behaviour when you plug in the assembled but unprogrammed SAT2NEO to the AVR
LED1 on AVR = steady
LED2 on AVR = off
LED on SAT2NEO = blink 4-5 times over 2 seconds then off

Expected behaviour while you are burning the code to the SAT2NEO
LED1 on AVR = steady
LED2 on the AVR = on while operation takes place
LED on SAT2NEO = blink once when operation complete

Expected behaviour when you plug in the assembled SAT2NEO to the AVR with the code burned and fuses set
LED1 on AVR = steady
LED2 on AVR = off
LED on SAT2NEO = blink rapidly 4-5 times over 1/2 seconds then off

So good progress - code burned successfully, fuses set successfully. Does it work? The suspense is killing me!
IMG_7845.jpeg
 

Attachments

  • IMG_7826.jpeg
    IMG_7826.jpeg
    222.6 KB · Views: 73
  • IMG_7839.jpeg
    IMG_7839.jpeg
    187.7 KB · Views: 80
  • IMG_7829.jpeg
    IMG_7829.jpeg
    179.4 KB · Views: 69
A promising start - but still work to do

The up and down directions are both permanently on, the left shoulder button maps to direction right, and the start button only works on the virtua stick. Behavior varies slightly between controllers, but all variations on the same theme
IMG_7848.jpegIMG_7847.jpegIMG_7844.jpeg

I'm unsure if this is a problem with the construction, the contacts, contacts or the way I flashed the code. I'm going to make another one to see if I can rule out a physical defect, then start work on the code.

I'm also considering the possibility that I may need to enter "button remap" mode to sort out those face buttons - but the directions should work out of the box, so something is not right...
 
Progress

I thought I had bad hardware - but it was one level up in the way I was configuring the fuses

I read the current lfuse setting with something like
avrdude -CC:\Users\House\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\2.1.3/avrdude.conf -v -patmega328pb -cusbasp -Pusb -U lfuse:r:-:i -v

Per instructions they should be set as follows - this does not work (behavior described above)
LFUSE = E2
HFUSE = D9
EFUSE = F7

Default is set as follows - this does work for the directions and start buttons and 3face + start = coin, but not 2face+start = remap mode
LFUSE = 62
HFUSE = D9
EFUSE = F7

to put lfuse back to default I used something like
avrdude -CC:\Users\House\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\2.1.3/avrdude.conf -v -patmega328pb -cusbasp -Pusb -U lfuse:w:0x62:m

Suspect the reason that I cant enter button remapping mode is that the remap/autofire branch that I'm using has a dependency on the "digitalwritefast" library
https://github.com/NicksonYap/digitalWriteFast
Digitalwritefast helpfully includes install instructions

Nearly there...
 
Oh FFS - sometimes I make an error so basic that I'm almost ashamed to write about it. But just in case anyone else might learn here you go
On the top (1003) we have 100k ohm resistors. On the bottom (102) we have 1k ohm resistors
IMG_7879.jpeg

Guess which ones I soldered on - its surprising it worked at all... (yes I'm aware the LED looks like it has been chewed by a dog, long story)
IMG_7881.jpeg
With that rookie error resolved things might start working a bit better
 
Success! Face buttons all working, button remapping working, coin combos working, auto fire working.
5CBBAF05-3CB1-4D40-8673-C2131A51A252.jpeg3843DFA9-0FD6-4C7A-9E55-3D6678B44330.jpeg

One of those cases were 5 mins of QA would have saved me 5 hours.I learned a bit about ISP and AVR programing - up until now everything I've done with Arduino has been with pre-built nano's - this was my first "bare chip" project.

unfortunately eXtreme AVR burner is no longer available for download, and the Arduino IDE doesnt have all of the functionality required (setting fuses). So this was all done with AVRdude

1) reading current fuses - something like this shoud do it - this will also check that you have built the SAT2NEO circuit correctly, that your ISP is working correctly, that minicore is installed, and that the SAT2NEO board is attached to the ISP correctly
C:\Users\House\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino18/bin/avrdude -CC:\Users\House\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\2.1.3/avrdude.conf -v -patmega328pb -cusbasp -Pusb -U lfuse:r:-:i -v
A brand new bare 328PB should report its fuses like this
LFUSE = 62
HFUSE = D9
EFUSE = F7
If avrdude produces a message like "target doesnt answer" then check common causes of failure below

2) This will write the code to the arduino, assuming the hex file in this location of course
C:\Users\House\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino18/bin/avrdude -CC:\Users\House\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\2.1.3/avrdude.conf -v -patmega328pb -cusbasp -Pusb -Uflash:w:C:\Users\House\AppData\Local\Temp\arduino_build_300414/saturn_controller_demux_remap_autofire.ino.with_bootloader.hex:i

3) This will write the arduino LFUSE bit to E2 - 8mhz internal
C:\Users\House\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino18/bin/avrdude -CC:\Users\House\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\2.1.3/avrdude.conf -v -patmega328pb -cusbasp -Pusb -U lfuse:w:0xe2:m
They should now show
LFUSE = E2
HFUSE = D9
EFUSE = F7

Common causes of failure
1) Attaching the ISP to the board wrong - use the QPB provided by Frank
2) building the circuit wrong (which is what i did) - do-oh!
3) incorrectly identifing the chip in the mini core config file or buying an unsupported chip like the 88PV with no config in minicore (I did this too)
4) harvesting a chip from an Arduino Nano - this will be set to use external clock but after you harvest the chip there will be no external crystal for it to refrence (I also did this)
4a) bare chip is set to use external clock but no external crystal is connected. This will happen if you set LFUSE to external clock accidently (try to guess…)

A note on 4 - it might be possible to set LFUSE to E2 (or 62) BEFORE harvesting it off the Nano - i have not actually tested this, seems much easier to just buy bare chips, but if this component shortage continues...
A note on 4a - this will work exactly one time, you can set LFUSE to external clock once, and then you cant write to it again unless it has an external crystal attached. in this case you could breadboard in an external crystal, reset the LFUSE to internal.
 
I did some work on cases for these today

I wanted to carry over the "design language" from the Minigun Supergun case and the 4player adapter case, I want these to look like what they are, which is parts of a matching set

This was the hardest model that I've done so far; the tolerances are extremely tight in some dimensions, they need a lot of mechanical strain relief in multiple directions (especially on the saturn port) and there is a lot of "stuff" going on. I wanted to make them as "discoverable" as possible, but due to the awesomeness of the demux code there is not room for complete instructions.

This is where I got to with a first prototype - it would be possible to make these much thinner, but I'm not jonny Ives. They are this thickness to match the Minigun Supergun and the matching 4-player adapter.

Bottom half, this was reasonably simple
botom dwon.pngbottom up.png

Top half, this was much harder; I had set myself a goal to get all the dimensions right on the first print, and for the reasons mentioned above there were a lot of fiddly bits - will print it and see how I did :)
top words.pngtop underneath.png
 
First print of the case was really good,, everything lines up, the mechanical strain relief works as designed, Indicator LED works the way I want. I think I'm finally there with Sketchup. Now time to start learning Fusion 360

So the final version of the case will look like this
Screen Shot 2021-10-04 at 10.55.02 PM.pngScreen Shot 2021-10-04 at 10.54.37 PM.png

Now I have the traditional 20 day wait for delivery of those pesky 20mm M2 screws...
 
Now THIS is a very expensive way to get top-quality ports. The SBOM is in astonishingly good condition. It looks like it was never used (but then the only 6-player Saturn game was bomberman so that is not a surprise)
I’ll have to verify by opening one of my Saturns but this looks like the same part that is IN the Saturn. The quality is phenomenal.

8A43BC36-6357-4DD0-876C-EAC2C436688E.jpeg


omg the quality of the ports is stunning
A7838D06-D30D-4D0F-BD84-4AAF0978CA03.jpegD0B39CC3-FB8B-424E-864E-D5A7B00FAB4A.jpeg

And they fit the PCB too…
8C6DECB6-83E7-4899-A4AC-8EA2A74622BD.jpeg

I’m not past the point of no return yet. But the ports are a pair. I will have to cut them to seperate them.

On the one hand the SBOM is irreplaceable (and expensive!)

On the other hand these look like original Sega Saturn console ports. It seems like a criminal shame not to use them…

How do we feel about this one team?
 

Attachments

  • 1E473E71-9F1F-401E-A73A-955A98BB1B5C.jpeg
    1E473E71-9F1F-401E-A73A-955A98BB1B5C.jpeg
    202.9 KB · Views: 72
  • 5F6F2A68-DB4D-429A-8B33-872E386431FA.jpeg
    5F6F2A68-DB4D-429A-8B33-872E386431FA.jpeg
    178.3 KB · Views: 74
I did use the ports from a Sega 6 player adapter. I bought the cheapest I could find off ebay and used those ports. The extension cords from ali are just garbage.
 
Back
Top