What's new

In this thread we build the projects that others have shared - Sat2Neo (Saturn2DB15)

I managed to dig out an assortment of Sega Saturns to see if I could find a match between the ports from the SBOM and the ports on the Saturn.
72DCE52C-81E2-462B-91CD-0ECEAA5B2C5F.jpeg

The SBOM ports are a perfect match for the VA0 (JPN) release console - the grey one with the oval buttons. Not similar, identical. Same tooling, same markings, same material, same everything. The SBOM ports are the ports off an original Saturn. It’s impossible to get more perfect than the real thing.
2BC620B0-5F10-4E95-8BEB-AA26AC09B11E.jpeg904C8675-C567-4D9A-8D90-0408D87AB495.jpegDED18BBC-5C9C-4364-A558-831573254941.jpegC8D388FA-48FA-45F9-A00D-B30D6F9FB8C8.jpeg

So my search for perfection has reached a destination. These are the ports off a Saturn…
 
Nooo, not the SBOM :(

but then the only 6-player Saturn game was bomberman so that is not a surprise

There's actually a few.

Bomberman is 10-player, Street Racer is 8, Death Tank Zwei is 7, Guardian Heroes, Fire Pro, Space Jam and Vatlva are all 6.

One year we went through all of these. Death Tank Zwei is amazing. I suggest trying that one out if you have the chance.
 
Been a while since I did any work on these - I have a whole bunch in the "unfinished project" pile that needed to be programmed. This time decided to use my Mac. Notes dump as follows

First off installed the Arduino IDE from here.
https://www.arduino.cc/en/software

Then added the minicore here
https://github.com/MCUdude/MiniCore

Then remembered that I hated the Arduino IDE and decided to do as much as possible from the command line

Then installed brew
https://brew.sh

Then used Brew to install AVR Dude
https://formulae.brew.sh/formula/avrdude#default

Then followed the instructions from the brew output to ad AVRdude to the path

If this was windows I would have needed to fix the USBasp driver (which is way harder than you would imagine!) but on Mac it is already installed

So from here I was ready to verify that my toolchain (AVRdude to ASP programer to SAT2NEO QPB to SAT2NEO device) could talk to the target device by reading the fuses off the ATmega. Something like this will read the lower fuse

avrdude -CC:\Users\hatmoose\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\2.1.3/avrdude.conf -v -patmega328pb -cusbasp -Pusb -U lfuse:r:-:i -v

-C is the location of the minicore config file (mini core has the advanced settings for ATmega chips)
-v means verbose (so it will tell me what's going on)
-p is the kind of chip we want to program (for me it was a 328pb)
-c is the programer type (its an ASP with USB interface)
-P is the port (USB is the port we'll be using)
-U is the memory operation (read the LFUSE and print the output to stdout)
-v means ever more verbose (so it will tell me exactly what's going on)

Because we are just reading in this operation we don’t really need the config file, so you could shorten it to something like this
Avrdude -v -patmega328pb -cusbasp -Pusb -U lfuse:r:-:i -v
Which should output this for LFUSE, assuming it’s a brand new chip and no-one has already set the LFUSE
Avrdude: writing output file "<stdout>"
:01000000621D
:00000001FF

We need to change this from :01000000621D to :01000000E21D which we will do in a bit, but for a fresh chip 62 is the correct default

Avrdude -v -patmega328pb -cusbasp -Pusb -U hfuse:r:-:i -v
Which should output this for HFUSE, assuming it’s a brand new chip and no-one has already set the HFUSE
Avrdude: writing output file "<stdout>"
:01000000D926
:00000001FF
We don’t need to change this

Avrdude -v -patmega328pb -cusbasp -Pusb -U efuse:r:-:i -v
Which should output this for EFUSE, assuming it’s a brand new chip and no-one has already set the EFUSE
Avrdude: writing output file "<stdout>"
:01000000F708
:00000001FF
We don’t need to change this either

So then I knew that my toolchain was good and that my target device was good, time to write the code and set the fuses

Its good opec to compile your own code from source when avaIlable - in this case its a tiny embedded device that talks to a Saturn controller and a Supergun so the risk is pretty low - but good practise is good practise.

So I jumped back into the IDE loaded the sketch source (.ino) and compiled it into a binary (.hex) - I called it SAT2NEO.hex which in hindsight was confusing AF, I should have called it “freshly compiled and ready to deploy.hex” or something.

Then I used the IDE to export the binary

Then I remembered that I had not compiled it for the 328pb, so back into the IDE set the "board" to mini core -> ATMEGA328.
Im pretty sure that none of the other settings matter, but just in case I also set the clock to external 8mhz and the variant to 328pb as well

Then I compiled and exported again

At that point I was ready to push the code to the device

You could use something like this to push the code
avrdude -v -patmega328pb -cusbasp -Pusb -Uflash:w:/Users/hatmoose/Downloads/SAT2NEO/Code/saturn_controller_demux_RMAF_RBF_SLFIX/SAT2NEO.hex:i -v

This is actually two operations, first it clears the flash memory, then it writes the new code. If there is existing code on there and the lock bit is set you may get “target does not answer” in which case you can add the -F flag to force it.

avrdude -v -patmega328pb -cusbasp -Pusb -Uflash:w:/Users/hatmoose/Downloads/SAT2NEO/Code/saturn_controller_demux_RMAF_RBF_SLFIX/SAT2NEO.hex:i -v -F

Once the code is pushed you can use this to set Lower Fuse to 8mhz external to the ATmega can run the code independently

Avrdude -v -patmega328pb -cusbasp -Pusb -U lfuse:w:0xe2:m -v


In a lot of cases you only get one chance to set the Lower Fuse, if you set it incorreclty (for example to internal) then the SAT2NEO does not have any of the circuitry required to generate an internal clock signal so your ASP will no longer be able to see the chip to re-write the LFUSE setting. At this point you’ll need to unsolder the ATmega, put it on a development board which can generate an internal clock signal, then use that so the ASP can re-write the fuses.
It’s also possible to set it just plan wrong, for example if you do your hex calculation wrong it’s possible to set the fuses to something that make no sense at all, in that case it’s probably best to toss the chip and start again.

Anyhoo at that point if we re-run this to check LFUSE we should get
Avrdude -v -patmega328pb -cusbasp -Pusb -U lfuse:r:-:i -v
Which should output this for LFUSE, assuming it’s a brand new chip and no-one has already set the LFUSE
Avrdude: writing output file "<stdout>"
:01000000E21D
:00000001FF
Note that :01000000621D has been changed to to :01000000E21D

E2 is Hex for “8 MHz internal” so at this point we are ready to start testing.

If you want to know more about fuse bits this site has a good description - it assumes you have a degree in computer science and can calculate your own Hex and offset from Binary :)
https://binaryupdates.com/setting-avr-fuse-bits/
but its important to note that this site shows the defaults are the defaults for the ATMEGA on a prebuilt development board (E1 and 99) - Because we’re using bare chips our defaults are going to be factory (62 and D9)

IMG_1258.jpegIMG_1259.jpeg
 
Last edited:
I've been working on an "ultimate" version of these - basically I wanted to have OEM Sega Saturn ports (not aliexpress ones) as well as all top quality parts.

Several fun things to work on
1) OEM Sega Saturn ports are really hard to get
2) ATmega328 chips are really, really hard to get
3) The OEM Sega Saturn port does not fit into Aliexpress footprint on the PCB
4) The OEM Sega Saturn port does not fit into the Aliexpress shape of the PCB

