Romdisk Swapping: Difference between revisions
(Created page with "Author: Lerabot = 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....") |
No edit summary |
||
Line 1: | Line 1: | ||
Author: Lerabot | Author: Lerabot/Magnes | ||
= Introduction = | = 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. | 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. | 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. | 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 = | = 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 | |||
== Step 3 == | == Step 3 == | ||
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] | ||
#include <kos.h> | #include <kos.h> | ||
Line 42: | Line 44: | ||
// Check failure | // Check failure | ||
if(length == 0) | if(length == 0) | ||
return 0; | return 0; | ||
Line 59: | 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 unload the romdisk using: |
Revision as of 21:14, 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
Step 3
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 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 /rom folder:
mount_romdisk("/pc/romdisk_name.img.gz", "/rom");
Keep in mind that you'll have to switch /pc/ to /cd/ when you burn this to a CD.