mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2025-03-06 07:27:47 +01:00
Merge remote-tracking branch 'refs/remotes/pret/master'
# Conflicts: # asm/libagbbackup.s # asm/save.s # asm/save_failed_screen.s # sym_bss.txt # sym_common.txt
This commit is contained in:
commit
06a8cfc9f8
@ -2,16 +2,16 @@
|
|||||||
|
|
||||||
#define GPU_REG_BUF_SIZE 0x60
|
#define GPU_REG_BUF_SIZE 0x60
|
||||||
|
|
||||||
#define GPU_REG_BUF(offset) (*(u16 *)(&gGpuRegBuffer[offset]))
|
#define GPU_REG_BUF(offset) (*(u16 *)(&sGpuRegBuffer[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[GPU_REG_BUF_SIZE];
|
static u8 sGpuRegBuffer[GPU_REG_BUF_SIZE];
|
||||||
extern u8 gGpuRegWaitingList[GPU_REG_BUF_SIZE];
|
static u8 sGpuRegWaitingList[GPU_REG_BUF_SIZE];
|
||||||
extern bool8 gGpuRegBufferLocked;
|
static bool8 sGpuRegBufferLocked;
|
||||||
extern bool8 gShouldSyncRegIE;
|
static bool8 sShouldSyncRegIE;
|
||||||
extern u16 gRegIE;
|
static u16 sRegIE;
|
||||||
|
|
||||||
static void CopyBufferedValueToGpuReg(u8 regOffset);
|
static void CopyBufferedValueToGpuReg(u8 regOffset);
|
||||||
static void SyncRegIE();
|
static void SyncRegIE();
|
||||||
@ -22,13 +22,13 @@ void InitGpuRegManager()
|
|||||||
s32 i;
|
s32 i;
|
||||||
|
|
||||||
for (i = 0; i < GPU_REG_BUF_SIZE; i++) {
|
for (i = 0; i < GPU_REG_BUF_SIZE; i++) {
|
||||||
gGpuRegBuffer[i] = 0;
|
sGpuRegBuffer[i] = 0;
|
||||||
gGpuRegWaitingList[i] = EMPTY_SLOT;
|
sGpuRegWaitingList[i] = EMPTY_SLOT;
|
||||||
}
|
}
|
||||||
|
|
||||||
gGpuRegBufferLocked = FALSE;
|
sGpuRegBufferLocked = FALSE;
|
||||||
gShouldSyncRegIE = FALSE;
|
sShouldSyncRegIE = FALSE;
|
||||||
gRegIE = 0;
|
sRegIE = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void CopyBufferedValueToGpuReg(u8 regOffset)
|
static void CopyBufferedValueToGpuReg(u8 regOffset)
|
||||||
@ -43,15 +43,15 @@ static void CopyBufferedValueToGpuReg(u8 regOffset)
|
|||||||
|
|
||||||
void CopyBufferedValuesToGpuRegs()
|
void CopyBufferedValuesToGpuRegs()
|
||||||
{
|
{
|
||||||
if (!gGpuRegBufferLocked) {
|
if (!sGpuRegBufferLocked) {
|
||||||
s32 i;
|
s32 i;
|
||||||
|
|
||||||
for (i = 0; i < GPU_REG_BUF_SIZE; i++) {
|
for (i = 0; i < GPU_REG_BUF_SIZE; i++) {
|
||||||
u8 regOffset = gGpuRegWaitingList[i];
|
u8 regOffset = sGpuRegWaitingList[i];
|
||||||
if (regOffset == EMPTY_SLOT)
|
if (regOffset == EMPTY_SLOT)
|
||||||
return;
|
return;
|
||||||
CopyBufferedValueToGpuReg(regOffset);
|
CopyBufferedValueToGpuReg(regOffset);
|
||||||
gGpuRegWaitingList[i] = EMPTY_SLOT;
|
sGpuRegWaitingList[i] = EMPTY_SLOT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -71,17 +71,17 @@ void SetGpuReg(u8 regOffset, u16 value)
|
|||||||
} else {
|
} else {
|
||||||
s32 i;
|
s32 i;
|
||||||
|
|
||||||
gGpuRegBufferLocked = TRUE;
|
sGpuRegBufferLocked = TRUE;
|
||||||
|
|
||||||
for (i = 0; i < GPU_REG_BUF_SIZE && gGpuRegWaitingList[i] != EMPTY_SLOT; i++) {
|
for (i = 0; i < GPU_REG_BUF_SIZE && sGpuRegWaitingList[i] != EMPTY_SLOT; i++) {
|
||||||
if (gGpuRegWaitingList[i] == regOffset) {
|
if (sGpuRegWaitingList[i] == regOffset) {
|
||||||
gGpuRegBufferLocked = FALSE;
|
sGpuRegBufferLocked = FALSE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gGpuRegWaitingList[i] = regOffset;
|
sGpuRegWaitingList[i] = regOffset;
|
||||||
gGpuRegBufferLocked = FALSE;
|
sGpuRegBufferLocked = FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -97,17 +97,17 @@ void SetGpuReg_ForcedBlank(u8 regOffset, u16 value)
|
|||||||
} else {
|
} else {
|
||||||
s32 i;
|
s32 i;
|
||||||
|
|
||||||
gGpuRegBufferLocked = TRUE;
|
sGpuRegBufferLocked = TRUE;
|
||||||
|
|
||||||
for (i = 0; i < GPU_REG_BUF_SIZE && gGpuRegWaitingList[i] != EMPTY_SLOT; i++) {
|
for (i = 0; i < GPU_REG_BUF_SIZE && sGpuRegWaitingList[i] != EMPTY_SLOT; i++) {
|
||||||
if (gGpuRegWaitingList[i] == regOffset) {
|
if (sGpuRegWaitingList[i] == regOffset) {
|
||||||
gGpuRegBufferLocked = FALSE;
|
sGpuRegBufferLocked = FALSE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gGpuRegWaitingList[i] = regOffset;
|
sGpuRegWaitingList[i] = regOffset;
|
||||||
gGpuRegBufferLocked = FALSE;
|
sGpuRegBufferLocked = FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -137,29 +137,29 @@ void ClearGpuRegBits(u8 regOffset, u16 mask)
|
|||||||
|
|
||||||
static void SyncRegIE()
|
static void SyncRegIE()
|
||||||
{
|
{
|
||||||
if (gShouldSyncRegIE) {
|
if (sShouldSyncRegIE) {
|
||||||
u16 temp = REG_IME;
|
u16 temp = REG_IME;
|
||||||
REG_IME = 0;
|
REG_IME = 0;
|
||||||
REG_IE = gRegIE;
|
REG_IE = sRegIE;
|
||||||
REG_IME = temp;
|
REG_IME = temp;
|
||||||
gShouldSyncRegIE = FALSE;
|
sShouldSyncRegIE = FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnableInterrupts(u16 mask)
|
void EnableInterrupts(u16 mask)
|
||||||
{
|
{
|
||||||
gRegIE |= mask;
|
sRegIE |= mask;
|
||||||
gShouldSyncRegIE = TRUE;
|
sShouldSyncRegIE = TRUE;
|
||||||
SyncRegIE();
|
SyncRegIE();
|
||||||
UpdateRegDispstatIntrBits(gRegIE);
|
UpdateRegDispstatIntrBits(sRegIE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DisableInterrupts(u16 mask)
|
void DisableInterrupts(u16 mask)
|
||||||
{
|
{
|
||||||
gRegIE &= ~mask;
|
sRegIE &= ~mask;
|
||||||
gShouldSyncRegIE = TRUE;
|
sShouldSyncRegIE = TRUE;
|
||||||
SyncRegIE();
|
SyncRegIE();
|
||||||
UpdateRegDispstatIntrBits(gRegIE);
|
UpdateRegDispstatIntrBits(sRegIE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void UpdateRegDispstatIntrBits(u16 regIE)
|
static void UpdateRegDispstatIntrBits(u16 regIE)
|
||||||
|
26
src/malloc.c
26
src/malloc.c
@ -1,7 +1,7 @@
|
|||||||
#include "global.h"
|
#include "global.h"
|
||||||
|
|
||||||
extern void *gHeapStart;
|
static void *sHeapStart;
|
||||||
extern u32 gHeapSize;
|
static u32 sHeapSize;
|
||||||
|
|
||||||
#define MALLOC_SYSTEM_ID 0xA3A3
|
#define MALLOC_SYSTEM_ID 0xA3A3
|
||||||
|
|
||||||
@ -15,10 +15,10 @@ struct MemBlock {
|
|||||||
// Size of the block (not including this header struct).
|
// Size of the block (not including this header struct).
|
||||||
u32 size;
|
u32 size;
|
||||||
|
|
||||||
// Previous block pointer. Equals gHeapStart if this is the first block.
|
// Previous block pointer. Equals sHeapStart if this is the first block.
|
||||||
struct MemBlock *prev;
|
struct MemBlock *prev;
|
||||||
|
|
||||||
// Next block pointer. Equals gHeapStart if this is the last block.
|
// Next block pointer. Equals sHeapStart if this is the last block.
|
||||||
struct MemBlock *next;
|
struct MemBlock *next;
|
||||||
|
|
||||||
// Data in the memory block. (Arrays of length 0 are a GNU extension.)
|
// Data in the memory block. (Arrays of length 0 are a GNU extension.)
|
||||||
@ -169,40 +169,40 @@ bool32 CheckMemBlockInternal(void *heapStart, void *pointer)
|
|||||||
|
|
||||||
void InitHeap(void *heapStart, u32 heapSize)
|
void InitHeap(void *heapStart, u32 heapSize)
|
||||||
{
|
{
|
||||||
gHeapStart = heapStart;
|
sHeapStart = heapStart;
|
||||||
gHeapSize = heapSize;
|
sHeapSize = heapSize;
|
||||||
PutFirstMemBlockHeader(heapStart, heapSize);
|
PutFirstMemBlockHeader(heapStart, heapSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
void *Alloc(u32 size)
|
void *Alloc(u32 size)
|
||||||
{
|
{
|
||||||
AllocInternal(gHeapStart, size);
|
AllocInternal(sHeapStart, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void *AllocZeroed(u32 size)
|
void *AllocZeroed(u32 size)
|
||||||
{
|
{
|
||||||
AllocZeroedInternal(gHeapStart, size);
|
AllocZeroedInternal(sHeapStart, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Free(void *pointer)
|
void Free(void *pointer)
|
||||||
{
|
{
|
||||||
FreeInternal(gHeapStart, pointer);
|
FreeInternal(sHeapStart, pointer);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool32 CheckMemBlock(void *pointer)
|
bool32 CheckMemBlock(void *pointer)
|
||||||
{
|
{
|
||||||
return CheckMemBlockInternal(gHeapStart, pointer);
|
return CheckMemBlockInternal(sHeapStart, pointer);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool32 CheckHeap()
|
bool32 CheckHeap()
|
||||||
{
|
{
|
||||||
struct MemBlock *pos = (struct MemBlock *)gHeapStart;
|
struct MemBlock *pos = (struct MemBlock *)sHeapStart;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (!CheckMemBlockInternal(gHeapStart, pos->data))
|
if (!CheckMemBlockInternal(sHeapStart, pos->data))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
pos = pos->next;
|
pos = pos->next;
|
||||||
} while (pos != (struct MemBlock *)gHeapStart);
|
} while (pos != (struct MemBlock *)sHeapStart);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
23
sym_bss.txt
23
sym_bss.txt
@ -1,12 +1,9 @@
|
|||||||
gUnknown_03000000: @ 3000000
|
gUnknown_03000000: @ 3000000
|
||||||
.space 0x4
|
.space 0x4
|
||||||
|
|
||||||
gHeapStart: @ 3000004
|
.include "src/malloc.o"
|
||||||
.space 0x4
|
|
||||||
|
|
||||||
gHeapSize: @ 3000008
|
|
||||||
.space 0x8
|
|
||||||
|
|
||||||
|
.align 4
|
||||||
gDma3Requests: @ 3000010
|
gDma3Requests: @ 3000010
|
||||||
.space 0xC
|
.space 0xC
|
||||||
|
|
||||||
@ -25,21 +22,9 @@ gDma3ManagerLocked: @ 3000810
|
|||||||
gDma3RequestCursor: @ 3000811
|
gDma3RequestCursor: @ 3000811
|
||||||
.space 0x7
|
.space 0x7
|
||||||
|
|
||||||
gGpuRegBuffer: @ 3000818
|
.include "src/gpu_regs.o"
|
||||||
.space 0x60
|
|
||||||
|
|
||||||
gGpuRegWaitingList: @ 3000878
|
|
||||||
.space 0x60
|
|
||||||
|
|
||||||
gGpuRegBufferLocked: @ 30008D8
|
|
||||||
.space 0x1
|
|
||||||
|
|
||||||
gShouldSyncRegIE: @ 30008D9
|
|
||||||
.space 0x1
|
|
||||||
|
|
||||||
gRegIE: @ 30008DA
|
|
||||||
.space 0x6
|
|
||||||
|
|
||||||
|
.align 4
|
||||||
gUnknown_030008E0: @ 30008E0
|
gUnknown_030008E0: @ 30008E0
|
||||||
.space 0x18
|
.space 0x18
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user