summaryrefslogtreecommitdiff
path: root/mknes.c
diff options
context:
space:
mode:
Diffstat (limited to 'mknes.c')
-rw-r--r--mknes.c34
1 files changed, 26 insertions, 8 deletions
diff --git a/mknes.c b/mknes.c
index a6d224d..f8850b0 100644
--- a/mknes.c
+++ b/mknes.c
@@ -37,8 +37,8 @@
#define CIRAM_SIZE 0x1000
#define CHR_RAM_SIZE 0x4000
-uint32_t buffer[BUFFER_WIDTH * BUFFER_HEIGHT] __attribute__((section(".bss"), aligned(4096)));
-uint32_t display_buffer[BUFFER_WIDTH * BUFFER_HEIGHT] __attribute__((section(".bss"), aligned(4096)));
+static uint32_t buffer[BUFFER_WIDTH * BUFFER_HEIGHT] __attribute__((section(".bss"), aligned(4096)));
+static uint32_t display_buffer[BUFFER_WIDTH * BUFFER_HEIGHT] __attribute__((section(".bss"), aligned(4096)));
static void audio_callback(int16_t *data, size_t frames) { }
@@ -54,6 +54,14 @@ static void audio_callback(int16_t *data, size_t frames) { }
// #include "audio.c"
#include "incbin.h"
+#ifdef BENCHMARK
+// Embed the ROM for benchmarking to eliminate file I/O overhead
+// Uncomment the ROM you want to benchmark:
+INCBIN_BYTES(benchmark_rom, "data/Life Force (USA).nes");
+// INCBIN_BYTES(benchmark_rom, "data/0000/Super Mario Bros. (World) (HVC-SM).nes");
+// INCBIN_BYTES(benchmark_rom, "data/0003/Gradius (USA).zip");
+#endif
+
#include "platform_gl_loader.c"
@@ -152,7 +160,7 @@ struct main_state state __attribute__((aligned(64)));
#include "mkfw.h"
#include "platform_opengl.c"
-
+static size_t sprite_counts[8];
static uint32_t frames; // debug information
// static int32_t tas_frame_count;
@@ -235,12 +243,17 @@ int main(int argc, char **argv) {
memset(nstate, 0, sizeof(struct nes_state));
ppu_reset(nstate);
+#ifdef BENCHMARK
+ // Use embedded ROM for consistent benchmarking without file I/O overhead
+ ines2_load_from_memory(nstate, benchmark_rom, INCBIN_SIZE(benchmark_rom));
+
+#else
// ines2_load(nstate, "data/0000/10-Yard Fight (USA, Europe).nes");
// ines2_load(nstate, "data/0000/Balloon Fight (USA).nes");
// ines2_load(nstate, "data/0000/Excitebike (Japan, USA).nes");
// ines2_load(nstate, "data/0000/Ice Climber (USA, Europe, Korea).nes");
// ines2_load(nstate, "data/0000/Kung Fu (Japan, USA).nes");
- ines2_load(nstate, "data/0000/Super Mario Bros. (World) (HVC-SM).nes");
+ // ines2_load(nstate, "data/0000/Super Mario Bros. (World) (HVC-SM).nes");
// ines2_load(nstate, "data/Super Mario Bros. (W) (V1.0) [!].nes");
// ines2_load(nstate, "data/Super Mario Bros. (JU) [!].nes");
// ines2_load(nstate, "data/0000/Urban Champion (World).nes");
@@ -253,7 +266,7 @@ int main(int argc, char **argv) {
// ines2_load(nstate, "data/0000/raster_demos/RasterTest3.NES");
// ines2_load(nstate, "data/0000/raster_demos/RasterTest3a.NES");
// ines2_load(nstate, "data/0000/raster_demos/RasterTest3b.NES");
- ines2_load(nstate, "data/0000/raster_demos/RasterTest3c.NES");
+ // ines2_load(nstate, "data/0000/raster_demos/RasterTest3c.NES");
// ines2_load(nstate, "data/0000/raster_demos/RasterTest3d.NES");
// ines2_load(nstate, "data/0000/raster_demos/RasterTest3e.NES");
// ines2_load(nstate, "data/0000/NEStress.NES");
@@ -262,7 +275,7 @@ int main(int argc, char **argv) {
// ines2_load(nstate, "data/0000/Xevious - The Avenger (USA).zip");
// ines2_load(nstate, "data/tv.nes");
- // ines2_load(nstate, "data/Life Force (USA).zip"); // 2002
+ ines2_load(nstate, "data/Life Force (USA).nes"); // 2002
// ines2_load(nstate, "data/0003/Flipull - An Exciting Cube Game (Japan) (En).zip");
// ines2_load(nstate, "data/0003/Friday the 13th (USA).zip");
@@ -286,12 +299,13 @@ int main(int argc, char **argv) {
// ines2_load(nstate, "data/Blaster Master (USA).zip"); // mapper 1
// ines2_load(nstate, "AccuracyCoin.nes"); // mapper 1
+#endif
mapper_setup(nstate);
cpu_reset(nstate);
-#if 0
- for(uint32_t i = 0; i < 0x5000; ++i) {
+#ifdef BENCHMARK
+ for(uint32_t i = 0; i < 0x1000; ++i) {
while(!nstate->ppu.frame_ready) {
// PROFILE_NAMED("nes emulator");
cpu_tick(nstate);
@@ -300,10 +314,14 @@ int main(int argc, char **argv) {
frames++;
}
+ // for(size_t i = 0; i < 9; ++i) {
+ // printf("count %d: %lld\n", i, sprite_counts[i]);
+ // }
// for(size_t i = 0; i < 256; ++i) {
// printf("instr %2.2x: %lld\n", i, instr_count[i]);
// }
+
return 0;
#else