PancakeNESEmu
A homebrewed NES Emulator written in C
Loading...
Searching...
No Matches
mem.c
Go to the documentation of this file.
1#include "core/mem.h"
2#include "macros.h"
3
4#include <stdlib.h>
5#include <sys/mman.h>
6
8
9 memory mem =
10 mmap(NULL, TOTAL_MEM_SIZE, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
11
12 if (mem == MAP_FAILED) {
13 exit(EXIT_FAILURE);
14 }
15
16 return mem;
17}
18
20 for (unsigned int i = 0; i < TOTAL_MEM_SIZE; ++i) {
21 mem[i] = 0x00;
22 }
23}
24
26 munmap(mem, TOTAL_MEM_SIZE);
27}
28
30 for (unsigned int i = 0; i < 0x800; ++i) {
31 mem[RAM_MIRROR_1_START + i] = mem[i];
32 mem[RAM_MIRROR_2_START + i] = mem[i];
33 mem[RAM_MIRROR_3_START + i] = mem[i];
34 }
35
36 for (unsigned int i = 0; i < 0x1ff8; i += 8) {
38 mem[PPU_MIRRORS_START_ONE + i] = mem[PPU_REG_ONE];
39 mem[PPU_MIRRORS_START_TWO + i] = mem[PPU_REG_TWO];
43 mem[PPU_MIRRORS_START_SIX + i] = mem[PPU_REG_SIX];
45 }
46}
#define PPU_REG_SEVEN
Definition macros.h:69
#define PPU_MIRRORS_START_ONE
Definition macros.h:76
#define RAM_MIRROR_1_START
Definition macros.h:51
#define PPU_REG_TWO
Definition macros.h:64
#define PPU_MIRRORS_START_TWO
Definition macros.h:77
#define PPU_REG_ONE
Definition macros.h:63
#define PPU_MIRRORS_START_SEVEN
Definition macros.h:82
#define PPU_MIRRORS_START_SIX
Definition macros.h:81
#define RAM_MIRROR_3_START
Definition macros.h:57
#define EXIT_FAILURE
Definition macros.h:6
#define PPU_REG_SIX
Definition macros.h:68
#define PPU_MIRRORS_START_FIVE
Definition macros.h:80
#define PPU_REG_FIVE
Definition macros.h:67
#define PPU_REG_ZERO
Definition macros.h:62
#define PPU_REG_THREE
Definition macros.h:65
#define PPU_MIRRORS_START_THREE
Definition macros.h:78
#define PPU_MIRRORS_START_FOUR
Definition macros.h:79
#define PPU_MIRRORS_START_ZERO
Definition macros.h:75
#define RAM_MIRROR_2_START
Definition macros.h:54
#define PPU_REG_FOUR
Definition macros.h:66
#define TOTAL_MEM_SIZE
Definition macros.h:13
void free_memory(memory mem)
This procedure free the memory pointer.
Definition mem.c:25
void reset_memory(memory mem)
This procedure set the entire memory to 0.
Definition mem.c:19
memory init_memory()
This function allocate on the heap a memory of exactly TOTAL_MEMORY_SIZE.
Definition mem.c:7
void memory_mirroring(memory mem)
This procedure make the memory mirroring.
Definition mem.c:29
data * memory
Definition mem.h:6