Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/quicknes/nes_emu/Nes_Cart.h
2 views
1
2
// NES cartridge data (PRG, CHR, mapper)
3
4
// Nes_Emu 0.7.0
5
6
#ifndef NES_CART_H
7
#define NES_CART_H
8
9
#include "blargg_common.h"
10
#include "abstract_file.h"
11
12
class Nes_Cart {
13
typedef BOOST::uint8_t byte;
14
public:
15
Nes_Cart();
16
~Nes_Cart();
17
18
// Load iNES file
19
blargg_err_t load_ines( Auto_File_Reader );
20
static const char not_ines_file [];
21
22
// Load iNES file and apply IPS patch
23
blargg_err_t load_patched_ines( Auto_File_Reader, Auto_File_Reader ips_patch );
24
25
// Apply IPS patches to specific parts
26
blargg_err_t apply_ips_to_prg( Auto_File_Reader ips_patch );
27
blargg_err_t apply_ips_to_chr( Auto_File_Reader ips_patch );
28
29
// to do: support UNIF?
30
31
// True if data is currently loaded
32
bool loaded() const { return prg_ != NULL; }
33
34
// Free data
35
void clear();
36
37
// True if cartridge claims to have battery-backed memory
38
bool has_battery_ram() const;
39
40
// Size of PRG data
41
long prg_size() const { return prg_size_; }
42
43
// Size of CHR data
44
long chr_size() const { return chr_size_; }
45
46
// Change size of PRG (code) data
47
blargg_err_t resize_prg( long );
48
49
// Change size of CHR (graphics) data
50
blargg_err_t resize_chr( long );
51
52
// Set mapper and information bytes. LSB and MSB are the standard iNES header
53
// bytes at offsets 6 and 7.
54
void set_mapper( int mapper_lsb, int mapper_msb );
55
56
unsigned mapper_data() const { return mapper; }
57
58
// Initial mirroring setup
59
int mirroring() const { return mapper & 0x09; }
60
61
// iNES mapper code
62
int mapper_code() const;
63
64
// Pointer to beginning of PRG data
65
byte * prg() { return prg_; }
66
byte const* prg() const { return prg_; }
67
68
// Pointer to beginning of CHR data
69
byte * chr() { return chr_; }
70
byte const* chr() const { return chr_; }
71
72
// End of public interface
73
private:
74
enum { bank_size = 8 * 1024L }; // bank sizes must be a multiple of this
75
byte* prg_;
76
byte* chr_;
77
long prg_size_;
78
long chr_size_;
79
unsigned mapper;
80
long round_to_bank_size( long n );
81
};
82
83
inline bool Nes_Cart::has_battery_ram() const { return mapper & 0x02; }
84
85
inline void Nes_Cart::set_mapper( int mapper_lsb, int mapper_msb )
86
{
87
mapper = mapper_msb * 0x100 + mapper_lsb;
88
}
89
90
inline int Nes_Cart::mapper_code() const { return ((mapper >> 8) & 0xf0) | ((mapper >> 4) & 0x0f); }
91
92
#endif
93
94
95