mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-12-27 04:04:17 +01:00
reorganize headers and add CpuFill macros
This commit is contained in:
parent
b06f500539
commit
bc10815b94
@ -1,5 +1,5 @@
|
|||||||
#ifndef GUARD_IO_REGS_H
|
#ifndef GUARD_GBA_IO_REG_H
|
||||||
#define GUARD_IO_REGS_H
|
#define GUARD_GBA_IO_REG_H
|
||||||
|
|
||||||
#define REG_BASE 0x4000000 // I/O register base address
|
#define REG_BASE 0x4000000 // I/O register base address
|
||||||
|
|
||||||
@ -385,4 +385,4 @@
|
|||||||
#define INTR_FLAG_KEYPAD (1 << 12)
|
#define INTR_FLAG_KEYPAD (1 << 12)
|
||||||
#define INTR_FLAG_GAMEPAK (1 << 13)
|
#define INTR_FLAG_GAMEPAK (1 << 13)
|
||||||
|
|
||||||
#endif // GUARD_IO_REGS_H
|
#endif // GUARD_GBA_IO_REG_H
|
15
include/gba/macro.h
Normal file
15
include/gba/macro.h
Normal file
@ -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
|
10
include/gba/syscall.h
Normal file
10
include/gba/syscall.h
Normal file
@ -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
|
@ -27,11 +27,8 @@ typedef u32 bool32;
|
|||||||
#define TRUE 1
|
#define TRUE 1
|
||||||
#define FALSE 0
|
#define FALSE 0
|
||||||
|
|
||||||
#include "io_regs.h"
|
#include "gba/io_reg.h"
|
||||||
|
#include "gba/syscall.h"
|
||||||
#define CPU_SET_SRC_FIX (1 << 24)
|
#include "gba/macro.h"
|
||||||
#define CPU_SET_32BIT (1 << 26)
|
|
||||||
|
|
||||||
extern void CpuSet(void *src, void *dest, u32 controlData);
|
|
||||||
|
|
||||||
#endif // GUARD_GLOBAL_H
|
#endif // GUARD_GLOBAL_H
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
#include "global.h"
|
#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 GPU_REG(offset) (*(vu16 *)(REG_BASE + offset))
|
||||||
|
|
||||||
#define EMPTY_SLOT 0xFF
|
#define EMPTY_SLOT 0xFF
|
||||||
|
|
||||||
extern u8 gGpuRegBuffer[REG_BUFFER_SIZE];
|
extern u8 gGpuRegBuffer[GPU_REG_BUF_SIZE];
|
||||||
extern u8 gGpuRegWaitingList[REG_BUFFER_SIZE];
|
extern u8 gGpuRegWaitingList[GPU_REG_BUF_SIZE];
|
||||||
extern bool8 gGpuRegBufferLocked;
|
extern bool8 gGpuRegBufferLocked;
|
||||||
extern bool8 gShouldSyncRegIE;
|
extern bool8 gShouldSyncRegIE;
|
||||||
extern u16 gRegIE;
|
extern u16 gRegIE;
|
||||||
@ -21,7 +21,7 @@ void InitGpuRegManager()
|
|||||||
{
|
{
|
||||||
s32 i;
|
s32 i;
|
||||||
|
|
||||||
for (i = 0; i < REG_BUFFER_SIZE; i++) {
|
for (i = 0; i < GPU_REG_BUF_SIZE; i++) {
|
||||||
gGpuRegBuffer[i] = 0;
|
gGpuRegBuffer[i] = 0;
|
||||||
gGpuRegWaitingList[i] = EMPTY_SLOT;
|
gGpuRegWaitingList[i] = EMPTY_SLOT;
|
||||||
}
|
}
|
||||||
@ -35,9 +35,9 @@ static void CopyBufferedValueToGpuReg(u8 regOffset)
|
|||||||
{
|
{
|
||||||
if (regOffset == REG_OFFSET_DISPSTAT) {
|
if (regOffset == REG_OFFSET_DISPSTAT) {
|
||||||
REG_DISPSTAT &= ~(DISPSTAT_HBLANK_INTR | DISPSTAT_VBLANK_INTR);
|
REG_DISPSTAT &= ~(DISPSTAT_HBLANK_INTR | DISPSTAT_VBLANK_INTR);
|
||||||
REG_DISPSTAT |= REG_BUFFER(REG_OFFSET_DISPSTAT);
|
REG_DISPSTAT |= GPU_REG_BUF(REG_OFFSET_DISPSTAT);
|
||||||
} else {
|
} else {
|
||||||
GPU_REG(regOffset) = REG_BUFFER(regOffset);
|
GPU_REG(regOffset) = GPU_REG_BUF(regOffset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ void CopyBufferedValuesToGpuRegs()
|
|||||||
if (!gGpuRegBufferLocked) {
|
if (!gGpuRegBufferLocked) {
|
||||||
s32 i;
|
s32 i;
|
||||||
|
|
||||||
for (i = 0; i < REG_BUFFER_SIZE; i++) {
|
for (i = 0; i < GPU_REG_BUF_SIZE; i++) {
|
||||||
u8 regOffset = gGpuRegWaitingList[i];
|
u8 regOffset = gGpuRegWaitingList[i];
|
||||||
if (regOffset == EMPTY_SLOT)
|
if (regOffset == EMPTY_SLOT)
|
||||||
return;
|
return;
|
||||||
@ -58,11 +58,11 @@ void CopyBufferedValuesToGpuRegs()
|
|||||||
|
|
||||||
void SetGpuReg(u8 regOffset, u16 value)
|
void SetGpuReg(u8 regOffset, u16 value)
|
||||||
{
|
{
|
||||||
if (regOffset < REG_BUFFER_SIZE)
|
if (regOffset < GPU_REG_BUF_SIZE)
|
||||||
{
|
{
|
||||||
u16 vcount;
|
u16 vcount;
|
||||||
|
|
||||||
REG_BUFFER(regOffset) = value;
|
GPU_REG_BUF(regOffset) = value;
|
||||||
vcount = REG_VCOUNT;
|
vcount = REG_VCOUNT;
|
||||||
|
|
||||||
if ((vcount >= 161 && vcount <= 225)
|
if ((vcount >= 161 && vcount <= 225)
|
||||||
@ -73,7 +73,7 @@ void SetGpuReg(u8 regOffset, u16 value)
|
|||||||
|
|
||||||
gGpuRegBufferLocked = TRUE;
|
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) {
|
if (gGpuRegWaitingList[i] == regOffset) {
|
||||||
gGpuRegBufferLocked = FALSE;
|
gGpuRegBufferLocked = FALSE;
|
||||||
return;
|
return;
|
||||||
@ -88,9 +88,9 @@ void SetGpuReg(u8 regOffset, u16 value)
|
|||||||
|
|
||||||
void SetGpuReg_ForcedBlank(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) {
|
if (REG_DISPCNT & DISPCNT_FORCED_BLANK) {
|
||||||
CopyBufferedValueToGpuReg(regOffset);
|
CopyBufferedValueToGpuReg(regOffset);
|
||||||
@ -99,7 +99,7 @@ void SetGpuReg_ForcedBlank(u8 regOffset, u16 value)
|
|||||||
|
|
||||||
gGpuRegBufferLocked = TRUE;
|
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) {
|
if (gGpuRegWaitingList[i] == regOffset) {
|
||||||
gGpuRegBufferLocked = FALSE;
|
gGpuRegBufferLocked = FALSE;
|
||||||
return;
|
return;
|
||||||
@ -120,18 +120,18 @@ u16 GetGpuReg(u8 regOffset)
|
|||||||
if (regOffset == REG_OFFSET_VCOUNT)
|
if (regOffset == REG_OFFSET_VCOUNT)
|
||||||
return REG_VCOUNT;
|
return REG_VCOUNT;
|
||||||
|
|
||||||
return REG_BUFFER(regOffset);
|
return GPU_REG_BUF(regOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetGpuRegBits(u8 regOffset, u16 mask)
|
void SetGpuRegBits(u8 regOffset, u16 mask)
|
||||||
{
|
{
|
||||||
u16 regValue = REG_BUFFER(regOffset);
|
u16 regValue = GPU_REG_BUF(regOffset);
|
||||||
SetGpuReg(regOffset, regValue | mask);
|
SetGpuReg(regOffset, regValue | mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClearGpuRegBits(u8 regOffset, u16 mask)
|
void ClearGpuRegBits(u8 regOffset, u16 mask)
|
||||||
{
|
{
|
||||||
u16 regValue = REG_BUFFER(regOffset);
|
u16 regValue = GPU_REG_BUF(regOffset);
|
||||||
SetGpuReg(regOffset, regValue & ~mask);
|
SetGpuReg(regOffset, regValue & ~mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,16 +132,10 @@ void *AllocZeroedInternal(void *heapStart, u32 size)
|
|||||||
void *mem = AllocInternal(heapStart, size);
|
void *mem = AllocInternal(heapStart, size);
|
||||||
|
|
||||||
if (mem != NULL) {
|
if (mem != NULL) {
|
||||||
u32 zero;
|
|
||||||
u32 sizeInWords;
|
|
||||||
|
|
||||||
if (size & 3)
|
if (size & 3)
|
||||||
size = 4 * ((size / 4) + 1);
|
size = 4 * ((size / 4) + 1);
|
||||||
|
|
||||||
zero = 0;
|
CpuFill32(mem, 0, size);
|
||||||
sizeInWords = (size << 9) >> 11;
|
|
||||||
|
|
||||||
CpuSet(&zero, mem, CPU_SET_32BIT | CPU_SET_SRC_FIX | sizeInWords);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return mem;
|
return mem;
|
||||||
|
Loading…
Reference in New Issue
Block a user