Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/libgambatte/src/mem/memptrs.h
2 views
1
/***************************************************************************
2
* Copyright (C) 2007-2010 by Sindre Aamås *
3
* [email protected] *
4
* *
5
* This program is free software; you can redistribute it and/or modify *
6
* it under the terms of the GNU General Public License version 2 as *
7
* published by the Free Software Foundation. *
8
* *
9
* This program is distributed in the hope that it will be useful, *
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12
* GNU General Public License version 2 for more details. *
13
* *
14
* You should have received a copy of the GNU General Public License *
15
* version 2 along with this program; if not, write to the *
16
* Free Software Foundation, Inc., *
17
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
18
***************************************************************************/
19
#ifndef MEMPTRS_H
20
#define MEMPTRS_H
21
22
#include "newstate.h"
23
24
namespace gambatte {
25
26
enum OamDmaSrc { OAM_DMA_SRC_ROM, OAM_DMA_SRC_SRAM, OAM_DMA_SRC_VRAM,
27
OAM_DMA_SRC_WRAM, OAM_DMA_SRC_INVALID, OAM_DMA_SRC_OFF };
28
29
class MemPtrs {
30
const unsigned char *rmem_[0x10];
31
unsigned char *wmem_[0x10];
32
33
unsigned char *romdata_[2];
34
unsigned char *wramdata_[2];
35
unsigned char *vrambankptr_;
36
unsigned char *rsrambankptr_;
37
unsigned char *wsrambankptr_;
38
unsigned char *memchunk_;
39
unsigned char *rambankdata_;
40
unsigned char *wramdataend_;
41
42
OamDmaSrc oamDmaSrc_;
43
44
int memchunk_len;
45
int memchunk_saveoffs;
46
int memchunk_savelen;
47
48
MemPtrs(const MemPtrs &);
49
MemPtrs & operator=(const MemPtrs &);
50
void disconnectOamDmaAreas();
51
unsigned char * rdisabledRamw() const { return wramdataend_ ; }
52
unsigned char * wdisabledRam() const { return wramdataend_ + 0x2000; }
53
public:
54
enum RamFlag { READ_EN = 1, WRITE_EN = 2, RTC_EN = 4 };
55
56
MemPtrs();
57
~MemPtrs();
58
void reset(unsigned rombanks, unsigned rambanks, unsigned wrambanks);
59
60
const unsigned char * rmem(unsigned area) const { return rmem_[area]; }
61
unsigned char * wmem(unsigned area) const { return wmem_[area]; }
62
unsigned char * vramdata() const { return rambankdata_ - 0x4000; }
63
unsigned char * vramdataend() const { return rambankdata_; }
64
unsigned char * romdata() const { return memchunk_ + 0x4000; }
65
unsigned char * romdata(unsigned area) const { return romdata_[area]; }
66
unsigned char * romdataend() const { return rambankdata_ - 0x4000; }
67
unsigned char * wramdata(unsigned area) const { return wramdata_[area]; }
68
unsigned char * wramdataend() const { return wramdataend_; }
69
unsigned char * rambankdata() const { return rambankdata_; }
70
unsigned char * rambankdataend() const { return wramdata_[0]; }
71
const unsigned char * rdisabledRam() const { return rdisabledRamw(); }
72
const unsigned char * rsrambankptr() const { return rsrambankptr_; }
73
unsigned char * wsrambankptr() const { return wsrambankptr_; }
74
unsigned char * vrambankptr() const { return vrambankptr_; }
75
OamDmaSrc oamDmaSrc() const { return oamDmaSrc_; }
76
77
void setRombank0(unsigned bank);
78
void setRombank(unsigned bank);
79
void setRambank(unsigned ramFlags, unsigned rambank);
80
void setVrambank(unsigned bank) { vrambankptr_ = vramdata() + bank * 0x2000ul - 0x8000; }
81
void setWrambank(unsigned bank);
82
void setOamDmaSrc(OamDmaSrc oamDmaSrc);
83
84
template<bool isReader>void SyncState(NewState *ns);
85
};
86
87
inline bool isCgb(const MemPtrs &memptrs) {
88
return memptrs.wramdataend() - memptrs.wramdata(0) == 0x8000;
89
}
90
91
}
92
93
#endif
94
95