Written by cafealpha 4 comments
As usual I'm not very on time for sending my best wishes but I hope that everyone spent a nice Christmas and are appreciating winter vacations To add even more fun to theses vacations, I'm happy to announce that latest flavor of Pseudo Saturn Kai is -finally- publicly available !
To be frank, there are no new major feature for Pseudo Saturn Kai in this release : the most important news is not hidden in Pseudo Saturn Kai itself, but in Save Data Manager, with a new edition of Dezaemon 2 Save Game Manager, featuring 11 new opus !
Regarding this new edition of Dezaemon 2 Save Game Manager, I really want to thank each respective contributor for their passionate work in shmup creation : - mk2, designer of DAIOH Huricane Special - WANG, designer of Houkou Tiger
Also featuring screenshots gallery of DAIOH Hurricane
I also would like to give a special thanks to Dezaemon DB (wiki) for all his support around floppy disk emulation in Gamer's Cartridge and motivating me in developing a new blend of Save Game Manager for Dezaemon 2, which then turned into Save Game Manager 3 (released on last Winter) and Save Game Manager 4, freshly releasing right now. Unfortunately I didn't received any news from Dezaemon DB for more than two years, but I continue to believe he will be back in action in Dezaemon community someday.
Regarding Pseudo Saturn Kai itself, majority of changes in this release concern fixes in automatic game loader and cheat codes list. So if previous version of Pseudo Saturn Kai installed on your cartridge are working fine with your favorite games library, then ... theses games will continue to play fine with latest version.
All theses improvements were directed by privateye, who really deserve warm thanks for this huge work !!
It's a big task to get a project working more or less correctly as it was in previous releases of Pseudo Saturn Kai. But it's an even bigger task when trying to fix all the little details around that project Without privateye, Pseudo Saturn Kai certainly wouldn't had its edges polished so well
And, Gamer's Cartridge users may appreciate that a problem sometimes happening when retrieving Saturn date and time has been fixed in this release.
This bug was introduced in previous (6.314) version because I didn't checked enough side effects of modification done at that time to add support for wireless pads.
Concretely speaking, this fixes the file time stamp of save data files as well as folder naming (which is based on Saturn date) when dumping save(s) to SD card.
Except that, Gamer's Cartridge support is equivalent to previous version, so if you don't want to brick your Gamer's Cartridge (risk is super low, but I can't assert it to be zero), then continuing using previous version may be a wise choice. After all, rather than upgrading to latest firmware, the most important is to play your favorite games
Written by cafealpha 8 comments
TL;DR : Gamer's Cartridge are no longer available. It's not an end of the project but if back for sale, it will likely to be in limited quantity.
This is to announce that Gamer's Cartridge are out of stock for an undefined period of time. That may look sudden, but I was scheduling this transition for around one year ... and kept it confidential until now to avoid an eventual rush of orders, or people purchasing my cartridges just for stocking "in case of" or for speculation without actually playing with their Saturn.
The reason(s) why
Why are Gamer's Cartridge out of stock ? First, this is for the simple reason that I don't have any Action Replay shell for assembling new carts : my friend who supplied shells stopped provisioning from wholesale supplier around one year ago.
So I bought all the remaining stock from that friend, and that stock kept me busy this year in manufacturing and selling last batches Gamer's Cartridge.
Now that my Action shells storage facility (which is maybe a bit pedantic term to speak about a couple of shoes box ) is empty and that I found the time and motivation to write this article, it's time to officially put Gamer's Cartridge project on pause.
That pause may be temporary or the last one ... I honestly don't know how the project will evolve, but what's sure is that it won't be available back in short term and in the case it shall become available back, this will be in limited quantities.
Another reason for Gamer's Cartridge being out of stock is the decline of public interest toward it : back on initial release in 2016, Gamer's Cartridge was relatively popular because its unique "virtual" memory cartridge feature. At that time, Action Replay flashed with Pseudo Saturn Kai was a standard to play Saturn games but unfortunately this solution didn't featured cartridge backup memory, so that Gamer's Cartridge was here to fill this gap.
But I clearly felt the recent rise of "all-in-one" red cartridges because time until each Gamer's Cartridge batch is sold became longer by longer from the beginning of this year, from "few hours" in 2016, it became "several days" recently
As of Gamer's Cartridge main developer and manufacturer my opinion is a bit biased, but I consider Gamer's Cartridge a better solution than the red cart because backup memory capacity is larger, access to Saturn floppy disk device is emulated, and also because save data contents can be easily backed up to modern media. But on the other hand, as expansion 1MB/4MB RAM isn't available and that Gamer's Cartridge are hand made by one dude during its free time, maybe customers were more in confidence in the red cart because it mass produced, or a bit cheaper, or more convenient because it's "all-in-one". Who knows.
Also, the approaching public release of Satisfier project will certainly make possible the backup of cartridge memory contents to SD card, also provide the ability to dump Saturn BIOS there too. This overlaps few of the few remaining "Gamer's Cartridge exclusive" features.
Last remaining "sales point" of Gamer's Cartridge is to offer a *reliable* in-game save data support : all the other backup memory cartridges (including Sega official ones !) are prone to corrupt save data when not correctly inserted.
This was improved with Gamer's Cartridge, which shows an error message on startup (without botching any user data) if not correctly inserted. If Pseudo Saturn Kai boots then save data are saved in a reliable way
But as typical user don't care about data reliability, there soon will be no more room left for Gamer's Cartridge in the portfolio of retro gaming devices for Saturn.
Whatever it may be, it's stupid to continue Gamer's Cartridge manufacturing if I struggle to sell theses. Maybe aggressive marketing or promoting my projects here and there on social media would had made a difference, but that's clearly not the path I want for my projects : I don't do that for a living and don't want to influence potential customers just to increase my pocket momey. If it interests someone then that's cool, but on the other case I won't force anybody to buy my homemade stuff and rather shall temporarily close the store and go on other projects.
Cartridges order page, before status being set to "out of stock"
Life-prolonging treatments for Gamer's Cartridge ?
There are some solutions to continue Gamer's Cartridge manufacturing a bit, but as the "life-prolonging" title suggest, theses are flawed and/or limited and I will explain you why.
Supplying shells from another source ? That may be a viable solution, but honestly I didn't examined it in depth : that's a significant amount of time to ask several places about my project, my needs, etc etc ... without any guarantee to get something at the end. Well, I may think about this solution someday but right now I prefer to dedicate my free time to projects other than writing tons of emails
Supplying shells from wholesale manufacturer such as EMS ? Big manufacturer have the advantage to (usually) be stable on the long term and to offer broken prices ... but the advantages stop here. On the other side it requires a commitment on my side to buy in large quantities, hence to manufacture Gamer's Cartridge in large quantities, and finally to sell in large quantities.
This "large quantity" point is clearly not what I want for my project : for me, Saturn is just an hobby which I don't want to be a source of stress (what should I do with remaining stock of unsold carts, electronic parts and shells if by example Gamer's Cartridge would be "3rd party copied" and that all customers prefer to purchase that because it's $20 cheaper ?), and I consider this was a wise choice to do such kind "limited manufacturing" because at some point Gamer's Cartridge lost interest from public. To give an idea of magnitude between my projects and mass produced ones, unit used for mass-produced things is probably (I don't know in details) around "large cardboard", or "palette". On my side, the until is "shoes box"
Cartridges without shells ? That's a big no : if that's to then hear that the quality of my carts is shabby I prefer to leave here on a good impression. Additionally, if that's to also hear that because of the lack of shell my cartridges have to be put on discount that's another NO too. Prices of my carts are decided after a long work of research and introspection () so I don't want to hear any kind of price reduction after that. If you want a cheap cartridge, the red "all-in-one" cart is all for you.
Providing shell from customer' space Action Replay ? No thanks. I have better things to do than waiting for your spare Action Replay, to mount a Gamer's Cartride inside (which includes to drill and cut the shell etc) and then stick your favorite label on it As indicated above, ideal quantity for my cartridge projects is "shoes box" : I prepare a batch of cartridges from a shoes box of parts to another shoes box of "ready to sell" carts. Doing individual manufacturing for only one user just fulfills the personal interest of that user but except that it completely counter-productive ...
Open Source ? That's completely NO : open sourcing Gamer's Cartridge project would yield around $20 price cut on user side. On my side, it would yield to the disappearing of pocket money to challenge in more complex projects.
I don't have anything against open source, but I'm completely against the ones that beg open sourcing just for their personal own interest, i.e. saving more or less 20 bucks in the case of Gamer's Cartridge. Maybe that's quick money saved for them, but on the other hand that's also innovation in new Saturn projects being destroyed : I certainly wouldn't had pushed Pseudo Saturn Kai development so far (for example around cheat codes and Rhea/Phoebe disc image selection support) if in the meanwhile of the development 3rd party manufacturers would had made profits from my hardware projects.
DIY Kit ? That's more or less same as open source solution : it's just a simplistic solution to satisfy one's personal interest. Additionally, it's a source of troubles in the case that DIY Gamer's Cartridge doesn't works : is it caused by electronic parts (= my responsibility) or soldering and assembly (= user's responsibility) ? In the case of "one man show project" as I'm doing, everything is simpler because I'm responsible of everything when a problem happens
3D Printed Shells ? It's an interesting solution, but this requires to use a completely new manufacturing process for me, with all the related matters (verifying solidity, tweaking shape, selecting appropriate color and base materials etc) ... and all the unexpected problems too : from my own experience, there are high chances of being stuck into unexpected problems when challenging in something new
To give an idea of my apprehension regarding 3D printed shells, let's take a look on Pyra portable laptop development : project started several years ago and now electronic and firmware/OS side of the project seems stable. It's however not released yet because of ... unexpected problems regarding shell manufacturing.
That's not a critic about Pyra project (in fact, I'm following it with admiration), but just an example to detail how bad development can be delayed when you're trying new process or new project.
And for theses reasons above (of extra design, tweaks and risks) as well as in regard of the limited public interest into Gamer's Cartridge this is probably not a good way to do. This would however make sense on a new hardware project.
BTW, I do have some spare 3D shells, but at theses were a generous present to me from their creator theses are not for sale and consequently it's not worth asking if I could sell a Gamer's Cartridge with theses shells.
Official memory cartridge shells ?
Very first Gamer's Cartridge assembled back in 2016 were using shells from official memory cartridge, so this is a good "B-plan solution" to continue manufacturing of Gamer's Cartridge. And on the good side, gathering some used memory cartridges would be the occasion to dump and share the saves eventually left by previous users on theses cartridges
This however needs some tuning on PCB, because status LEDs of theses very first Gamer's Cartridges are currently positioned in the area reserved for cartridge label.
And unlike 3D printed shells, the solidity and other mechanic small details around those official memory cartridge shells should not be a problem, but overall state may be a bit questionable : upper half of the cartridge may be yellow, previous label may be a mess to remove etc. I personally don't care such kind of "retro Gamer's Cartridges" might look not "pristine as new", because as the project name suggests I want my cartridges to be used for playing rather than collecting, but I'm concerned if cartridges don't sell well ... let's wait and see if that's a reasonable solution or not.
Regrets about Gamer's Cartridge
This kind of farewell article traditionally features a "this point should had be done better etc", but I don't have any regrets around Gamer's Cartridge development !!! When releasing Gamer's Cartridge, I thought the project would last for half a year and then be cloned or overtaken by a more competitive (widely available/more features/cheaper : maximum two choices possible), but this project actually lasted for more than three years This was an occasion to meet many people who then became good friends (more details in the "Thanks" sections below) and/or gave extensive help around Pseudo Saturn Kai development. Without them, the limits Pseudo Saturn Kai wouldn't had been pushed that far
This wasn't an occasion for me to become rich, and this was as expected ! Making big cash from retro gaming project requires mass production, which I'm not interested in because for me, Gamer's Cartridge was just a toy and the activity to develop and manufacture theses was just an hobby.
I don't think it's good to go over that toy/hobby limit, because if an hobby becomes a business, it's no longer an hobby
This wasn't an occasion to become famous too : I wasn't approached by famous personalities from social networks about Gamer's Cartridge (nor about Pseudo Saturn Kai too), but everything is well like that as rather than hype I simply want to contribute to a better public interest on homebrew development and Saturn in general.
Many project proudly show feedback from their happy customers, and now it's time to announce stock and production shortage, I realize something similar wasn't available for Gamer's Cartridge !
"All-in-one" cartridge customer feedbacks
As listing feedback from hapy customers is too mainstrean, let's show feedback from users who didn't purchased Gamer's Cartridge
- - - - - - - - - - - - -
(After explaining over several emails that Gamer's Cartridge isn't an EverDrive and giving links to Saturn ODE project in the case this fits better potential customer's needs)
"Thanks for your time"
→ You're welcome, and thank you for teaching me this expression to decline something in a clever manner It will now take a place of choice in my library of useful English expressions.
- - - - - - - - - - - - -
(After detailing about Gamer's Cartridge features and disclaimer)
"I see. I bought an USB Data Link instead."
→ Well, that's better than not replying to my email after ordering a cartridge : at least I don't need to reserve this cartridge during several days for nothing
- - - - - - - - - - - - -
"Will you release DIY kits ?"
→ NO! PCBs are publicly available, and appropriate MAX3000A CPLD can be found on ebay so that you can assemble everything by yourself. CPLD firmware isn't available, but please have fun in re-implementing Gamer's Cartridge logic inside. I learned VHDL like that.
(Note : feedbacks displayed above are the result of several individual feedbacks mixed together, so that general trend about Gamer's Cartridge is discribed, and anonymity of their authors is preserved)
(In alphabetical order, so that nobody won't claim because they are upper or lower than someone else)
- antime, for USB dev cart development, which was used as basis for Gamer's Cartridge
- Baraka, for the fancy Dezaemon 2 themed labels for Gamer's Cartridge - Darius, for providing my first modded Saturn on which I started homebrew development on - Deunan, for providing the good ODEs. Those helped a lot during devlopment of Pseudo Saturn Kai. - Dezaemon DB (IGK), for keeping Dezaemon community active during all theses years - privateye for all the help around Pseudo Saturn Kai, Gamer's Cartridge and also for motivating me to make Pseudo Saturn Kai even better on every beta build :) - Stac for numerous beta testing help during Gamer's Cartridge early development stage - vbt, for all his contributions to Saturn homebrew community
I wish Saturn community a bright future with Satisfier and "all-in-one" red cartridges. The first project shall bring ability to export saves to SD card, also contribute to homebrew games development as also shall feature a nice disk image selection menu someday too. The second project shall bring a an affordable and convenient cartridge support for "all" Saturn games.
On my side, as I now have additional free time from the pause in Gamer's Cartridge manufacturing I would like to focus on the development of old frozen projects.
As usual, I won't communicate about any ETA, development cost nor even what it is about until things are working well enough : that will be less pressure on my side, and less frustration on your side
Written by cafealpha no comments
Synthesis ... this is the kind of blog article posted at the end of December in normal blogs, but since this is not a normal blog, and that I can't respect any schedule for it, let's prepare this article at the beginning of January
Last year started well with an order of Gamer's Cartridge from IGK, who is administrator of Dezaemon DB homepage. More than administrating Dezaemon DB, he is also a dezaemoner who (among other titles) developed Biometal Nemesis, which deserves its youtube link in this blog :)
Biometal Nemesis - Click above if you like shmups
I really like the style of this Dezaemon game ! Thank you very much IGK for creating such gem
Thanks to IGK, it was possible to finish support of Saturn Floppy Disk Drive on Save Data Manager : initialization of this device is slightly different than with internal backup memory and backup memory cartridge, and consequently was causing troubles on various configurations such as no backup memory cartridge inserted, but floppy disk connected, etc. Fixing all possible patterns wouldn't had been possible without kind help and beta testing from IGK. Thank you
Save Data Manager (version around 2017/01/30)
Configuration when this screen was taken was no "backup memory cartridge inserted, and floppy disk connected", which was causing troubles because among other things, unavailable device in the middle of devices table wasn't supported.
Additionally, this was the occasion to add virtual floppy disk support on Gamer's Cartridge, making Saturn considering a floppy disk drive is available, even if not physically connected. Main purpose of this feature is to add 5 more save and load slots in Dezaemon 2, which, in addition of the 5 slots on backup memory cartridge, makes possible to manage up to 10 saves into a Dezaemon 2 session directly from a single SD card I don't remember exactly what was the trigger which started the addition of this feature, but I think that a suggestion from IGK like "it would be cool if floppy disk would be supported by Gamer's Cartridge too" and me "Ah yeah, that's a nice idea ... how many save slots do you want ?"
After that, IGK continued to surprise me by asking his friend beebaraka to draw a Dezaemon 2 themed label for Gamer's Cartridge ... As a result, I received images for two labels, which I personally consider as the masterpieces among Gamer's Cartridge label collection My preference goes to the white-themed label, but I suppose it's just a matter of personal taste.
Dezaemon 2 themed Gamer's Cartridges
Like shooting games ? Like DIY ? Theses cartridges are designed for you
In parallel of theses Dezaemon 2 adventures, generous contributors helped in dumping firmware of some exotic Saturn cartridges, and were successfully added to Pseudo Saturn Kai Save Data Manager. Most relevant dumps were for X-Terminator cartridge, and Urawaza Dataro cartridge : first one is a cartridge with extended support for cheat codes, especially with extra controller allowing in-game search of cheat codes. Later one provides special save data for several (around 34 IIRC) Japanese games. Special thanks to Madrom for providing dump of this cartridge !
All the points below contributed to prepare the "20170423" release of Pseudo Saturn Kai. Warm thanks to all contributors who could make it possible !
Second half of the year mostly concerned cheat codes addition to Pseudo Saturn Kai. It started in June (or May ... I don't remember correctly) from a Gamer's Cartridge user asking when cheat codes will be available in Pseudo Saturn Kai ... this reminded me I still had to finish that until next release
First working version of cheat codes
hander, with USB transfer support
It's not visible on this picture, but many polygons weren't
drawn because of performance issues.
Unlimited time cheat code working : it took me around
one month to fix missing polygons, because of unoptimized
implementation of cheat codes handler), but I did it
Cheat codes kept me busy for six solid months, basically in understanding to manage cheat codes in a similar way as is it done on Action Replay firmware, optimizing critical code, importing codes list, finishing cheat codes related interface, testing several games, etc. That's honestly a hard work, but this was also an occasion to add in-game USB transfer via USB dev cart. Thanks to this, the basis in order to fix or improve cheat codes is ready Proper PC software for cheat codes detection is still missing, but hopefully this will be done someday.
Akumajo Dracula-X illustration with Maria's inifinite jump cheat code.
This game was a nasty one regarding cheat code support, with very
tight CPU and RAM left for cheat codes handler. This was an occasion
to develop many cheat codes debug features
Summer was also the occasion for me to officially end manufacturing and support of USB dev cart : after 5 years involved in this adventure, I considered it was enough, because : 1. USB dev cart interests basically nobody 2. In the rare cases USB dev cart interests somebody, it is usually used for closed-source projects (But there are notable exceptions where USB dev cart contributed to Saturn open source projects. Big thanks to theses concerned peoples for making Saturn homebrew scene brighter )
I'm hesitating about the timing for next Pseudo Saturn Kai release : should I take some extra months in order to get proper cheat codes support for most popular games ? Or should I release it under few weeks with minimal cheat codes support (around an handful of games are currently tested and working), and hope to receive some feedback from users, so that I will eventually know which games need their cheat codes to be fixed ?
That's a very difficult choice : cheat codes is a niche feature (as everything else regarding Saturn !), so I shouldn't hope a lot of feedback. On the other hand, adding a cheat codes edition screen, and allowing cheat codes input on user side is (IMHO) a mistake too : maybe a motivated user would fix and/or add codes for some games, but rarely theses codes will be publicly available for everybody else, and in the other cases, user will simply consider Pseudo Saturn Kai cheat codes as a broken feature. Let's see ... I honestly don't have any precise idea when next release should be done. Any suggestion regarding this is welcome in the comments
Generally speaking, I'm tired about Pseudo Saturn Kai maintenance : I started it around two years ago (yes, largely over than nine thousands hours !!!), edit: that was around three years ago (I though we were at the beginning of year 2017 ), am finally seeing the end of my TODO list to realize that ... majority of users shifted to hardware ODE, or simply left the scene without any last final word ...
Well, whatever it may be, I continue development of Pseudo Saturn Kai because I went too far to stop so near of the end (that's quite a pragmatic argument, sorry), but also (and that's the most important), because that's a nice hobby, which is important in order to keep a balance between private and work
Also, my first steps in Pseudo Saturn Kai maintenance were made during my hospitalization for cancer, and keeping such hobby during theses hard times was worth gold. I don't know (and don't want to know) how things would had turned without my Saturn hobbies.
BTW, things concerning my health are getting well : I'm still undergoing periodical screening, which all were OK last year Last year was the celebration of 3 years all right after surgery, which is not bad for a cancer with 50-60% 5 years survival rate
Pokemon Go still not allowed in hospital. Fortunately, usage Saturn dev laptop isn't forbidden
To finish this article on a rant note (sorry if you went here for some final positive note ), I would like to say "thank you for nothing" to Rhea/Phoebe development team rmenu author. (← updated on 2018/06/20)
Why ? Reason is that I would like to add a rmenu equivalent to Pseudo Saturn Kai, but don't have any technical information to implement it, and it's not like I didn't asked about theses informations, but simply didn't received any relevant reply from concerned developer(s).
For a semi-commercial product, I can understand to keep schematics, source codes and other development resources private. But I don't request disclosure of theses resources, and just want some minimal information for interoperability, which isn't publicly available, and that's a pity.
Why is that a pity ? Because some cheat codes will certainly not work by having rmenu running between Pseudo Saturn Kai and Saturn game. I know there's the solution to use rmenu's full boot, which does a system reset of nearly everything (except Rhea/Phoebe, obviously) after selecting a game, so that cheat codes can be enabled after that ... but I really don't know anybody motivated to do this messy setup : everybody is using the rmenu's quick boot solution, right ?
Pseudo Saturn Kai's rmenu, dated 20151214. Latest version have some major improvements, such as scrolling title of select game, etc Because of lack of Rhea/Phoebe API, this feature is disabled.
I'm personally (and honestly) not concerned about this problem : my modded Saturn + USB dev cart are enough for my development needs, and I don't want to pay for a device costing an arm and a leg (plus a kidney when buying from ebay ...) and then having to do the reverse-engineering job for it after that ! So unless I got external help, clean support for Rhea/Phoebe will be done ... without me
From what I could found from static analysis of rmenu itself, version is checked by seeking to the last available data sector of the CD track, and game is selected by seeking to sectors just before that last available one.
After that's it's difficult to guess what data should be expected from Rhea/Phoebe without testing on real hardware. And reverse-engineering is usually a sluggish and hard work (I estimate the remaining as around a two weeks course ... and hope this to be a pessimistic estimation), and really would like to spend this time to other projects funnier.
2018/06/20 update : there will be proper support of Rhea/Phoebe image selection in Pseudo Saturn Kai, and consequently an user-friendly way of enabling cheat codes when using theses ODE
Very big thanks to Deunan Knute for the great job, providing the technical informations and everything else
And also I would like to thank privateye for contacting Deunan, his patience and great help in beta testing
Written by cafealpha 2 comments
Pseudo Saturn Kai 6.074 released ... more than three months ago Sorry for the late news, but that's still some quite acceptable delay in comparison to frequency I post articles in this blog
The release was initially announced on SegaXtreme forums, because it is my favorite forums for Saturn things (more than 11 years I registered to it ! Big thanks to the forum moderation/maintenance/support team for their steady good work ). Also the news was announced on SegaXtreme first ... because writing an article there takes less time than writing an article on my blog So since I'm a lazy person, let's slightly arrange this article from what I wrote on SegaXtreme forums !
What's new in this version ? Well, there's basically, not a lot of major features (sorry !), but fix of a critical bug affecting Gamer's Cartridge, and addition of some "minor, but that I wanted to add someday" features.
Features for Gamer's Cartridge users
Indirect Dump : Dump cartridge (boot cartridge, or official memory cartridge, or any other cartridge) by compressing its contents to internal backup memory, and then extracting it to SD card when Gamer's Cartridge is inserted. Because of small size of internal backup memory, it may be required to repeat the "insert memory cartridge → Indirect Dump → Turn off Saturn → Insert Gamer's Cartridge → Indirect Dump → Turn off Saturn" cycle several times, but at the end cartridge is dumped Requires some motivation and free time on user side (It took me 45 minutes in order to dump my good old very first official memory cartridge), but this way of dumping doesn't requires to unsolder cartridge memory chips, which is the most important for me ! Note : if you are the lucky owner of Saturn FDD, then floppy disc is used instead of internal backup memory, and consequently dump is significantly faster and simpler.
Left : Screen display after compressing dump data to internal backup memory Right : Screen display after writing dump data from internal backup memory to SD card Theses pictures were taken on Indirect Dump's first successful test
One extra application of this feature was to dump ROMs from legacy cartridges such as X-Terminator, Satellite, ST Key and "8MEG memory cartridge". Curious people wanting to test theses cartridges theses ROMs can found them available for flashing (at your own risks) in Pseudo Saturn Kai Save Data Manager. Special thanks to A Murder Of Crows, AtariBorn and SaturnGuru who dumped their cartridges ... and reported many bugs from early versions of Indirect Dump feature
Indirect Dump development : the cut scenes Left : dump data corruption (see below for details) Right : Dump file CRC check error. Fortunately, only dump computation routine was buggy, and dump feature itself was working
Save Data corruption bugfix : This corruption problem concerns saves on Saturn internal memory, with save data size making save sector allocation table finishing exactly at the end of a sector. Very few games are concerned, and the only example I could find so far is Albert Odyssey.
I found this problem when testing Indirect Dump : data compressed then written to internal save memory wasn't then correctly read and decompressed to SD card. I initially thought this problem to be caused by Indirect Dump itself, because at the time I had this problem, I just finished to mess with data alignment error when preparing indirect dump's compressed data, so thought that this was the next bug to fix regarding Indirect Dump Quick investigation showed that contents of read data wasn't as expected, with a small portion of data being same as data at unrelated offset ... so maybe a problem when compressing and adding header etc to Indirect Dump save data ? It took me then a around one hour of testing and code review until I was sure that culprit was actually not Indirect Dump itself, because re-read of save data didn't matched with written save data ! Then, testing Indirect Dump with same input data and virtual memory cartridge disabled worked as expected, which 99% confirmed that problem was located on virtual memory cartridge side !
So yes, "virtual memory cartridge" actually manages save data handling for all backup devices (internal save memory, memory cartridge, and even Saturn FDD too) : this is possible because Gamer's Cartridge hooks Saturn backup library at relatively high software level. In comparison with 1:1 hardware emulation of save memory cartridge, this has the advantage of being free of capacity limitation inherent to memory cartridge's chips, and also allows to store save data individually on SD card (two files per save, vs big file containing all saves for 1:1 cartridge emulation). On the other side, all the save data handling software has to be re-written, so care has to be taken when re-implementing it
So, this is quite an uncomfortable bug I have to face : save data are corrupted when being written to internal save memory, and Gamer's Cartridge was released around 6 months before, with consequently cartridges potentially corrupting save data in the wild. Fortunately, while being hard to find, the bug wasn't hard to fix Basically, this was a timing error when updating current save data block ID, as described below :
Internal Save Data corruption related source code Left : before fix Right : after fix
Since I really didn't want to fix half of the bug (and having to fix the remaining half on other release), next step is to add a test bench tool for internal save data memory access ! "Test bench" is a program that automatically tests a lot of patterns for a given function or module. Ideally, all major modules should have their test bench, but in the real world, making test bench programs takes time, so programs are usually manually tested with 2 or 3 patterns, and then developer prays for all other patterns being bug-free ... And to tell you the truth, this test bench was the largest one I wrote so far It's not impossible a bug to be still hidden in an untested pattern, but anyway I'm quite confident about the reliability of internal save data support now
Here is how test bench screen looks like on my dev environment :
SatLink and Yabause couple showing test bench screen. SatLink and Yabause : my best friends when testing Saturn programs
Screen copy above was taken after fixing internal save data support, and I forgot to take a similar screen copy when bug wasn't yet fixed ... latest Save Data Manager CDROM's + Gamer's Cartridge with firmwave 6.037 should display error in test bench screen, so it would be funny to try it ... maybe someday BTW, Test Bench is still available in Save Data Manager CD-ROM (it took me a bit of time to add test bench screen, so didn't wanted to remove it after fixing internal save data corruption bug !), but this test bench screen requires a trick in order to be accessed : did you found it ?
That's all about internal save data corruption : I fixed it, and checked a lot of patterns about internal save data access, so similar problem shouldn't happen in the future ! Additionally, I didn't received any feedback from users about this bug, so let's hope it didn't corrupted game saves elsewhere than on my dev laptop
Autodump : Automatically dump saves from internal backup memory to SD card, so that they can be restored in the case they are lost because of depleted CR2032 battery, or save data manipulation error, etc. With this feature, you won't have to say anymore "I lost all my saves because of that $%QTY@!#% CR2032 battery" Since this feature uses SD card, it is available on Gamer's Cartridge only. And no, I won't write save data into Action Replay's cartridge flash ROM : flash ROM chips are not designed in order to be written frequently, hence using flash ROM as read/write storage area may prematurely brick your Action Replay cartridge. If you're not convinced about flash ROM limited write cycles, I can make some "cartridge self destruction" feature that would continuously write and erase random data to flash ROM, but don't claim that your cartridge no longer boots after that
An alternate solution in order to keep internal save data change the chip holding internal save memory to a FRAM one that doesn't requires battery to retain saves data, as detailed in db-electronics.ca. (there are maybe other alternate solutions, so please let me know in the comments if I missed one)
The advantage of this FRAM mod is that saves are not lost when CR2032 battery is depleted. There are however several disadvantages : - This is an hardware mod, which requires to remove a chip, then solder another one, hence quite difficult to do. - CR2032 battery is still required in order to keep clock and language informations.
For being the developer of Pseudo Saturn Kai and Gamer's Cartridge, my opinion is a bit biased, but autodump is a better solution, because autodump is not an invasive mod (plug cartridge vs change chip on Saturn motherboard), and the FRAM solution doesn't allows to dump save data to modern media device. Anyway, I don't force you to like my projects, so if you don't like autodump, then don't use it
Virtual Floppy Disk Drive. Simulate Saturn Floppy Disc Drive (FDD) behavior, with save data stored on SD card. This feature Worked fine with Dezaemon 2, which can now handle 10 saves at once (5 saves from cartridge, and 5 other saves on FDD ), but I didn't tested for other games using FDD, so any feedback is welcome. This is a feature available on Gamer's Cartridge only too. Thanks to this feature, floppy disk access is available without having to plug any floppy disk drive to Saturn
Features for Action Replay and Gamer's Cartridge users
Proper support of FDD in Save Data Manager : Save Data Manager now supports both two partitions of Saturn floppy discs for all common operations such as copy, move, delete, import, dump, etc. Special thanks to Dezaemon DB for big assistance in beta testing
Backup devices informations from Save Data Manager : First device is internal backup memory : the easiest to handle Second device is backup memory cartridge, unconnected (zero partitions detected) in this picture Third device is FDD : two partitions, wrong unit ID returned, and always set at third position in devices information array, even when cartridge is not available. Basically, FDD is a real trouble-maker when trying to handle backup devices
Save Data Manager development cut scenes : trying to format FDD (format for both two partitions is displayed in a single picture) Don't worry about the horrible display of error messages : it's (finally) improved in version 6.074
Soft Reset Patch : Change the "A+B+C+Start key combo" soft reset from "exit to multiplayer screen" to system reset. This idea is not from me, but from neuroacid (rmenu developer).
More saves to import from Save Data Manager. The most noticeable addition is saves from Urawaza Dataro cartridge, containing quality saves for Japanese games. Special thanks to Madroms for dumping the cartridge, and providing me its dump file
Other : Fixed many bugs, and added other bugs ... the usual routine
(Not a software feature, but) future users of Gamer's Cartridge may appreciate the couple of new labels, designed by beebaraka-sensei (twitter) for artwork itself and Dezaemon DB (twitter) for the final editing of the labels. Many thanks to them for the very good work !
Dezaemon-themed labels ... could you find out the odd label ?
The design on theses labels is themed on Dezaemon 2, and as you can see, the Dezaemon character on the game cover grew in the right way I personally do appreciate the white themed one
Before being asked "where are the cheat codes ?", please let me reply :) Cheat codes support is still under development. Menu in order to select game and its cheat codes is 90% done, but the bit of code in order to apply codes is still TBD. I didn't touched this feature for around half a year mostly because of lack of free time, motivation, and being busy in developing other features. I plan to finish this for "next-next release" however. Update three months after writing the explanation above : cheat codes on Pseudo Saturn Kai are working on few games !! There are many things remaining until reaching an "OK to release" state, but at least the cheat codes core feature seems to work, which is quite a relief for me :)
By the way, there's a trick cheat codes selection menu in Pseudo Saturn Kai 6.074 : did you found it ? It won't do anything else than showing games list and cheats for each games, so it's not worth spending more than 10 minutes in looking for the appropriates key(s) combo and timing however.
Yes, this release have (at least) two Easter eggs available Coincidence with release timing during Easter period ? I think not
Apart from cheat codes, there are many other things scheduled for future releases : I initially planned to release everything at once, but had to make this intermediary release in order to fix the save data corruption bug on Gamer's Cartridge, so stay tuned
PS : Special thanks to Stac for beta testing All the features above wouldn't exist without his help !!!
Written by cafealpha 4 comments
While making a Saturn program running directly from ROM, constraint is usually to have program as small as possible. Why ? Because I would like to make Pseudo Saturn Kai continue supporting Action Replay, which have limited ROM size
So, in that situation, I use homemade, minimalistic stdlib, containing usually only memcpy and memset functions, and everything goes well. But for some reason, current program was begging for __ashlsi3 and __ashrsi3 functions. ... What's these things ? __ashlsi3 is an assembly function doing left shifts of data, and as you probably guessed, __ashrsi3 does the same, but with right shifts
No problem, let's ask my friend google, and copy & paste theses functions without minding about their contents Theses functions are standard functions provided by C library, so sources can be found here and there.
An example of what __ashrsi3 function looks like
A day after that, here comes the time to do basic testing of this ROM code Let's first start with simple things such as screen display ...
Text display ... not as expected ?!
Hrm, it's probably a problem in my printchar routine ?
printchar source code : this is the core thing behind text display in my programs
But that's a very long time I didn't touched this routine, which works well on Pseudo Saturn Kai, and works even better in vdp1ex from Charles MacDonald sample programs, because all my printchar routines come from there But just in case of, let's try to tune one " <<3 " into " *8 " in the code above, and see if that changes something. Theses two operations are equivalent, so this should give the same result, but ... Saturn screen becomes all black
Okay, there's definitely something weird regarding that printchar, but I just re-used it as-is from other project, so what's going wrong with my it ?! [...] And then (finally) a light-bulb above my head appears Maybe there's something wrong regarding the __ashlsi3 and __ashrsi3 routines ? And, yes there was something wrong regarding theses routines ... I wrote a paragraph about them on the first half of this article, so it would be surprising the problem came from somewhere else
In more accurate words, routines are OK, which is normal since they are written by people smarter than me But the calling convention of __ashrsi3 was not as my gcc was expecting ? Well, that's just a guess from the display results, because it seems to display the same pixel 8 times on each row of a given character, which may happen when ignoring shift parameter in __ashrsi3 function.
Anyway, rather than finding in details what's wrong, let's fix the problem First, with assembly by hand, in desperately trying to change input parameter handling ... I don't remember exactly what I wrote, but that was something like pushing a register to stack, moving parameter to it, finally restoring register, putting nop instructions everywhere, etc ... nothing difficult, but over my extent in assembly programming
The result is ... a mixed success :
Trying to modify __ashrsi3 routine by hand ... well, it seems that some shift values are not correctly handled
Okay, so let's re-ask google about that __ashrsi3 routine ... and a different implementation arrives in search results. Let's try it
And the execution result :
Execution result with second version of __ashrsi3 function
Yeah, it works this time !!! And don't ask me why, because I didn't took time in understanding what's different in that second version of __ashrsi3 function And, rather than understanding why it works ... let's close that assembly pandora box before some other mystic bugs pop from it
I will probably see about this in the future, but that was absolutely out of the scope of today's programming, and in software world, too much digression leads to freeze of projects, which I would like to avoid in order to go forward to next pending project
As a example, I started to adapt yeti3d engine to Saturn in 2010 (7 years ago !), and this ended in ... developing a SD card based memory cartridge for Saturn ! The point above is is not a joke : menus used in my yeti3d adaptation are the origin of menus used in Pseudo Saturn Kai, which shows the continuity (co-consanguinity ? ) in my projects. And after getting yeti3d working a bit, I really would like to load levels from something else than CD-ROM, which was from PC (via adequate link cable) on a first time, and which will (should ?) then evolve to SD card. That would be cool to make a Saturn game not requiring to burn CD-ROM somedays, but before that I need to finish neighboring side quests
Evolution of my Saturn projects
To conclude this article, let's say it was terribly fun to see some bits of the internals behind C language By the past, I remember I did something similar with my yeti3d adaptation, but remained at "C language level" : optimization done at that time was (IIRC, ) to avoid 4 bits shifts, because theses are not available in a single SH-2 CPU instruction. Avoiding 4 bits shifts was simply done by merging two fixed point operation in a single one (or something like that : I did this 7 years ago !), and this actually gave some improvements in 3D scene rendering Theses were the good times ... I sometimes think "I'm Getting Too Old For This Shit", but that's only to motivate to finish my old projects
But before that, Pseudo Saturn Kai, and then Kicad and Quartus are waiting for me
BTW, in the case you wondered about what was today's programming session, you probably guessed it was about exception handler addition to Pseudo Saturn Kai. This not a new feature, since it was available in Pseudo Saturn 0.83x ... in fact, I grabbed some sources from Pseudo Saturn 0.83x in order to implement this exception handler (thank you CyberWarriorX !) This exception handler will be available as a small add-don to cheat codes feature in Pseudo Saturn Kai next major release.