PPCenter :: devblog

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

Cheat codes overlap check feature

Written by cafealpha no comments
"Overlap check" ... yeah, I know that I'm always terrible when finding a name for a new feature or a new project

So, as its name may suggest, this feature check for cheat codes that would not work correctly together, and automatically unselect some cheat(s) in order to get things working as expected.
One illustration would be level select cheat code : some games may have a list of cheats like "play level 2", "play level 3", "play level 4", and so on. (no, there is usually no cheat code to play level 1 )

Example with Sonic 3D blast cheat codes : it's no longer
possible to simultaneously enable several "Play xyz level" codes
thanks to this overlap check feature

When trying cheat codes for the first time, the reflex would be "enable them all !", and in that case this would lead to undefined behavior. In typical case, game just work fine and since cheat codes are executed in the order from their list, the last overlapping cheat takes priority.

But, some games are quite picky regarding execution time, so the faster cheat codes handler is executed, the better. In other words, the less codes enabled, the more chances game have to work correctly.
Here is one example in video with NiGHTs into dreams : first half of the video shows cheat codes causing graphic glitches, and second half show updated Pseudo Saturn Kai version fixing theses glitches :

NiGHTs into dreams : graphic glitches caused by
cheat codes slow handler.
Video available on youtube.
Left : slow cheat codes handler, causing missing quads on screen
Right : game as well as unlimited time cheat code working fine

Hrm, that's around half a year ago, and I'm still fixing things for the same main feature  Well, that's how software development works : fixing bugs, adding new bugs, and returning back to step zero. Maybe smart people can develop things faster, but ... I'm not smart, so the best solution is to continue the endless development iterations until getting something OK for release
(monty python meaning of life office work)

So well, let's go back to original topic, and let's add that I also felt bad each time I was enabling two incompatible codes. "Play level 2" : enable, "Play level 3" : enable, start game ... what will it do ? Maybe a thermonuclear meltdown because of some divide by zero error  ?! Well, it actually plays level 3, but that's unpleasant anyway.
I implemented cheat codes features from (basically) scratch first for fun (yes, I like 6+ months span software development projects ! ), but also for the freedom of making what I want. Especially, making cheat codes as user-friendly as possible ! So that this "overlap check" feature was added