So clearly the sensible thing to do is completely redesign everything from scratch. Hold my beer.
 
After a crash course in easyEDA I was able to use it to redraw FrankFJS awesome work to accommodate the new board shape and pins for the OEM Sega Saturn port.
Screen Shot 2023-04-02 at 11.11.27 PM.pngScreen Shot 2023-04-02 at 11.07.49 PM.png

And EasyEDA does a lovely 3D render - right in your browser
Screen Shot 2023-04-02 at 11.07.09 PM.pngScreen Shot 2023-04-02 at 11.07.02 PM.png

AND There is an amazing "Generate PCB fabrication files" button that allows you to send the board directly from easyEDA to JLCPCB for manufacturing, AND save $8 on your JLC PCB bill.
Screen Shot 2023-04-02 at 11.08.04 PM.png
That last one turned out to be... not a very clever thing to do. The board design vanishes into the ether. The gerbers don't go onto your PC, and they don't show up in the "files" section of JLCPCB - I'm quite pissy that I didn't save them first, we live an learn.
 
I buddy of mine had some un-wanted SBOM 6-player adapters that he sold to me "not working". I made no attempt to fix them, or even to test them and immediately harvested them for their organs. good thing I'm not a doctor. the ports in the SBOM are OEM Sega Saturn ports - a perfect match for the ports in the Saturn themselves.

