diff --git a/include/io_regs.h b/include/gba/io_reg.h similarity index 99% rename from include/io_regs.h rename to include/gba/io_reg.h index 3a9290feb..e01b13c4e 100644 --- a/include/io_regs.h +++ b/include/gba/io_reg.h @@ -1,5 +1,5 @@ -#ifndef GUARD_IO_REGS_H -#define GUARD_IO_REGS_H +#ifndef GUARD_GBA_IO_REG_H +#define GUARD_GBA_IO_REG_H #define REG_BASE 0x4000000 // I/O register base address @@ -385,4 +385,4 @@ #define INTR_FLAG_KEYPAD (1 << 12) #define INTR_FLAG_GAMEPAK (1 << 13) -#endif // GUARD_IO_REGS_H +#endif // GUARD_GBA_IO_REG_H diff --git a/include/gba/macro.h b/include/gba/macro.h new file mode 100644 index 000000000..5578f90ba --- /dev/null +++ b/include/gba/macro.h @@ -0,0 +1,15 @@ +#ifndef GUARD_GBA_MACRO_H +#define GUARD_GBA_MACRO_H + +#define CPU_FILL(dest, value, size, bit) \ +do { \ + vu##bit tmp = (vu##bit)(value); \ + CpuSet((void *)&tmp, \ + dest, \ + CPU_SET_##bit##BIT | CPU_SET_SRC_FIXED | ((size)/(bit/8) & 0x1FFFFF)); \ +} while (0) + +#define CpuFill16(dest, value, size) CPU_FILL(dest, value, size, 16) +#define CpuFill32(dest, value, size) CPU_FILL(dest, value, size, 32) + +#endif // GUARD_GBA_MACRO_H diff --git a/include/gba/syscall.h b/include/gba/syscall.h new file mode 100644 index 000000000..0f4198b44 --- /dev/null +++ b/include/gba/syscall.h @@ -0,0 +1,10 @@ +#ifndef GUARD_GBA_SYSCALL_H +#define GUARD_GBA_SYSCALL_H + +#define CPU_SET_SRC_FIXED 0x01000000 +#define CPU_SET_16BIT 0x00000000 +#define CPU_SET_32BIT 0x04000000 + +extern void CpuSet(void *src, void *dest, u32 controlData); + +#endif // GUARD_GBA_SYSCALL_H diff --git a/include/global.h b/include/global.h index d04d4a614..37473afc8 100644 --- a/include/global.h +++ b/include/global.h @@ -27,11 +27,8 @@ typedef u32 bool32; #define TRUE 1 #define FALSE 0 -#include "io_regs.h" - -#define CPU_SET_SRC_FIX (1 << 24) -#define CPU_SET_32BIT (1 << 26) - -extern void CpuSet(void *src, void *dest, u32 controlData); +#include "gba/io_reg.h" +#include "gba/syscall.h" +#include "gba/macro.h" #endif // GUARD_GLOBAL_H diff --git a/src/gpu_regs.c b/src/gpu_regs.c index 6462abfcc..b5abec9fa 100644 --- a/src/gpu_regs.c +++ b/src/gpu_regs.c @@ -1,14 +1,14 @@ #include "global.h" -#define REG_BUFFER_SIZE 0x60 +#define GPU_REG_BUF_SIZE 0x60 -#define REG_BUFFER(offset) (*(u16 *)(&gGpuRegBuffer[offset])) +#define GPU_REG_BUF(offset) (*(u16 *)(&gGpuRegBuffer[offset])) #define GPU_REG(offset) (*(vu16 *)(REG_BASE + offset)) #define EMPTY_SLOT 0xFF -extern u8 gGpuRegBuffer[REG_BUFFER_SIZE]; -extern u8 gGpuRegWaitingList[REG_BUFFER_SIZE]; +extern u8 gGpuRegBuffer[GPU_REG_BUF_SIZE]; +extern u8 gGpuRegWaitingList[GPU_REG_BUF_SIZE]; extern bool8 gGpuRegBufferLocked; extern bool8 gShouldSyncRegIE; extern u16 gRegIE; @@ -21,7 +21,7 @@ void InitGpuRegManager() { s32 i; - for (i = 0; i < REG_BUFFER_SIZE; i++) { + for (i = 0; i < GPU_REG_BUF_SIZE; i++) { gGpuRegBuffer[i] = 0; gGpuRegWaitingList[i] = EMPTY_SLOT; } @@ -35,9 +35,9 @@ static void CopyBufferedValueToGpuReg(u8 regOffset) { if (regOffset == REG_OFFSET_DISPSTAT) { REG_DISPSTAT &= ~(DISPSTAT_HBLANK_INTR | DISPSTAT_VBLANK_INTR); - REG_DISPSTAT |= REG_BUFFER(REG_OFFSET_DISPSTAT); + REG_DISPSTAT |= GPU_REG_BUF(REG_OFFSET_DISPSTAT); } else { - GPU_REG(regOffset) = REG_BUFFER(regOffset); + GPU_REG(regOffset) = GPU_REG_BUF(regOffset); } } @@ -46,7 +46,7 @@ void CopyBufferedValuesToGpuRegs() if (!gGpuRegBufferLocked) { s32 i; - for (i = 0; i < REG_BUFFER_SIZE; i++) { + for (i = 0; i < GPU_REG_BUF_SIZE; i++) { u8 regOffset = gGpuRegWaitingList[i]; if (regOffset == EMPTY_SLOT) return; @@ -58,11 +58,11 @@ void CopyBufferedValuesToGpuRegs() void SetGpuReg(u8 regOffset, u16 value) { - if (regOffset < REG_BUFFER_SIZE) + if (regOffset < GPU_REG_BUF_SIZE) { u16 vcount; - REG_BUFFER(regOffset) = value; + GPU_REG_BUF(regOffset) = value; vcount = REG_VCOUNT; if ((vcount >= 161 && vcount <= 225) @@ -73,7 +73,7 @@ void SetGpuReg(u8 regOffset, u16 value) gGpuRegBufferLocked = TRUE; - for (i = 0; i < REG_BUFFER_SIZE && gGpuRegWaitingList[i] != EMPTY_SLOT; i++) { + for (i = 0; i < GPU_REG_BUF_SIZE && gGpuRegWaitingList[i] != EMPTY_SLOT; i++) { if (gGpuRegWaitingList[i] == regOffset) { gGpuRegBufferLocked = FALSE; return; @@ -88,9 +88,9 @@ void SetGpuReg(u8 regOffset, u16 value) void SetGpuReg_ForcedBlank(u8 regOffset, u16 value) { - if (regOffset < REG_BUFFER_SIZE) + if (regOffset < GPU_REG_BUF_SIZE) { - REG_BUFFER(regOffset) = value; + GPU_REG_BUF(regOffset) = value; if (REG_DISPCNT & DISPCNT_FORCED_BLANK) { CopyBufferedValueToGpuReg(regOffset); @@ -99,7 +99,7 @@ void SetGpuReg_ForcedBlank(u8 regOffset, u16 value) gGpuRegBufferLocked = TRUE; - for (i = 0; i < REG_BUFFER_SIZE && gGpuRegWaitingList[i] != EMPTY_SLOT; i++) { + for (i = 0; i < GPU_REG_BUF_SIZE && gGpuRegWaitingList[i] != EMPTY_SLOT; i++) { if (gGpuRegWaitingList[i] == regOffset) { gGpuRegBufferLocked = FALSE; return; @@ -120,18 +120,18 @@ u16 GetGpuReg(u8 regOffset) if (regOffset == REG_OFFSET_VCOUNT) return REG_VCOUNT; - return REG_BUFFER(regOffset); + return GPU_REG_BUF(regOffset); } void SetGpuRegBits(u8 regOffset, u16 mask) { - u16 regValue = REG_BUFFER(regOffset); + u16 regValue = GPU_REG_BUF(regOffset); SetGpuReg(regOffset, regValue | mask); } void ClearGpuRegBits(u8 regOffset, u16 mask) { - u16 regValue = REG_BUFFER(regOffset); + u16 regValue = GPU_REG_BUF(regOffset); SetGpuReg(regOffset, regValue & ~mask); } diff --git a/src/malloc.c b/src/malloc.c index 49f940b7b..8bfaf5ef0 100644 --- a/src/malloc.c +++ b/src/malloc.c @@ -132,16 +132,10 @@ void *AllocZeroedInternal(void *heapStart, u32 size) void *mem = AllocInternal(heapStart, size); if (mem != NULL) { - u32 zero; - u32 sizeInWords; - if (size & 3) size = 4 * ((size / 4) + 1); - zero = 0; - sizeInWords = (size << 9) >> 11; - - CpuSet(&zero, mem, CPU_SET_32BIT | CPU_SET_SRC_FIX | sizeInWords); + CpuFill32(mem, 0, size); } return mem;