mirror of
https://github.com/lesserkuma/GBA_MultiMenu.git
synced 2026-08-23 09:04:28 -05:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a3c4a44893 | ||
|
|
cbe17ef7c5 | ||
|
|
8dc1d10a95 |
@@ -15,7 +15,8 @@ The following section must be edited in order to specify the cartridge type to u
|
||||
```json
|
||||
"cartridge": {
|
||||
"type": 2,
|
||||
"battery_present": false
|
||||
"battery_present": false,
|
||||
"min_rom_size": 4194304
|
||||
},
|
||||
```
|
||||
Set `type` to `1` or `2`:
|
||||
@@ -24,6 +25,8 @@ Set `type` to `1` or `2`:
|
||||
|
||||
Set `battery_present` to `true` or `false`. This will enable enhanced save data handling which will only be functional with a working battery.
|
||||
|
||||
Set `min_rom_size` to whatever your cartridge supports as the smallest possible ROM size. Many newer cartridges only support ROMs no smaller than 4 MiB (`4194304`) while some older cartridges can go as low as 512 KiB (`524288`).
|
||||
|
||||
In the `games` section, you can edit the game-related stuff:
|
||||
```json
|
||||
"games": [
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
import sys, os, glob, json, math, re, struct, hashlib, argparse, datetime
|
||||
|
||||
# Configuration
|
||||
app_version = "0.4"
|
||||
app_version = "0.7"
|
||||
default_file = "LK_MULTIMENU_<CODE>.gba"
|
||||
|
||||
################################
|
||||
@@ -83,6 +83,7 @@ if not os.path.exists(args.config):
|
||||
games = []
|
||||
cartridge_type = 1
|
||||
battery_present = False
|
||||
min_rom_size = 0x400000
|
||||
for file in files:
|
||||
d = {
|
||||
"enabled": True,
|
||||
@@ -102,6 +103,7 @@ if not os.path.exists(args.config):
|
||||
"cartridge": {
|
||||
"type": cartridge_type + 1,
|
||||
"battery_present": battery_present,
|
||||
"min_rom_size": min_rom_size,
|
||||
},
|
||||
"games": games,
|
||||
}
|
||||
@@ -124,6 +126,10 @@ else:
|
||||
games = j["games"]
|
||||
cartridge_type = j["cartridge"]["type"] - 1
|
||||
battery_present = j["cartridge"]["battery_present"]
|
||||
if "min_rom_size" in j["cartridge"]:
|
||||
min_rom_size = j["cartridge"]["min_rom_size"]
|
||||
else:
|
||||
min_rom_size = 0x400000
|
||||
|
||||
# Prepare compilation
|
||||
flash_size = cartridge_types[cartridge_type]["flash_size"]
|
||||
@@ -172,6 +178,13 @@ for game in games:
|
||||
x = 0x80000
|
||||
while (x < size): x *= 2
|
||||
size = x
|
||||
if size < 0x400000:
|
||||
with open(f"roms/{game['file']}", "rb") as f:
|
||||
buffer = f.read()
|
||||
if b"Batteryless mod by Lesserkuma" in buffer:
|
||||
size = max(0x400000, min_rom_size)
|
||||
else:
|
||||
size = max(size, min_rom_size)
|
||||
game["index"] = index
|
||||
game["size"] = size
|
||||
if "title_font" in game:
|
||||
@@ -316,7 +329,7 @@ logp("Menu ROM: 0x{:07X}–0x{:07X}".format(0, len(menu_rom)))
|
||||
logp("Game List: 0x{:07X}–0x{:07X}".format(item_list_offset * sector_size, item_list_offset * sector_size + len(item_list)))
|
||||
logp("Status Area: 0x{:07X}–0x{:07X}".format(status_offset * sector_size, status_offset * sector_size + 0x1000))
|
||||
logp("")
|
||||
logp("Cartridge Type: {:d} ({:s} {:s})".format(cartridge_type, cartridge_types[cartridge_type]["name"], "with battery" if battery_present else "without battery"))
|
||||
logp("Cartridge Type: {:d} ({:s}) {:s}".format(cartridge_type + 1, cartridge_types[cartridge_type]["name"], "with battery" if battery_present else "without battery"))
|
||||
logp("Output ROM Size: {:.2f} MiB".format(rom_size / 1024 / 1024))
|
||||
logp("Output ROM Code: {:s}".format(rom_code))
|
||||
output_file = output_file.replace("<CODE>", rom_code)
|
||||
@@ -326,7 +339,7 @@ if args.split:
|
||||
size = 0x2000000
|
||||
if pos > len(compilation[:rom_size]): break
|
||||
if pos + size > rom_size: size = rom_size - pos
|
||||
output_file_part = "{:s}_part{:d}{:s}".format(os.path.splitext(output_file)[0], i + 1, os.path.splitext(output_file)[1])
|
||||
output_file_part = "{:s}_part{:d}{:s}".format(os.path.splitext(output_file)[0], i, os.path.splitext(output_file)[1])
|
||||
with open(output_file_part, "wb") as f: f.write(compilation[pos:pos+size])
|
||||
else:
|
||||
with open(output_file, "wb") as f: f.write(compilation[:rom_size])
|
||||
|
||||
@@ -215,14 +215,11 @@ IWRAM_CODE u8 BootGame(ItemConfig config, FlashStatus status)
|
||||
if (_flash_type == 0)
|
||||
return 1;
|
||||
|
||||
// Temporarily store SRAM values at mapper registers
|
||||
if (status.last_boot_save_type == SRAM_NONE)
|
||||
{
|
||||
sram_register_backup[0] = *(vu8 *)MAPPER_CONFIG1;
|
||||
sram_register_backup[1] = *(vu8 *)MAPPER_CONFIG2;
|
||||
sram_register_backup[2] = *(vu8 *)MAPPER_CONFIG3;
|
||||
sram_register_backup[3] = *(vu8 *)MAPPER_CONFIG4;
|
||||
}
|
||||
// Temporarily store SRAM values located at mapper registers
|
||||
sram_register_backup[0] = *(vu8 *)MAPPER_CONFIG1;
|
||||
sram_register_backup[1] = *(vu8 *)MAPPER_CONFIG2;
|
||||
sram_register_backup[2] = *(vu8 *)MAPPER_CONFIG3;
|
||||
sram_register_backup[3] = *(vu8 *)MAPPER_CONFIG4;
|
||||
|
||||
// Enable SRAM access
|
||||
*(vu8 *)MAPPER_CONFIG4 = 1;
|
||||
|
||||
@@ -15,7 +15,6 @@ Author: Lesserkuma (github.com/lesserkuma)
|
||||
}
|
||||
|
||||
#define MAGIC_FLASH_STATUS 0x414D554B
|
||||
#define FLASH_STATUS_LOCATION 0xA0000
|
||||
|
||||
typedef struct __attribute__((packed)) FlashStatus_
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user