ScreenScrollManager cleanup

This commit is contained in:
Fexty12573 2024-06-13 15:37:42 +02:00
parent 91ba1a2da7
commit dca10e7018
16 changed files with 57 additions and 105 deletions

View File

@ -1,7 +1,7 @@
#ifndef POKEPLATINUM_STRUCT_OV100_021D4E3C_H
#define POKEPLATINUM_STRUCT_OV100_021D4E3C_H
#include "struct_decls/struct_02013BE0_decl.h"
#include "screen_scroll_manager.h"
#include "struct_decls/sys_task.h"
typedef struct {

View File

@ -1,7 +1,7 @@
#ifndef POKEPLATINUM_STRUCT_OV104_0223F094_H
#define POKEPLATINUM_STRUCT_OV104_0223F094_H
#include "struct_decls/struct_02013BE0_decl.h"
#include "screen_scroll_manager.h"
#include "struct_decls/sys_task.h"
typedef struct {

View File

@ -1,8 +1,7 @@
#ifndef POKEPLATINUM_UNK_02013B10_H
#define POKEPLATINUM_UNK_02013B10_H
#ifndef POKEPLATINUM_SCREEN_SCROLL_MANAGER_H
#define POKEPLATINUM_SCREEN_SCROLL_MANAGER_H
#include "struct_decls/struct_02013B10_decl.h"
#include "struct_decls/struct_02013BE0_decl.h"
#include "struct_decls/sys_task.h"
#include "constants/heap.h"
#define BUFFER_MANAGER_MODE_SINGLE 0
@ -17,6 +16,28 @@ enum BufferManagerDMAType {
BUFFER_MANAGER_DMA_TYPE_32BIT = 1
};
typedef struct BufferManager {
void *buffers[2];
u8 writeBuffer;
u8 mode;
u8 padding[2];
} BufferManager;
typedef struct ScreenScrollManager {
u32 buffer1[SCREEN_SCROLL_MANAGER_BUFFER_SIZE];
u32 buffer2[SCREEN_SCROLL_MANAGER_BUFFER_SIZE];
BufferManager *bufferManager;
SysTask *scrollTask;
BOOL unused;
s16 sineTable[SCREEN_SCROLL_MANAGER_BUFFER_SIZE];
u8 start;
u8 end;
u32 offsetRegisterAddr;
u32 initValue;
s16 scrollPos;
s16 scrollSpeed;
} ScreenScrollManager;
BufferManager *BufferManager_New(enum HeapId heapID, void *buffer1, void *buffer2);
void BufferManager_Delete(BufferManager *bufferManager);
void *BufferManager_GetWriteBuffer(const BufferManager *bufferManager);
@ -35,4 +56,4 @@ void ScreenScrollManager_SwapBuffers(ScreenScrollManager *screenScrollMgr);
void ScreenScrollManager_RestartDMA(ScreenScrollManager *screenScrollMgr);
void ScreenScrollManager_CreateSineTable(s16 *dest, u32 entryCount, u16 angleIncrement, fx32 amplitude);
#endif // POKEPLATINUM_UNK_02013B10_H
#endif // POKEPLATINUM_SCREEN_SCROLL_MANAGER_H

View File

@ -1,6 +0,0 @@
#ifndef POKEPLATINUM_STRUCT_02013B10_DECL_H
#define POKEPLATINUM_STRUCT_02013B10_DECL_H
typedef struct BufferManager BufferManager;
#endif // POKEPLATINUM_STRUCT_02013B10_DECL_H

View File

@ -1,6 +0,0 @@
#ifndef POKEPLATINUM_STRUCT_02013BE0_DECL_H
#define POKEPLATINUM_STRUCT_02013BE0_DECL_H
typedef struct ScreenScrollManager ScreenScrollManager;
#endif // POKEPLATINUM_STRUCT_02013BE0_DECL_H

View File

@ -52,7 +52,7 @@ Static main
Object main.nef.p/src_unk_020131EC.c.o
Object main.nef.p/src_rtc.c.o
Object main.nef.p/src_unk_02013A04.c.o
Object main.nef.p/src_unk_02013B10.c.o
Object main.nef.p/src_screen_scroll_manager.c.o
Object main.nef.p/src_unk_02014000.c.o
Object main.nef.p/src_unk_020149F0.c.o
Object main.nef.p/src_unk_02014A84.c.o

View File

@ -48,7 +48,7 @@ pokeplatinum_c = files(
'unk_020131EC.c',
'rtc.c',
'unk_02013A04.c',
'unk_02013B10.c',
'screen_scroll_manager.c',
'unk_02014000.c',
'unk_020149F0.c',
'unk_02014A84.c',

View File

@ -3,7 +3,6 @@
#include "constants/heap.h"
#include "message.h"
#include "struct_decls/struct_02013BE0_decl.h"
#include "struct_decls/sys_task.h"
#include "struct_decls/struct_020203AC_decl.h"
#include "struct_decls/struct_02022550_decl.h"
@ -31,7 +30,7 @@
#include "string_template.h"
#include "unk_0200D9E8.h"
#include "unk_0200F174.h"
#include "unk_02013B10.h"
#include "screen_scroll_manager.h"
#include "heap.h"
#include "unk_02018340.h"
#include "unk_0201D670.h"

View File

@ -7,7 +7,6 @@
#include "struct_decls/struct_02009714_decl.h"
#include "struct_decls/struct_02009DC8_decl.h"
#include "struct_decls/struct_02009F38_decl.h"
#include "struct_decls/struct_02013B10_decl.h"
#include "struct_decls/sys_task.h"
#include "struct_decls/struct_020218BC_decl.h"
#include "struct_decls/struct_02022550_decl.h"
@ -27,7 +26,7 @@
#include "unk_0200A328.h"
#include "unk_0200A784.h"
#include "unk_0200D9E8.h"
#include "unk_02013B10.h"
#include "screen_scroll_manager.h"
#include "heap.h"
#include "unk_02018340.h"
#include "unk_0201D15C.h"

View File

@ -1,12 +1,11 @@
#include <nitro.h>
#include <string.h>
#include "struct_decls/struct_02013B10_decl.h"
#include "struct_decls/sys_task.h"
#include "unk_02005474.h"
#include "unk_0200D9E8.h"
#include "unk_02013B10.h"
#include "screen_scroll_manager.h"
#include "heap.h"
#include "overlay005/hblank_system.h"
#include "overlay005/ov5_021EF4BC.h"

View File

@ -5,8 +5,6 @@
#include "struct_decls/struct_02002F38_decl.h"
#include "struct_decls/sprite_decl.h"
#include "struct_decls/struct_02013B10_decl.h"
#include "struct_decls/struct_02013BE0_decl.h"
#include "struct_decls/sys_task.h"
#include "overlay012/struct_ov12_0221FCDC_decl.h"
@ -21,7 +19,7 @@
#include "unk_0200762C.h"
#include "unk_0200C6E4.h"
#include "unk_0200D9E8.h"
#include "unk_02013B10.h"
#include "screen_scroll_manager.h"
#include "heap.h"
#include "unk_0201F834.h"
#include "unk_020218BC.h"

View File

@ -8,7 +8,6 @@
#include "struct_decls/struct_02009DC8_decl.h"
#include "message.h"
#include "struct_decls/struct_02013A04_decl.h"
#include "struct_decls/struct_02013B10_decl.h"
#include "struct_decls/struct_02018340_decl.h"
#include "struct_decls/sys_task.h"
#include "struct_decls/struct_020218BC_decl.h"
@ -42,7 +41,7 @@
#include "unk_0200DA60.h"
#include "unk_0200F174.h"
#include "unk_02013A04.h"
#include "unk_02013B10.h"
#include "screen_scroll_manager.h"
#include "heap.h"
#include "unk_02018340.h"
#include "unk_0201D670.h"

View File

@ -3,7 +3,6 @@
#include "inlines.h"
#include "struct_decls/struct_02013B10_decl.h"
#include "struct_decls/sys_task.h"
#include "struct_defs/struct_0205AA50.h"
@ -13,7 +12,7 @@
#include "unk_0200679C.h"
#include "unk_0200D9E8.h"
#include "unk_02013B10.h"
#include "screen_scroll_manager.h"
#include "heap.h"
#include "unk_0201CCF0.h"
#include "overlay100/ov100_021D4E04.h"

View File

@ -1,7 +1,6 @@
#include <nitro.h>
#include <string.h>
#include "struct_decls/struct_02013B10_decl.h"
#include "struct_decls/sys_task.h"
#include "struct_defs/struct_0205AA50.h"
@ -11,7 +10,7 @@
#include "overlay104/struct_ov104_0223F1B4.h"
#include "unk_0200D9E8.h"
#include "unk_02013B10.h"
#include "screen_scroll_manager.h"
#include "heap.h"
#include "unk_02018340.h"
#include "overlay104/ov104_0223E894.h"

View File

@ -9,7 +9,6 @@
#include "struct_decls/struct_02009714_decl.h"
#include "struct_decls/struct_02009DC8_decl.h"
#include "message.h"
#include "struct_decls/struct_02013B10_decl.h"
#include "struct_decls/struct_02015920_decl.h"
#include "struct_decls/struct_02018340_decl.h"
#include "struct_decls/sys_task.h"
@ -47,7 +46,7 @@
#include "unk_0200D9E8.h"
#include "unk_0200DA60.h"
#include "unk_0200F174.h"
#include "unk_02013B10.h"
#include "screen_scroll_manager.h"
#include "unk_02015920.h"
#include "unk_02017728.h"
#include "heap.h"

View File

@ -5,31 +5,9 @@
#include "struct_decls/sys_task.h"
#include "unk_0200D9E8.h"
#include "unk_02013B10.h"
#include "screen_scroll_manager.h"
#include "heap.h"
typedef struct BufferManager {
void *buffers[2];
u8 writeBuffer;
u8 mode;
u8 padding[2];
} BufferManager;
typedef struct ScreenScrollManager {
u32 buffer1[SCREEN_SCROLL_MANAGER_BUFFER_SIZE];
u32 buffer2[SCREEN_SCROLL_MANAGER_BUFFER_SIZE];
BufferManager *bufferManager;
SysTask *scrollTask;
BOOL unused;
s16 sineTable[SCREEN_SCROLL_MANAGER_BUFFER_SIZE];
u8 start;
u8 end;
u32 offsetRegisterAddr;
u32 initValue;
s16 scrollPos;
s16 scrollSpeed;
} ScreenScrollManager;
static void ScreenScrollManager_StopDMA(void);
static void ScreenScrollManager_StartDMA(const ScreenScrollManager *screenScrollMgr);
static void ScreenScrollManager_UpdateScrollX(SysTask *task, void *param);
@ -50,9 +28,7 @@ BufferManager *BufferManager_New(enum HeapId heapID, void *buffer1, void *buffer
void BufferManager_Delete(BufferManager *bufferManager)
{
GF_ASSERT(bufferManager);
Heap_FreeToHeap(bufferManager);
bufferManager = NULL;
}
void *BufferManager_GetWriteBuffer(const BufferManager *bufferManager)
@ -153,15 +129,13 @@ void ScreenScrollManager_ScrollY(ScreenScrollManager *screenScrollMgr, u8 start,
void ScreenScrollManager_Stop(ScreenScrollManager *screenScrollMgr)
{
void *writeBuffer;
GF_ASSERT(screenScrollMgr);
if (screenScrollMgr->scrollTask) {
SysTask_Done(screenScrollMgr->scrollTask);
screenScrollMgr->scrollTask = NULL;
writeBuffer = BufferManager_GetWriteBuffer(screenScrollMgr->bufferManager);
void *writeBuffer = BufferManager_GetWriteBuffer(screenScrollMgr->bufferManager);
memset(writeBuffer, screenScrollMgr->initValue, sizeof(u32) * SCREEN_SCROLL_MANAGER_BUFFER_SIZE);
}
}
@ -181,8 +155,6 @@ void *ScreenScrollManager_GetWriteBuffer(ScreenScrollManager *screenScrollMgr)
void ScreenScrollManager_SwapBuffers(ScreenScrollManager *screenScrollMgr)
{
void *writeBuffer;
if (screenScrollMgr == NULL) {
return;
}
@ -190,7 +162,7 @@ void ScreenScrollManager_SwapBuffers(ScreenScrollManager *screenScrollMgr)
if (screenScrollMgr->scrollTask) {
BufferManager_SwapBuffers(screenScrollMgr->bufferManager);
writeBuffer = BufferManager_GetWriteBuffer(screenScrollMgr->bufferManager);
void *writeBuffer = BufferManager_GetWriteBuffer(screenScrollMgr->bufferManager);
MI_CpuFill32(writeBuffer, screenScrollMgr->initValue, sizeof(u32) * SCREEN_SCROLL_MANAGER_BUFFER_SIZE);
}
}
@ -209,10 +181,8 @@ void ScreenScrollManager_RestartDMA(ScreenScrollManager *screenScrollMgr)
void ScreenScrollManager_CreateSineTable(s16 *dest, u32 entryCount, u16 angleIncrement, fx32 amplitude)
{
int i;
u16 angle = 0;
for (i = 0; i < entryCount; i++) {
for (int i = 0; i < entryCount; i++) {
dest[i] = FX_Mul(FX_SinIdx(angle), amplitude) >> FX32_SHIFT;
angle += angleIncrement;
}
@ -221,18 +191,12 @@ void ScreenScrollManager_CreateSineTable(s16 *dest, u32 entryCount, u16 angleInc
static void ScreenScrollManager_UpdateScrollX(SysTask *task, void *param)
{
ScreenScrollManager *screenScrollMgr = param;
int i;
u32 *writeBuffer;
u8 scrollPos;
s16 xOff;
u16 yOff;
u32 *writeBuffer = BufferManager_GetWriteBuffer(screenScrollMgr->bufferManager);
u8 scrollPos = screenScrollMgr->scrollPos / SCREEN_SCROLL_MANAGER_SCALING_FACTOR;
writeBuffer = BufferManager_GetWriteBuffer(screenScrollMgr->bufferManager);
scrollPos = screenScrollMgr->scrollPos / SCREEN_SCROLL_MANAGER_SCALING_FACTOR;
for (i = screenScrollMgr->start; i <= screenScrollMgr->end; i++) {
xOff = writeBuffer[i] & 0xffff;
yOff = writeBuffer[i] >> 16;
for (int i = screenScrollMgr->start; i <= screenScrollMgr->end; i++) {
s16 xOff = writeBuffer[i] & 0xffff;
u16 yOff = writeBuffer[i] >> 16;
xOff += screenScrollMgr->sineTable[scrollPos];
writeBuffer[i] = (yOff << 16) | (xOff & 0xffff);
@ -243,28 +207,20 @@ static void ScreenScrollManager_UpdateScrollX(SysTask *task, void *param)
if (screenScrollMgr->scrollPos >= SCREEN_SCROLL_MANAGER_MAX_SCROLL) {
screenScrollMgr->scrollPos %= SCREEN_SCROLL_MANAGER_MAX_SCROLL;
} else {
if (screenScrollMgr->scrollPos < 0) {
screenScrollMgr->scrollPos += SCREEN_SCROLL_MANAGER_MAX_SCROLL;
}
} else if (screenScrollMgr->scrollPos < 0) {
screenScrollMgr->scrollPos += SCREEN_SCROLL_MANAGER_MAX_SCROLL;
}
}
static void ScreenScrollManager_UpdateScrollY(SysTask *task, void *param)
{
ScreenScrollManager *screenScrollMgr = param;
int i;
u32 *writeBuffer;
u8 scrollPos;
s16 xOff;
u16 yOff;
u32 *writeBuffer = BufferManager_GetWriteBuffer(screenScrollMgr->bufferManager);
u8 scrollPos = screenScrollMgr->scrollPos / SCREEN_SCROLL_MANAGER_SCALING_FACTOR;
writeBuffer = BufferManager_GetWriteBuffer(screenScrollMgr->bufferManager);
scrollPos = screenScrollMgr->scrollPos / SCREEN_SCROLL_MANAGER_SCALING_FACTOR;
for (i = screenScrollMgr->start; i <= screenScrollMgr->end; i++) {
xOff = writeBuffer[i] & 0xffff;
yOff = writeBuffer[i] >> 16;
for (int i = screenScrollMgr->start; i <= screenScrollMgr->end; i++) {
s16 xOff = writeBuffer[i] & 0xffff;
u16 yOff = writeBuffer[i] >> 16;
yOff += screenScrollMgr->sineTable[(scrollPos + 180) % SCREEN_SCROLL_MANAGER_BUFFER_SIZE];
writeBuffer[i] = (yOff << 16) | (xOff & 0xffff);
@ -275,10 +231,8 @@ static void ScreenScrollManager_UpdateScrollY(SysTask *task, void *param)
if (screenScrollMgr->scrollPos >= SCREEN_SCROLL_MANAGER_MAX_SCROLL) {
screenScrollMgr->scrollPos %= SCREEN_SCROLL_MANAGER_MAX_SCROLL;
} else {
if (screenScrollMgr->scrollPos < 0) {
screenScrollMgr->scrollPos += SCREEN_SCROLL_MANAGER_MAX_SCROLL;
}
} else if (screenScrollMgr->scrollPos < 0) {
screenScrollMgr->scrollPos += SCREEN_SCROLL_MANAGER_MAX_SCROLL;
}
}
@ -289,10 +243,8 @@ void ScreenScrollManager_StopDMA(void)
void ScreenScrollManager_StartDMA(const ScreenScrollManager *screenScrollManager)
{
const void *readBuffer;
GF_ASSERT(screenScrollManager);
readBuffer = BufferManager_GetReadBuffer(screenScrollManager->bufferManager);
const void *readBuffer = BufferManager_GetReadBuffer(screenScrollManager->bufferManager);
DC_FlushRange(readBuffer, sizeof(u32) * SCREEN_SCROLL_MANAGER_BUFFER_SIZE);
BufferManager_StartDMA(readBuffer, (void *)screenScrollManager->offsetRegisterAddr, sizeof(u32), BUFFER_MANAGER_DMA_TYPE_32BIT);