Here is another example with cheat codes for Virtua Fighter Kids : this is an interesting example because some cheat codes for this game are using "enable code" (starting with `D') : this kind of code is sometimes used to prevent from executing other codes, typically when game module to cheat is not yet loaded, and that writing something to its location would make the game not working correctly.
As a consequence, "enable code" have a global effect on all enabled cheats, hence multiple "enable code" can't be enabled simultaneously.

Virtua Fighter kids uses "enable code" for a slightly different purpose : setting player health to a given value (50% of maximum, one HP, etc) only when it is set to maximum, ie on fight start time. By using this trick, game can then decrease health value, allowing to set some handicap to a given player.
This behavior is completely different in comparison to "unlimited health" cheat that always forces health value to maximum

Virtua Fighter Kids cheat codes list : "50% healt" and
"1-Hit Death" codes are the ones using enable codes

And, Virtua Fighter Kids is a good example, because it uses "enable code" at two different locations : at player 1 health value (06045974) and player 2 health value (06046A74). As only one "enable code" can be used, it's for example not possible to enable "1-hit death" code for both players.

Left : 1-Hit Death code enabled for P1
Right : P1 1-Hit Death code automatically disabled after
1-Hit Death code for P2 is enabled

Additionally, unlimited health for P2 is also automatically disabled, which is normal because it is in contradiction with 1-hit death code for it. From cheat code point of view, theses two codes write to same address, which doesn't makes sense.

"Hey, but I like "One Punch Man" series, and really want to enable theses two 1-hit death codes when playing Virtua Fighter Kids !" would you say ?
Well, that's not possible as-is, but adding a new cheat code setting both players health to 1 when health of any player is set to max value should do the job ♪
I didn't verified this code for real (in fact, I thought about it when writing this article), but it should be OK : "trust me, I'm an engineer"

1-Hit Death code for both P1 and P2
This could also be named "Two gentlemen duel"

I would like to finish this article with the introduction of a bug I fixed recently : I usually don't spend time in speaking about bugs I fix, because this would take too much time But the behavior of this one is very unexpected :

Text display is suddenly uncentered !?
Never though though such goofy bug
would be possible

So, this bug is triggered when selecting item in menu with scrolling text, and when text starts to scroll. The two features in relation with this bug (text centering and scrolling) are apparently unrelated, but the menu module used by Pseudo Saturn Kai is so spaghetti-ish that theses two features can collide into a bug

I'm honestly proud of this menu module It was initially designed for simple menu without even vertical scrolling, but evolved little by little in order to support each new features added to Pseudo Saturn Kai.
It's a complete spaghetti monster, but it works ! Yes, it works : trust me, I'm an engineer !

Read more Cheat codes overlap check feature

One more new PCB color !

Written by cafealpha no comments
As indicated in the title, I tried a new PCB color ! This time, this is yellow

Rare picture where all PCB colors I tried so far are gathered

The manufacturing of theses yellow PCBs took a bit longer than usual : maybe was it because this color is not ordered frequently ? Or just a bad luck with timings ? I don't know, but anyway I'm definitely more at ease with good old green color

Blue PCB in the picture above also needs some attention because it's quite a long time I didn't soldered PCBs with such color. In fact, it was probably the first time for this Gamer's Cartridge PCB revision

So, what's the reason why this article is posted so early ? I mean, pictures of theses PCBs were taken around one month ago, while preparation for one article here is usually in the half a year range, with majority of articles are canceled in the midway of their preparation  Well, the reason comes from accidentally watching TV recently, and realizing that colors match a given pattern !

Gamer's Cartridge, Olympic Games Edition

That would had be the the occasion to do some fancy "Gamer's Cartridge Olympic Games (C) (R) TM Edition" advertisements on all major social networks, modifying prices during this period, make sponsorship with some whatever sportswear brands, but I don't like such kind of show business, and ... the fact PCB colors match those on the Olympic flag is a coincidence

So, I'm glad to introduce you Gamer's Cartridge at the Olympic Games colors ! There's no sponsorship, no changes in the prices, no super event (except this poor blog article), but Saturn projects are still my favorite hobby, which is the most important

PS : I unfortunately no longer have all PCB colors gathered in first picture of this article, so it's not possible the re-take a picture in same layout as Olympic flag.

PPS : there wasn't snowball fight Olympic discipline this time too Let's hope next edition will finally feature competition of a sport which I understand the rules

Read more One more new PCB color !

Happy Birthday Panzer Dragoon Saga !

Written by cafealpha no comments
According to wikipedia, it seems that Japanese version of Panzer Dragoon Saga turned 20 years old this week, so,

Happy Birthday

 Panzer Dragoon Saga !

Hrm, I feel old to hear over and over that games I played in my childhood are becoming vintage ... time flies

So well, I don't want to write an article for the anniversary of each Saturn game That's too depressing, and I prefer to use this time for other things The reason for this article is to help people wanting to play Panzer Dragoon Saga, but not from level 1, and failing to find appropriate save states for use on their Saturn.

There aren't many saves for Panzer Dragoon save files available for importing from Save Data Manager, but good quality saves can be found on Panzer Dragoon Legacy homepage :

The reason why theses saves aren't added to Pseudo Saturn Kai Save Data Manager CDROM is because the readme included with theses saves states that saves can't be hosted elsewhere than on Panzer Dragoon Legacy. I personally think this is a pity, because theses saves are really good.
(2018/02/12 : it seems OK regarding copyright See the bottom of this article for details)

Panzer Dragoon Saga is one of the few games not allowing in-game usage of Gamer's Cartridge. A workaround to that is to use Saturn's internal backup memory.
So, it is possible to import theses saves to Saturn's internal backup memory by using Gamer's Cartridge and Save Data Import feature :
 1. Copy all save data folders from archive to SD card → SAVES folder
 2. Insert Gamer's Cartridge into Saturn, power on Saturn
 3. From main menu, select "Save Data Manager"
 4. Select "Save Data Import"
 5. Browse for save data file where to import from
    Example : SAVES folder → saga_01 → BKRAM1.BIN
 6. Select all saves with Y button and confirm import to internal memory device with A button

Then, it is possible to use theses saves from the game. Unfortunately, Panzer Dragoon Saga is one of the few games not supporting in-game memory cartridge support with Gamer's Cartridge, so the only workaround is to use Saturn internal backup memory.
2018/02/12 : the steps above are still valid, but work on Gamer's Cartridge only. Next release of Pseudo Saturn Kai will feature theses saves directly from Save Data Manager, so that theses will be available for Action Replay cartridges users too (See the bottom of this article for details)

I hope I will be able to make this game compatible with Gamer's Cartridge in the future ! I recently tried to find what's causing this game not working ... and realized it would be harder to fix (I thought game was re-authenticating CD-ROM just before starting to play, but I didn't found any code doing that)
I'm not a genius programmer, but on the other hand, I don't give up on the first failure I meet, so hope next attempt to fix support for this game will be the good one

Update 2018/02/12
: I just received the agreement to add theses saves to Save Data Manager More details can be found on Panzer Dragoon Legacy forums, and screen copy of related posts are available here for the records.
Special thanks to Solo_Wing, who solved this problem in a couple of messages ! Please keep the good work

Read more Happy Birthday Panzer Dragoon Saga !

Year 2017 - Synthesis

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.

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.

Read more Year 2017 - Synthesis

New PCB Color !

Written by cafealpha 2 comments
So I'm currently preparing next batch of Gamer's Cartridge, and am glad to introduce new PCB color

Gamer's Cartridge PCBs in various colors

I unfortunately didn't had blue Rev 3.3 (b) PCB when taking the picture above ... in fact, it's a long time I didn't soldered blue PCBs

The main interest in soldering PCBs with different colors is to make soldering activity funny, which is important for me since cartridges are assembled by hand : if making cartridges would become boring, I would prefer to stop everything rather than automatize assembly process !

My impressions after soldering a black PCB are ... a bit mixed : yeah, the PCB looks cool, but there's no contrast between tracks and isolated areas, so I definitely wouldn't use this color for new projects
One example of this lack of contrast can be found in cow logo, whose rendering is terrible in black color :
Cow logo on black PCB ... playing hide and seek

Among PCB colors I tried so far, I personally prefer ... standard green color, and then maybe red color. Also, I still didn't tested yellow color, so let's try it on next batch  I fear that contrast won't be better than on green PCB however

Read more New PCB Color !

Rss feed of the articles