PPCenter :: devblog

PPcenter. Arts and craft for my Sega Saturn. Since 1847 :D

How to fix your cartridge with Pseudo Saturn Kai

Written by cafealpha 2 comments
Sorry for the clickbait title, but I'm sorry to say that it's not possible to fix your Action Replay (or any similar clone) with Pseudo Saturn Kai

Below are common myths wrongly related with Pseudo Saturn Kai : theses are detailed in this blog article in the hope it will help users with similar problems, and also to -hopefully- relieve my emails inbox regarding theses inquiries ...


Q1 : Expansion RAM no longer works ! Will reflashing Pseudo Saturn Kai help something ?
A1 : It won't change anything ! Expansion RAM is a cartridge hardware feature and consequently Pseudo Saturn Kai (software side of the cartridge) doesn't have any interaction with it.
→ If your cartridge is experiencing troubles with expansion RAM, it's likely to be related to cartridge connection or cartridge itself. So rather than e-mailing me, it's more relevant to contact the manufacturer or re-seller of your cartridge about this kind of issue.

Generally speaking, all Action Replay cartridges and their clones are using legacy electronic components no longer manufactured for nearly a decade. So even if your cartridge was sold as "brand new", it may either contain refurbished chips, or counterfeit chips, or both : there's not a lot to expect regarding quality.


Q2 : Cartridge self test feature in Pseudo Saturn Kai doesn't reports any problem : does it means that the hardware of my cartridge is working correctly ? And consequently does it means that the XYZ problem I'm experiencing is related to Pseudo Saturn Kai ?
A2 : Cartridge self test feature just tests the bare minimum of the cartridge : if it fails, then there is certainly a problem around hardware. Conversely, it doesn't means anything when no problem is reported.

BTW, I developed this self test feature to quickly test the hardware of a cartridge, and not to get a proof that hardware is not guilty when a problem happens ! It's always exhausting to read stuff like "cartridge self test passed, so my XYZ problem is caused by Pseudo Saturn Kai" ...


Q3 : I heard that game XYZ isn't compatible with Pseudo Saturn Kai ? Is that true !? Hurry up to fix that !
A3 : There are many causes of incompatibility other than Pseudo Saturn Kai :
  • Frequency incompatibility : Pseudo Saturn Kai bypasses game region check, but isn't any help regarding frequency compatibility : if a game was tailored to work on a PAL console, it may then not work correctly on a NTSC one and vice-versa.
    Simple countermeasure to this problem is to use game from same region of the Saturn where it will played on. And if it is not available then complete countermeasure is to add a frequency mod on your Saturn, or eventually to use a both NTSC and PAL Saturns for playing games of each regions.
  • CD-R and Saturn laser affinity : Saturn wasn't developed to play games from CD-R, which may be harder to read than official CD-ROM.
    So if a game doesn't wants to boot, then it's worth trying with another brand of CD-R, or to burn it at different speed etc.

  • Disc image dump quality : iso+mp3 format was good when downloading few tenth of MB cost time and money but is an aberration regarding compatibility.
    Nowadays, downloading large files is not a real problem hence bin+cue format should be considered as the bare minimum requirement that usually plays well but may cause problems with some games.

    And, most accurate dumps are usually found in format supported by Rhea and Phoebe and should be preferred if you want to avoid problem(s) caused by discs badly dumped.

    Additionally, I would like to remind that Pseudo Saturn Kai main role is to play CD-R backup copy of games from your collection, so if you want to ask me about the not playing iso or bin dump of the game you don't even own, then you're about to knock to the wrong door

    → First, purchase the original CD-ROM of your game, and test if it works on your Saturn or not : if it doesn't play, then supported frequency and/or hardware problem on Saturn side should be considered before asserting anything about Pseudo Saturn Kai. If the original game plays correctly it is then time to copy it on CD-R and then preserve original game preciously

    Finally, it would be appreciated from users (you) to report non-working dumps to the webmaster of the page where theses were downloaded from : this would help whole community regarding preservation of Saturn games.


