From befba57fe6a18fba4272ae5832a9cd6f3a5d70aa Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Sat, 6 Apr 2013 04:34:19 -0700 Subject: [PATCH] Simple error checking --- src/gba.c | 12 ++++++++++++ src/gba.h | 8 ++++++++ 2 files changed, 20 insertions(+) diff --git a/src/gba.c b/src/gba.c index 6b00bbce6..82eb80a4b 100644 --- a/src/gba.c +++ b/src/gba.c @@ -2,8 +2,14 @@ #include +static const char* GBA_CANNOT_MMAP = "Could not map memory"; + void GBAInit(struct GBA* gba) { + gba->errno = GBA_NO_ERROR; + gba->errstr = 0; + ARMInit(&gba->cpu); + gba->memory.p = gba; GBAMemoryInit(&gba->memory); } @@ -26,6 +32,12 @@ void GBAMemoryInit(struct GBAMemory* memory) { memory->wram = mmap(0, SIZE_WORKING_RAM, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); memory->iwram = mmap(0, SIZE_WORKING_IRAM, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); memory->rom = 0; + + if (!memory->wram || !memory->iwram) { + GBAMemoryDeinit(memory); + memory->p->errno = GBA_OUT_OF_MEMORY; + memory->p->errstr = GBA_CANNOT_MMAP; + } } void GBAMemoryDeinit(struct GBAMemory* memory) { diff --git a/src/gba.h b/src/gba.h index e29cb3787..65c42bd98 100644 --- a/src/gba.h +++ b/src/gba.h @@ -3,6 +3,11 @@ #include "arm.h" +enum GBAError { + GBA_NO_ERROR = 0, + GBA_OUT_OF_MEMORY = -1 +}; + enum GBAMemoryRegion { REGION_BIOS = 0x0, REGION_WORKING_RAM = 0x2, @@ -59,6 +64,9 @@ struct GBA { struct ARMCore cpu; struct GBABoard board; struct GBAMemory memory; + + enum GBAError errno; + const char* errstr; }; void GBAInit(struct GBA* gba);