Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/libsnes/bsnes/snes/cpu/cpu.hpp
2 views
1
struct CPU : public Processor, public CPUcore, public PPUcounter {
2
uint8 *wram; //[128 * 1024];
3
4
function<uint8 (unsigned)> read_wram;
5
function<void (unsigned, uint8)> write_wram;
6
7
enum : bool { Threaded = true };
8
array<Processor*> coprocessors;
9
alwaysinline void step(unsigned clocks);
10
alwaysinline void synchronize_smp();
11
void synchronize_ppu();
12
void synchronize_coprocessors();
13
void synchronize_controllers();
14
15
uint8 port_read(uint2 port) const;
16
void port_write(uint2 port, uint8 data);
17
18
uint8 pio();
19
bool joylatch();
20
alwaysinline bool interrupt_pending() { return status.interrupt_pending; }
21
22
void enter();
23
void enable();
24
void power();
25
void reset();
26
27
void serialize(serializer&);
28
CPU();
29
~CPU();
30
void initialize();
31
32
privileged:
33
#include "dma/dma.hpp"
34
#include "memory/memory.hpp"
35
#include "mmio/mmio.hpp"
36
#include "timing/timing.hpp"
37
38
uint8 cpu_version;
39
40
struct Status {
41
bool interrupt_pending;
42
43
unsigned clock_count;
44
unsigned line_clocks;
45
46
//timing
47
bool irq_lock;
48
49
unsigned dram_refresh_position;
50
bool dram_refreshed;
51
52
unsigned hdma_init_position;
53
bool hdma_init_triggered;
54
55
unsigned hdma_position;
56
bool hdma_triggered;
57
58
bool nmi_valid;
59
bool nmi_line;
60
bool nmi_transition;
61
bool nmi_pending;
62
bool nmi_hold;
63
64
bool irq_valid;
65
bool irq_line;
66
bool irq_transition;
67
bool irq_pending;
68
bool irq_hold;
69
70
bool reset_pending;
71
72
//DMA
73
bool dma_active;
74
unsigned dma_counter;
75
unsigned dma_clocks;
76
bool dma_pending;
77
bool hdma_pending;
78
bool hdma_mode; //0 = init, 1 = run
79
80
//auto joypad polling
81
bool auto_joypad_active;
82
bool auto_joypad_latch;
83
unsigned auto_joypad_counter;
84
unsigned auto_joypad_clock;
85
86
//MMIO
87
//$2140-217f
88
uint8 port[4];
89
90
//$2181-$2183
91
uint17 wram_addr;
92
93
//$4016-$4017
94
bool joypad_strobe_latch;
95
uint32 joypad1_bits;
96
uint32 joypad2_bits;
97
98
//$4200
99
bool nmi_enabled;
100
bool hirq_enabled, virq_enabled;
101
bool auto_joypad_poll;
102
103
//$4201
104
uint8 pio;
105
106
//$4202-$4203
107
uint8 wrmpya;
108
uint8 wrmpyb;
109
110
//$4204-$4206
111
uint16 wrdiva;
112
uint8 wrdivb;
113
114
//$4207-$420a
115
uint9 hirq_pos;
116
uint9 virq_pos;
117
118
//$420d
119
unsigned rom_speed;
120
121
//$4214-$4217
122
uint16 rddiv;
123
uint16 rdmpy;
124
125
//$4218-$421f
126
uint16 joy1;
127
uint16 joy2;
128
uint16 joy3;
129
uint16 joy4;
130
} status;
131
132
struct ALU {
133
unsigned mpyctr;
134
unsigned divctr;
135
unsigned shift;
136
} alu;
137
138
static void Enter();
139
void op_step();
140
141
public:
142
struct Debugger {
143
hook<void (uint24)> op_exec;
144
hook<void (uint24)> op_read;
145
hook<void (uint24, uint8)> op_write;
146
hook<void ()> op_nmi;
147
hook<void ()> op_irq;
148
} debugger;
149
};
150
151
extern CPU cpu;
152
153