Load ROM from buffer API
This commit is contained in:
parent
ce9ce07817
commit
2d7f54a775
18
Core/gb.c
18
Core/gb.c
@ -198,13 +198,29 @@ int GB_load_rom(GB_gameboy_t *gb, const char *path)
|
|||||||
}
|
}
|
||||||
gb->rom = malloc(gb->rom_size);
|
gb->rom = malloc(gb->rom_size);
|
||||||
memset(gb->rom, 0xFF, gb->rom_size); /* Pad with 0xFFs */
|
memset(gb->rom, 0xFF, gb->rom_size); /* Pad with 0xFFs */
|
||||||
fread(gb->rom, gb->rom_size, 1, f);
|
fread(gb->rom, 1, gb->rom_size, f);
|
||||||
fclose(f);
|
fclose(f);
|
||||||
GB_configure_cart(gb);
|
GB_configure_cart(gb);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GB_load_rom_from_buffer(GB_gameboy_t *gb, const uint8_t *buffer, size_t size)
|
||||||
|
{
|
||||||
|
gb->rom_size = (size + 0x3fff) & ~0x3fff;
|
||||||
|
while (gb->rom_size & (gb->rom_size - 1)) {
|
||||||
|
gb->rom_size |= gb->rom_size >> 1;
|
||||||
|
gb->rom_size++;
|
||||||
|
}
|
||||||
|
if (gb->rom) {
|
||||||
|
free(gb->rom);
|
||||||
|
}
|
||||||
|
gb->rom = malloc(gb->rom_size);
|
||||||
|
memset(gb->rom, 0xff, gb->rom_size);
|
||||||
|
memcpy(gb->rom, buffer, size);
|
||||||
|
GB_configure_cart(gb);
|
||||||
|
}
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t seconds;
|
uint8_t seconds;
|
||||||
uint8_t padding1[3];
|
uint8_t padding1[3];
|
||||||
|
@ -667,6 +667,7 @@ void GB_set_user_data(GB_gameboy_t *gb, void *data);
|
|||||||
int GB_load_boot_rom(GB_gameboy_t *gb, const char *path);
|
int GB_load_boot_rom(GB_gameboy_t *gb, const char *path);
|
||||||
void GB_load_boot_rom_from_buffer(GB_gameboy_t *gb, const unsigned char *buffer, size_t size);
|
void GB_load_boot_rom_from_buffer(GB_gameboy_t *gb, const unsigned char *buffer, size_t size);
|
||||||
int GB_load_rom(GB_gameboy_t *gb, const char *path);
|
int GB_load_rom(GB_gameboy_t *gb, const char *path);
|
||||||
|
void GB_load_rom_from_buffer(GB_gameboy_t *gb, const uint8_t *buffer, size_t size);
|
||||||
|
|
||||||
int GB_save_battery(GB_gameboy_t *gb, const char *path);
|
int GB_save_battery(GB_gameboy_t *gb, const char *path);
|
||||||
void GB_load_battery(GB_gameboy_t *gb, const char *path);
|
void GB_load_battery(GB_gameboy_t *gb, const char *path);
|
||||||
|
Loading…
Reference in New Issue
Block a user