PPCenter :: devblog

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

libfat : maybe you need to loose some weight :D

Written by cafealpha 3 comments
So as you may know, I'm (still) developing the hardware/firmware/everything else for my SD card-based Saturn Cartridge.

One the main module for the firmware of this cartridge is File System access library.

As you may know, there are many File System existing in real worls : FAT, NTFS, exFat, ReiserFs, etc.
And in my project, I choose to use FAT32 in order to access files and directories.
Why FAT32 ? Just because it offers the best rate of advantages vs disadvantages in my project scope.
Advantages :
 - Available everywhere, from Windows 98 to every Linux distribution.
 - Detailed (?) specs available on MS website, lots of free source code available elsewhere.
 - Little resource requirement (at least 1~2KB of work RAM, and few tenths of program memory for code).
Disadvantages :
 - A little hard to understand why internal data structure is so messy ... more understandable after reading FAT16 specs.
 - Complex Long FileName support, and patented by MS too.
 - Write performances may be poor under certain conditions. Example : fragmented file system + large partition size.
 - Free source code available everywhere is sometimes buggy / bloated.

At the very beginning of the project (nearly 4 years ago !), I choose DharmaniTech FAT32 library , and it was easy to use, so that I could read files without many problems on software development side.
But it only supports <512 bytes file write, and a lot of advanced features weren't available, so I then switched to thinfat32 library .
Thinfat32 library was a pain to adapt to Saturn, and some advanced features weren't available, or didn't worked, so I rapidly switched to libfat .

Libfat is great, works without any major trouble, and even supports FAT16
So I kept libfat as FAT32 library for around 3 years.
But one problem of libfat is ... its weight (<- yeah, I wanted to put this pun somewhere ).
 - Sector caching is cool, but library doesn't work without it, so we need at least 8KB of work RAM for it.
 - Source code is very complete, but also very complex, so unless you aren't a talented developer, so can't customize it easily ... and unfortunately I'm not a talented developer
 - Library supports nearly everything for file/directory manipulation, so size after compilation is a little big (around 50KB IIRC).

You may ask : "why complaining about few KBs of RAM ? Saturn got plenty of RAM to use !"
Well, yes and no. My project (on game game backup from/to SD card) of resources :
 - Work RAM : 24KB ... not contiguous : 16KB+8KB
 - Program memory : work RAM, or cartridge ROM (1MB). I choose to run program directly from ROM.

And, in a (maybe) future hardware project, I may need to port FAT32 library to microcontroller, so few resources will be mandatory.

So last month, I dropped libfat, and started to look for a simpler & better FAT32 library.
When selecting a starting point for development, my choice pointed to thinfat32, not because it was perfect, but because I had some experience with it in the past, so that I know where I should start to fix things

