Skip to content

Commit ba92cc9

Browse files
committed
pagemanager: mostly map out structs
1 parent 78917bd commit ba92cc9

File tree

3 files changed

+82
-20
lines changed

3 files changed

+82
-20
lines changed

game/overlord/jak3/iso_structs.h

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,17 @@ namespace jak3 {
99
enum class EFileComp { MODE0, MODE1, KNOWN_NOT_BLZO };
1010

1111
struct ISOBuffer {
12+
public:
13+
void AdjustDataLength(int);
14+
void AdvanceCurrentData(int);
15+
void SetDataLength(int length) { m_nDataLength = length; }
16+
int GetDataLength() { return m_nDataLength; }
17+
18+
private:
1219
CPageManager::CPageList* m_pActivePages;
1320
u8* decomp_buffer;
1421
int decompressed_size;
15-
16-
void AdjustDataLength(int);
17-
void AdvanceCurrentData(int);
22+
int m_nDataLength;
1823
};
1924

2025
struct VagDirEntryJak3 {

game/overlord/jak3/pagemanager.cpp

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
#include "pagemanager.h"
22

3+
#include <cstring>
4+
5+
#include "common/util/Assert.h"
6+
37
#include "game/sce/iop.h"
48

59
namespace jak3 {
@@ -28,12 +32,12 @@ CPageManager::CPage::CPage(u8* start, u8* end, int page_id) {
2832
m_uPageBit = 1 << (page_id & 0x1f);
2933
m_nUnk = 0;
3034
m_pData = start;
31-
m_pEnd = end;
35+
m_pDataEnd = end;
3236
m_nRefCount = 0;
3337
m_nPageID = page_id;
3438
m_nDmaRefCount = 0;
3539
m_nAllocState = 0;
36-
m_nUnk2 = 0;
40+
m_nUnk = 0;
3741
}
3842

3943
int CPageManager::CPage::AddRef() {
@@ -42,7 +46,7 @@ int CPageManager::CPage::AddRef() {
4246
CpuSuspendIntr(&state);
4347

4448
if (m_nAllocState == 1 && m_pPageList != nullptr) {
45-
m_pPageList->m_nRefCount++;
49+
m_pPageList->m_nPageRefCount++;
4650
m_nRefCount++;
4751
ret = m_nRefCount;
4852
}
@@ -58,7 +62,7 @@ int CPageManager::CPage::ReleaseRef() {
5862
CpuSuspendIntr(&state);
5963

6064
if (m_nAllocState == 1 && m_pPageList != nullptr) {
61-
m_pPageList->m_nRefCount--;
65+
m_pPageList->m_nPageRefCount--;
6266
m_nRefCount--;
6367
ret = m_nRefCount;
6468
}
@@ -74,7 +78,7 @@ int CPageManager::CPage::AddDmaRef() {
7478
CpuSuspendIntr(&state);
7579

7680
if (m_nAllocState == 1 && m_pPageList != nullptr) {
77-
m_pPageList->m_nDmaRefCount++;
81+
m_pPageList->m_nPageDmaRefCount++;
7882
m_nDmaRefCount++;
7983
ret = m_nDmaRefCount;
8084
}
@@ -90,7 +94,7 @@ int CPageManager::CPage::ReleaseDmaRef() {
9094
CpuSuspendIntr(&state);
9195

9296
if (m_nAllocState == 1 && m_pPageList != nullptr) {
93-
m_pPageList->m_nDmaRefCount--;
97+
m_pPageList->m_nPageDmaRefCount--;
9498
m_nDmaRefCount--;
9599
ret = m_nDmaRefCount;
96100
}
@@ -101,10 +105,31 @@ int CPageManager::CPage::ReleaseDmaRef() {
101105
}
102106

103107
void CPageManager::CPage::FromPagesCopy(u8* pInPageData, u8* pDest, int nNumBytes) {
108+
int nInputPageLengthLeft;
109+
CPage* page = this;
110+
104111
if (nNumBytes <= 0) {
105112
return;
106113
}
107114

115+
for (;;) {
116+
nInputPageLengthLeft = (uintptr_t)page->m_pDataEnd + (1 - (uintptr_t)pInPageData);
117+
if (nInputPageLengthLeft <= nNumBytes) {
118+
break;
119+
}
120+
121+
if (nNumBytes <= 0) {
122+
nNumBytes -= nInputPageLengthLeft;
123+
return;
124+
}
125+
126+
ASSERT(m_pNextPage != nullptr);
127+
128+
page = page->m_pNextPage;
129+
pInPageData = page->m_pData;
130+
}
131+
132+
memcpy(pDest, pInPageData, nNumBytes);
108133
}
109134

110135
void CPageManager::Initialize() {
@@ -125,8 +150,8 @@ int CPageManager::CCache::Initialize() {
125150

126151
m_nNumFree = 29;
127152

128-
/* TODO FIXME */
129153
for (auto& pl : m_aPageLists) {
154+
pl = {};
130155
}
131156

132157
int page_idx = 0;

game/overlord/jak3/pagemanager.h

Lines changed: 42 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ class CPageManager {
77
public:
88
class CPageList;
99

10+
enum class AllocState {
11+
EPLAS_FREE,
12+
EPLAS_ALLOCATED,
13+
EPLAS_FILLED,
14+
};
15+
1016
class CPage {
1117
public:
1218
CPage() = default;
@@ -16,19 +22,28 @@ class CPageManager {
1622
int AddDmaRef();
1723
int ReleaseDmaRef();
1824
void FromPagesCopy(u8* pInPageData, u8* pDest, int nNumBytes);
25+
u8* GetStart() const;
26+
u8* GetEnd() const;
27+
bool IsReferenced() { return m_nRefCount != 0 || m_nDmaRefCount != 0; }
28+
bool IsFilled() const; // Exists as string in july version, not sure on impl
29+
bool IsAllocated() const;
30+
void SetPageInputState(int state); // enum
31+
int GetPageCacheIndex() const;
32+
CPage* GetNextPage() const;
33+
CPage* GetPrevPage() const;
1934

2035
private:
2136
CPage* m_pNextPage;
22-
u32 m_uPageBit;
23-
u32 m_nUnk;
37+
CPage* m_pPrevPage;
2438
CPageList* m_pPageList;
25-
u8* m_pData;
26-
u8* m_pEnd; // maybe
2739
int m_nRefCount;
2840
int m_nDmaRefCount;
29-
int m_nPageID;
3041
int m_nAllocState;
31-
int m_nUnk2;
42+
u32 m_nUnk;
43+
u8* m_pData;
44+
u8* m_pDataEnd;
45+
int m_nPageID;
46+
u32 m_uPageBit;
3247
};
3348

3449
class CPageList {
@@ -39,10 +54,25 @@ class CPageManager {
3954
int CancelActivePages();
4055
CPage* StepActivePage();
4156
void GarbageCollect();
57+
CPage* GetCurrentActivePage() const;
58+
int GetNumRawPages() const;
59+
int GetFirstRawPage() const;
60+
int GetNumUnsteppedPages() const;
61+
bool IsReferenced() { return m_nPageRefCount != 0 || m_nPageDmaRefCount != 0; }
62+
int GetNumActivePages() const;
4263

4364
private:
44-
int m_nRefCount;
45-
int m_nDmaRefCount;
65+
CPage* m_pFirstPage;
66+
CPage* m_pLastPage;
67+
CPage* m_pFirstACtivePage;
68+
CPage* m_pLastActivePage;
69+
CPage* m_pCurrentActivePage;
70+
int m_nNumPages;
71+
int m_nNumActivePages;
72+
int m_nNumUnsteppedPages;
73+
int m_nPageRefCount;
74+
int m_nPageDmaRefCount;
75+
int m_nAllocState;
4676
};
4777

4878
void Initialize();
@@ -60,14 +90,16 @@ class CPageManager {
6090
int Initialize();
6191

6292
private:
63-
int m_nEventFlag;
6493
void* m_paCache;
6594
CPageList m_aPageLists[29];
6695
CPage m_aPages[29];
96+
int m_nNumFree;
97+
u32 m_Unk;
6798
u32 m_uAllocatedPageMap;
99+
int m_nEventFlag;
68100
u32 m_uFreePageMap;
69-
int m_nNumFree;
70101
};
102+
71103
CCache m_Cache;
72104
};
73105

0 commit comments

Comments
 (0)