summaryrefslogtreecommitdiff
path: root/mknes_sdl.c
diff options
context:
space:
mode:
Diffstat (limited to 'mknes_sdl.c')
-rw-r--r--mknes_sdl.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/mknes_sdl.c b/mknes_sdl.c
index 98776b5..f7d94c4 100644
--- a/mknes_sdl.c
+++ b/mknes_sdl.c
@@ -108,7 +108,15 @@ int main(int argc, char **argv) {
init_opcode_lut();
init_opcode_ud_lut();
- struct nes_state *nstate = aligned_alloc(4096, (sizeof(struct nes_state) + 4095) & ~4095);
+ size_t nstate_size = (sizeof(struct nes_state) + 4095) & ~4095; // Round up to page size
+ struct nes_state *nstate = mmap(NULL, nstate_size,
+ PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANONYMOUS | MAP_POPULATE | MAP_LOCKED,
+ -1, 0);
+ if (nstate == MAP_FAILED) {
+ perror("mmap nstate failed");
+ exit(1);
+ }
#ifdef BENCHMARK
// Run benchmark with configurable parameters
@@ -354,7 +362,7 @@ int main(int argc, char **argv) {
for(int i = 0; i < 4; i++) {
free(debug_nt_buffer[i]);
}
- free(nstate);
+ munmap(nstate, nstate_size);
timer_shutdown();
for(int i = 0; i < 4; i++) {