First, I dropped some features I don't need :
 - Long FileName when writing files : LFN can be read, but only 8.3 files can be written ... it's enough for my needs
 - Long path : changed maximum size for file path from MAX_PATH (260 bytes) to 96 bytes ... it's enough for me, and saves some RAM.
 - Only one file open at once : it saves some RAM.
 - Other ? (don't remember)

Then started to fix/debug/etc the library :
 - Big/low endian support ... Saturn and PC endianness is different
 - Directory creation fix.
 - File creation in non-root directory fix.
 - Added test bench under windows ... there was one stub in original sources, but with very limited test range ...
 - Better log support.
 - FS info support.
 - FAT16 support ... not working yet (), but at least it works better than in original sources
 - File append fix ... original sources support file append ... only in the case source file is multiple of 512 bytes ... this bug took me many time to spot
 - Clock support when setting file timestamp ... original sources supported only fixed (dummy) timestamp.
 - File listing within a directory.
 - Source code cleanup.
 - MANY fixes.

Complaints about thinfat32 library may look severe, but I really thanks its author to publicly release it !
Thanks to him, I know have something that fits my needs, and have a deeper knowledge regarding FAT32 structure

Last but not least, here are some screenshots :
data/images/20151021_thinfat_testprog.tb.png
Test program contents :
In this screenshot, I first create one directory,
then write 3 files inside it.


data/images/20151021_thinfat_testbench.tb.png
Test program execution - just in order to show
a command line screenshot on my blog

data/images/20151021_thinfat_testresults.tb.png
Result in (virtual) test drive :
one directory and 3 files are created !

This is just the beginning of the development : I still need to test under Saturn emulator (yabause ), then on real hardware (Saturn + custom cartridge ).

Read more libfat : maybe you need to loose some weight :D

Shining Force 3 works !

Written by cafealpha 6 comments
Additional testing of my test cartridge showed that Shining Force scenario 3 was "working" well when using memory expander hack

By "working", I mean that game was working fine (no freeze, black screen whatever) while looking for save data on SD card.
I didn't verified if save data was consistent or not, this can be verified and eventually fixed later

data/images/20150915_sforce39.tb.png
Game is looking for SFORCE39 save data ?!

Logs show that game is looking for SFORCE31 save data, which is normal, but after that it is looking for SFORCE39 save data ?!?
I suppose this is some debug stuff that was left as-is, or maybe something for game beta testers ? Please let me know if you have more informations about this


It "works", but there's still a lot of code to write/cleanup/etc before release !
At first, I should add some "log to SD card" feature, this may be useful when we will enter beta testing stage

BTW, I'm looking for a name for my "SD card-based memory cart for Saturn" project.
The only requirement is that the name needs to be easy to remember. Suggestions are welcome


Edit (2016/02/12) : nearly 5 months after, everything works more or less so that I took a couple of videos of Pseudo Saturn Kai in action
data/images/20160212_xzibit_video.jpg
Video in video ?

More next week month

Edit (2016/03/16) : took longer than expected to add subtitles to the videos, but everything is finally ready. Thank you for your patience

data/images/20160316_shining_force_3_sd_memcart.jpg
Shining Force 3 Scenario 1 SD Memory Cart test
Game is accessing save data from cartridge's SD card. It works



data/images/20160316_shining_force_3_sd_memcart_makingof.jpg
Shining Force 3 Scenario 1 SD Memory Cart test (Making Of)
Same as above, with also log messages display on my dev laptop

Read more Shining Force 3 works !

Scritch, scritch ...

Written by cafealpha 3 comments
Today was a coding-free recreation day
Instead of coding, I used my brand new rasp (file) on a Saturn memory cartridge shell :
data/images/20150909_memcart_shell.tb.jpg
SD card on Memory Cartridge ?

Yeah, I know, it's "homemade"

Request : I only have a limited stock of cartridge shell, so is there somebody with a 3D printer/whatever ready to produce shells ? If you have the skillz, hardware, time and motivation to produce Saturn cartridge shells, please contact me via my homepage's contact form .
I can offer one cartridge (without shell) if you fulfill my needs

Edit : I forgot to put a picture of the cartridge itself :
data/images/20150909_family_portrait.tb.jpg
Cartridges Rev 3.1, Rev 2f, Rev 1b

Read more Scritch, scritch ...

Yeah !!! It work ! (when it doesn't bug)

Written by cafealpha no comments
This afternoon was a very intense debugging session
Nah, I joke, I just played Sonic R and Virtua Fighter Kids with my debug cartridge plugged on my Saturn

data/images/20150908_memcart_vfkids.png.tb.jpg
I unlocked Sarah's movie

Unfortunately, I lost against Dural during last (bonus) stage, but at least I was stronger than Saturn BIOS Backup Library

data/images/20150908_memcart_dbg.tb.png
Debug session using my good old SatLink tool.
Virtua Fighter Kids save file is read from/saved to SD card.
And as a bonus, backup related functions send debug messages
 to my dev laptop while the game is running

There's still a lot to do before getting something good, but today's debug session showed that current hardware (cartridge's PCB, CPLD firmware) and software (SH2 firmware) are working (more or less) fine

Read more Yeah !!! It work ! (when it doesn't bug)

Rss feed of the tag