Q4 : Are you earning royalties from Action Replay (and other clones) cartridge manufacturers ? If yes, then hurry up to fix my hardware problem !
A4 : I don't earn anything from legacy cartridge manufacturers : you paid $35 for your Action Replay cartridge ? I received $0 from it. You paid $60 for a red "all-in-one" ©®TM cartridge ? I received $0 from it.
Also, I never begged any crowdfunding to develop Pseudo Saturn Kai, and even preferred to nullify my donate page rather than receiving donation related to Pseudo Saturn Kai. You paid $0 for Pseudo Saturn Kai to be developed ? I did it during hundred of hours of my free time and sometimes with high doses of motivation

And while restricting Pseudo Saturn Kai usage to my own projects (USB dev cart and Gamer's Cartridge) would had significantly simplified software architecture, I did my best to keep Pseudo Saturn Kai compatible with other legacy cartridges so that a wide range of users can enjoy playing Saturn.
Maybe that looks simple to do, but it's really not : the more complex the software architecture is, the more likely development becomes difficult, or that unexpected problem happens in the meanwhile.

So if your cartridge is experiencing a problem, it would be appreciated if its manufacturer could be blamed instead of me



This Q4 / A4 is an half-joke : so far I wasn't asked about that, but it is mentioned here to put emphasis on all the time and energy it cost to develop Pseudo Saturn Kai (I started its development at the end of 2014 !), and all the returns I have from it ("fix my flaky cartridge", "fix support for that poorly dumped game") ...



It took time, but I could find a card a bit linked to customer support from my Dragon Ball cards collection, and hope you will appreciate it ... the card, not my customer support skills
「お父さんは、エンジニアリング以外のことは苦手なんです。」
だから、開発すら関わってないモノのサポートについては期待しないでね。

Read more How to fix your cartridge with Pseudo Saturn Kai

Pseudo Saturn, Kai, and Dragon Ball too

Written by cafealpha 14 comments
The kids are currently on winter holidays, I don't want unexpected and messy task at work before entering new years holidays, so today was spent at movie theater with kids
We went to see Dragon Ball Super - Broly, and it was cool !! I really appreciated the "フリーザー!「カコク」ってなんだ!?" from Goku just after Freezer used "過酷" word in a dramatic scene

So well, it seems it's the good moment to announce a new public section in my homepage, which is about Dragon Ball cards
More than 15 years ago (but it feels like last week ... I'm really getting old !), I spent many afternoons in scanning my collection of Dragon Ball cards, and then put everything on a CD-R ... because internet was paid for each minutes connected, and my maximum transfer speed at that time was around 7KB/s, hence not suitable for uploading hundreds of megabytes of data

All theses limitations are no longer a problem, so please enjoy my digital cards collection

Broly when I was a kid


Oh, I forgot to say that everything in more or less in its original state, including the html, so in advance I'm sorry for any reaction to Comic Sans MS font and flashy image background Also, the textual contents are left as-is in omelette du fromage language



My main Saturn project during the last four years was named after watching a Dragon Ball Kai episode on TV, so in a related note, I'm glad to announce a new version of Pseudo Saturn Kai is available
But ... there's currently a bug so I shall re-release it soon
After everything will be fixed and verified, I shall make a proper announcement in this article, so if you don't want to flash your cartridge twice, please keep tuned for one day or two !

Edit (2018/12/31) : version v6.274 was released a couple of a days ago, and so far I didn't received major claims about it, so let's consider this version a stable one ! Please find below an overview of the changes and additions in this release.

What's new in Pseudo Saturn Kai v6.274

Automatic Game Loader

So far in Pseudo Saturn Kai 6.074, user had to choose which game loader to choose before starting a game, but this is now done automatically on Pseudo Saturn Kai side.
There's no magic around this feature : it just uses a list of games not compatible with CWX loader, and decides accordingly
Pseudo Saturn Kai boot menu
No need to worry about which loader to choose ♪

Cheat Codes

That's a big addition for this release. Its development spans around June 2017 to Spring 2018.
The main features for cheat codes are :
  • Built-in : don't need to manually enter the cheat codes
  • User friendly : just push X button when booting a game, and then select the cheat(s) to enable.
  • Maintained by cafe-alpha () : rather than adding an "enter cheat codes by yourself" feature, I plan to continue improving and maintaining the cheat codes list

Disc image selection menu for Rhea/Phoebe ODEs

Back in 2015, I added a stub of alternate rmenu to Pseudo Saturn Kai, but didn't had the technical information regarding Rhea/Phoebe API so the feature was disabled in its unfinished state.
And this summer, an enthusiast friend helped a lot to get this technical information, so that I could finally finish this feature
Development of this feature was an occasion to bring usage of proportional font in image selection menu, thus showing more information on a single screen. Base of menu module was developed around 2010 without any consideration for proportional font, so development of this side feature was a nightmare, but I don't regret for having done it now it is finished

Image selection menu for Rhea/Phoebe ODEs

Dezaemon 2 Save Game Manager 3

Dezaemon 2 is a shooting game maker application for Saturn. And Save Game Manager is a collection of user games for Dezaemon 2.
By the past, there were two volumes released by Madroms : SGM1 in 2007 and SGM2 in 2008.
And 10 years after that, SGM3 is released and contains some new user games as well as all the games from SGM1 and SGM3 : one SGM to rule them all

Special thanks to Dezaemon DB for gathering a community around Dezaemon 2, and dumping the user games


A stylish logo for Pseudo Saturn Kai

That's maybe a detail, but that was really missing from a long time !
Special thanks to Alien^PDX for the logo, and CyberWarriorX for putting me in touch with him
Pseudo Saturn Kai logo, 2017/12/31
Yes, taken one year ago !

In-game connectivity for USB dev cart

This uses cheat codes routine, hence requires at least a valid master code to be set. It can do USB connectivity while doing transfer with PC, but that's a bit slow (because of unoptimized C running from cartridge ROM), and consequently may cause glitches on some games.
As a countermeasure, there is another mode who does only USB connectivity (hence no cheat codes) but does it fast since the code for it is written directly in assembly and running in RAM.

That may be cool for game hacking, or looking for new cheat codes ... but I still need to add a proper cheat codes finder feature on SatLink before looking for cheat codes on my favorite games

I stopped USB dev cart support, so this feature is disabled and software on PC side won't be released.

In-game USB connectivity in action.
Radiant Silvergun was one of the very first games
to work correctly with Pseudo Saturn Kai cheat codes


Virtual Memory Cartridge support via USB dev cart

This is similar to "Virtual Memory Cartridge" used in Gamer's Cartridge, but access save data files on PC via USB dev cart instead of SD card.
That's convenient for save data hacking, or testing several saves, but for normal use then using SD card is (in my opinion) a better choice.
As a consequence, full firmware can now be installed on USB dev cart. But cartridges not using SST39SF040 flash chips are not supported (because there's not enough room in flash ROM) and in that case only lite firmware can be installed.

I stopped USB dev cart support, so this feature is disabled and software on PC side won't be released.

Virtual Memory Cartridge via USB dev cart
It was convenient for taking screenshots
for Dezaemon 2 Save Game Manager 3

Fixed support for 3D pad

In previous version, using 3D pad would sometimes cause an emergency exit to multiplayer screen when touching analog buttons. This is now fixed, and additionally supports input from analog buttons.
Pseudo Saturn Kai is not a 3D game, so the interest of using analog buttons is a bit questionable, but at least it is supported now



And the most voluminous change is ... :
Fixed many bugs everywhere, added other bugs here and there
Everything should work now ! Trust me, I'm an engineer



Congratulations, you reached the end of this long article
Last but not least, I wish you a Merry Christmas, happy new year 2019 and happy gaming

Read more Pseudo Saturn, Kai, and Dragon Ball too

I wanted to publish an article this October ...

Written by cafealpha no comments
... and all of a sudden, November arrived

It's not like being under a quota of articles to write every months would stop the financing of my Saturn projects and in fact, as described on my "donate" page or this blog article, I don't have any interest in crowdfunding, or some kind of third party financing : if I'm not in the mood, or don't have enough free time to update this blog, then I don't update it

But well, moreover not being paid for not writing blog articles, as I actually have to pay to keep this blog alive (web page hosting is cheap but not free, but at least it's my own homepage ), I like to feed this blog from time to time even when being busy with real life things
So don't worry, I didn't stopped this blog : currently, I have one ongoing article that is waiting for its last paragraph and proofreading etc, but as I started more than two weeks ago (yes, that's my usual pace when preparing blog articles), please be patient until I finish it
I do have some ideas for future articles too, but theses are just ideas currently recorded as single lines in my TODO list, so I don't know when I actually start writing them


Regarding Pseudo Saturn Kai project, I ... didn't had a lot of free time to continue it recently In fact, I think I just turned on my Saturn once last month just to test if -as requested by someone by email- DoDonPachi worked with Pseudo Saturn Kai or not. The game worked fine here, so I turned off my dev Saturn an put it back in my closet for better times when I will be more available
BTW, I'm currently experiencing an unexpected burst of things to do at work, so it may take a while until things return back to normal But as I can't live without doing my Saturn projects, I promise that things will return back to normal as soon as possible


... Well, the contents in this article are a bit poor, so let's fill remaining space with random facts about my life recently The "okra" plant I wrote about in a previous blog article is still going well and I continue to water it regularly.

Okra in all its glory, 2018/10/18

Since summer is now finished, I no longer have to water it everyday, so that I now just do this regularly enough to prevent it from finishing yellow and burned  And yes, the kid who took back that from school completely forgot about its existence
I'm not keen on gardening (as suggested on the picture above, I don't even own a garden), but have a couple of pictures of other green things in reserve ... and I keep theses to fill future small posts

Read more I wanted to publish an article this October ...

[Dev journal] Pseudo Saturn Kai game loader weird bug, and its bugfix

Written by cafealpha 3 comments
(Note : this bug was fixed something like 3 months ago. Pseudo Saturn Kai I first released last month works well  )

First : of course, old versions of Pseudo Saturn (versions up to 0.832) work
But who knows what may happen when doing software engineering (and any other engineering in fact) : it's very common to break something without directly modifying anything to it !

So it happened : in December 2015, Pseudo Saturn Kai beta tester reported that it wasn't possible to load CD-R game.

data/images/20160325_loader_bug.tb.jpg
What game loader bug looks like.
disc_type=0x0003 means that CD-ROM authentication failed


As usual, I first asked if something was wrong on tester side  "Bad game dump ?", "Bad burn to CD-R ?", "Did you do something else bad ?", etc.
(I know that's a bad habit to suspect beta testers doing something wrong, but it sometimes help in fixing problems)

Beta tester was actually doing his job well, and bug couldn't be reproduced in next beta version, so I though it was caused by outdated intermediate file in build process (this happens, for example when I modify header file only : I'm too lazy to fix makefiles about this ) : cleaning up whole project and rebuilding everything prevents such kind of problem.

But I wasn't satisfied with such "half-baked" bugfix, and actually could hear it saying to me "I'll be back"


And, two months after that time, I receive same bug report from same beta tester ...
Well, at least, I didn't had to re-ask him if he tested correctly or not : it was clear that this was December 2015 bug returning back.


First, let's verify do simple things and try to reproduce the bug here : my "main" dev Saturn is a modchipped one that plays CD-R, even when firmware is reported not working. Trying with a "plain" (unmodded) Saturn actually reproduces the bug : cartridge boots, but definitely doesn't want to play CD-R.
In same conditions, let's try with an old version of the firmware : oh, it can play CD-R

So I could "feel" the bug, and its capricious nature.
"Typical" capricious bug is "uninitialized global variable" one, that reproduces after doing the same action twice, or after going to a given screen, returning back to another screen, and doing a given action.
Saturn has relatively few RAM available, and I don't want to use dynamic memory allocation on such "low specs embedded device", so such "uninitialized global variable" happens from time to time.

But this bug was even more capricious than "uninitialized global variable" one : same action reproduces the bug with a given firmware, but can't reproduce the bug with another firmware

First, since I have no idea about the cause of such bug, I added some debug screen that displays few details (= the return values of each functions called when unlocking the CDROM unit), and also some text-based logs, plus RAM dumps stored SD card : that was one of the reasons why I made SD card-based cartridge for Saturn : it allows to prepare bug report on user side

So I "just" have to wait until bug is reproduced with next versions, and beg for logs/dumps/etc on that time.
Of course, the bug reproduced, and of course ... logs/dumps/etc didn't helped a lot

data/images/20160408_sakura_6008.tb.jpg
Game loader failure screen.
Basically, it shows that something is wrong after
calling cd_move_sector_data_cd_auth function.


Fortunately, there are some explanations about Pseudo Saturn CD unlock exploit on assembler forums :
1. Use the Put Sector Data command to put a whole bunch of sectors into the CDB - all with FAD 150, Mode 2 in their headers.
2. Call End Data Transfer to push them into the selector.
3. Call Copy Sector Data, starting a copy of all those fake sectors into the selector that the Authenticate Disc command will be using.
4. Immediately (like 15 microseconds later immediately) call the Authenticate Disc command, specifying the same selector.


"Immediately" : firmware have to be fast on step 4.
And what changes in CD-ROM unlock code from a firmware beta version to another is basically its execution start address.
So I started to think : "maybe CD-ROM unlock code will work better if loaded from a constant address ?" : to do this, I moved all CD-ROM code to a separate stub, loaded from a constant address (0x06004000).

And bug didn't reappeared so far

Okay, this way of fixing things without a proper verification is a bit dirty
But it works, and that's the most important
(I suspect the cause of this bug related to SH2 cache : if SH-2 have to refresh cache during time critical section of CD-ROM exploit, code takes too long to execute, and CD-ROM exploit fails ... it's just a guess, and I realized about it after fixing it.)

Special thanks to Stac, Shazz and A Murder of Crows for beta testing
And special thanks to jhl and CyberWarriorX for detailing Pseudo Saturn's CD-ROM exploit ! This helped a lot in fixing this bug

Read more [Dev journal] Pseudo Saturn Kai game loader weird bug, and its bugfix

Long time without using my TI89

Written by cafealpha no comments
Today was a nostalgia day : I uploaded program to my good old TI-89 via "$4 parallel link cable" I made around 15 years ago, when I was high school student

data/images/20150317_ti89_parallel_link.tb.jpg
My TI-89 and its "$4 parallel cable", still working

First, I wanted to use my 7 years old desktop PC with parallel printer port available ... but it stopped to work after 2 minutes of usage. However heavy washing of CPU fan (yeah, "washing" : I put it in the water, then used my hair dryer to dry it) solved this
I then tried to install TILP program, but I was lost in installing GTK (), and link related DLLs ... a real nightmare, and it didn't worked too ... (Sorry Lionel and other TILP authors ! Your soft is great, but its installer is a real piece of crap)

So I tried even older W32Tran8x, a program made under Win9x era.
Except DlPortIo that needed to be updated to work under Windows7, everything worked fine !!!
data/images/20150306_w32tran.png
W32Tran8x, with its good old nearly wintage Win3.x-like file browser
The simpler the better 
I will try to keep this way of thinking when creating Saturn programs or cartridges

Edit : I successfully installed GTC, an oncalc C compiler. Thank you Pollux (GTC author) for your great work 
It's funny to program on a machine where sizeof(int) equals 2.

Read more Long time without using my TI89

Rss feed of the tag