Romdisk Swapping: Difference between revisions
No edit summary |
No edit summary |
||
Line 28: | Line 28: | ||
== | == Using your romdisk == | ||
In your code you'll need a way to load those new romdisks, we'll use this code snippet by ''BlackAura''. | In your code you'll need a way to load those new romdisks, we'll use this code snippet by ''BlackAura''. | ||
For more info, check this topic [https://dcemulation.org/phpBB/viewtopic.php?f=29&t=68795&hilit=romdisk+feet+of+fury] | For more info, check this topic [https://dcemulation.org/phpBB/viewtopic.php?f=29&t=68795&hilit=romdisk+feet+of+fury] | ||
Line 56: | Line 56: | ||
''' It is important that your mount point start with a '/' -> "/level1" and not "level1" ''' | ''' It is important that your mount point start with a '/' -> "/level1" and not "level1" ''' | ||
You can now unload the romdisk using: | You can now load files that are located at "/level1". Example "/level1/spritesheet.png" | ||
You can unload the romdisk using: | |||
fs_romdisk_unmount(mountpoint); | fs_romdisk_unmount(mountpoint); | ||
Line 64: | Line 66: | ||
dc-tool-ip -t dreamcast -c /path/to/project -x program_name.elf | dc-tool-ip -t dreamcast -c /path/to/project -x program_name.elf | ||
You can now use the function below to access files in the ''/ | You can now use the function below to access files in the ''/rd'' folder: | ||
mount_romdisk("/pc/romdisk_name.img | mount_romdisk("/pc/romdisk_name.img", "/rd"); | ||
Keep in mind that you'll have to switch ''/pc/'' to ''/cd/'' when you burn this to a CD. | Keep in mind that you'll have to switch ''/pc/'' to ''/cd/'' when you burn this to a CD. |
Revision as of 21:21, 11 January 2020
Author: Lerabot/Magnes
Introduction
When I started adding things to the ROM disk, I didn't realize that my 10MB+ .elf file would be problematic (i.e. not load) on the Dreamcast. Also it's been mentioned in a forum topic that loading a romdisk instead of multiple files would be faster. **Need source** I also think that it could be a neat way to handle/manage your memory altogether.
2020 edit : Removed the GZ compression as it seemed to cause problem with filename longer than a certain length (16 IIRC?)
Guide
Organize your assets
Organize the content or your romdisk in multiple folders:
/level1 /level2 /level3
Convert to romdisk
In your Makefile, duplicate the usual romdisk generation command but change the romdisk name and directory.
This is the usual romdisk command, you can still keep this
$(KOS_GENROMFS) -f romdisk.img -d path/to/romdisk -v
This is your new romdisk, replace the romdisk_name and romdisk_folder with what you want.
$(KOS_GENROMFS) -f romdisk_name.img -d path/to/romdisk_folder -v
If I'm using the example from earlier, I could make a "level1" romdisk this way
$(KOS_GENROMFS) -f level1.img -d path/to/level -v
Using your romdisk
In your code you'll need a way to load those new romdisks, we'll use this code snippet by BlackAura. For more info, check this topic [1]
#include <kos.h> #include <zlib/zlib.h> // Thanks BlackAura ;) int mount_romdisk(char *filename, char *mountpoint) { void *buffer; int length = zlib_getlength(filename); // Check failure if(length == 0) return 0; // Allocate memory, read file buffer = malloc(length); gzread(file, buffer, length); gzclose(file); // Mount fs_romdisk_mount(mountpoint, buffer, 1); return 1; }
It is important that your mount point start with a '/' -> "/level1" and not "level1"
You can now load files that are located at "/level1". Example "/level1/spritesheet.png"
You can unload the romdisk using:
fs_romdisk_unmount(mountpoint);
Usage with a Broadband adapter or dc-ipload
In order to use these new romdisk, you need to enable /pc redirection in your dc-tool, update your dc-tool command to use -c:
dc-tool-ip -t dreamcast -c /path/to/project -x program_name.elf
You can now use the function below to access files in the /rd folder:
mount_romdisk("/pc/romdisk_name.img", "/rd");
Keep in mind that you'll have to switch /pc/ to /cd/ when you burn this to a CD.