The difference in quality between the Sega ones from the 90's and the aliexpress ones is just absurd.
IMG_3969.jpegIMG_3970.jpegIMG_3971.jpeg

Sadly the case that I designed for the original board is about 5mm too big for the new "ultimate" board. I'll draw a new one and update the markings at the same time.
IMG_3972.jpeg
 
Everything looks so good on a computer screen - then the real world comes along...

Rework to get 3D prints looking good; the most important face on the case is where it touches the print bed, different flow rate in the slicer can make a huge difference to the way the letters come out
IMG_3977.jpeg

Quick frenzy of soldering - this entire workspace is soaked in flux, it is dis-gust-flux-ing
IMG_3972 (1).jpegIMG_3980.jpeg

Then into the medical ultrasonic cleaner. It is about 10x better than the aliexpress one I used to have, the frequency sweep is just insanely effective on flux.
IMG_3982.jpegIMG_3983.jpeg

So getting close to being able to answer that question, can the Minigun Supergun with 4 player adapter support 4 x Sat2neo at one time?
 
I realised that I didn't like the way the shells printed - I made the tolerances super-tight for mechanical strain relief.

But this had the annoying side effect of making the shells 100% inflexible - if I was milling them out of Aluminum that would be great - but all 3D printing mediums need to melt at some point. So there needs to be a tiny bit of play to take that into account.

What happens when I don't take this into account is potentially something like this; maybe they get left on a hot runway in the middle of summer during shipping (shared with permission)
PXL_20220914_052958005 (1)-2.jpg

So I've re-drawn the shells to provide just enough tolerance to avoid warping if they get exposed to excess heat
Screen Shot 2023-05-01 at 8.16.03 AM.pngScreen Shot 2023-05-01 at 8.15.25 AM.png

Will print em out and see how that goes.
 
Done! I'll be keeping some of these for myself and sell some over here
https://www.arcade-projects.com/thr...undle-2-x-sat2neo-1-x-qpb-us95-shipped.25879/

IMG_4237.jpegIMG_4240 (1).jpeg

I designed the shells to be a match for the "pacifier" shell for the Minigun Supergun
You can find the pacifier shell here https://www.thingiverse.com/thing:3807401
you can find the Sat2neo shells here https://www.arcade-projects.com/threads/3d-printed-case-for-the-sat2neo-qpb-adapter.19506/

IMG_4242.jpegIMG_4241.jpeg

And also a match for the 4-player shell for the 4 player board add-on for the Minigun supergun
I thought I released my STL's for the 4 player add-on board but I can't find the thread - will dig the files out and repost
IMG_4243.jpegIMG_4244.jpeg
 
After I said "I'll never be making more of these because the ports are too hard to get" a kind stranger contacted me with a bunch of broken 6-player adapters - they were sold honestly as Very Definitely Not Working
IMG_4393.jpeg

Looks like the first one had an unsuccessful reflow of the big multiplexing chip at some time in the past. Normally this is a last resort if the chip is suspected bad and there is no replacement (these ones are sega custom)
IMG_4396.jpegIMG_4394.jpeg

And the second one... same fault, same chip. But glued on. I kid you not. Someone had removed the chip then GLUED it back on. Removing a big quad flat pack SMD chip like that is actually not super easy - if they had the gear to remove it without damage surely they had the gear to solder it back on? Out of curiosity I did solder it back on, but unsurprisingly this did not improve the situation. I would love to know what happened here...
IMG_4398.jpegIMG_4399.jpeg

Anyhoo - I felt no guilt whatsoever about harvesting these ones for their ports.
IMG_4400.jpeg
 
Back
Top