yaze 0.2.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
addressing.cc
Go to the documentation of this file.
2
3namespace yaze {
4namespace emu {
5
6// adressing modes
7
8uint16_t Spc700::ind() {
9 read(PC);
10 return X | (PSW.P << 8);
11}
12
13uint16_t Spc700::idx() {
14 uint8_t pointer = ReadOpcode();
15 callbacks_.idle(false);
16 return read_word(((pointer + X) & 0xff) | (PSW.P << 8));
17}
18
19uint16_t Spc700::dpx() {
20 uint16_t res = ((ReadOpcode() + X) & 0xff) | (PSW.P << 8);
21 callbacks_.idle(false);
22 return res;
23}
24
25uint16_t Spc700::dp_y() {
26 uint16_t res = ((ReadOpcode() + Y) & 0xff) | (PSW.P << 8);
27 callbacks_.idle(false);
28 return res;
29}
30
31uint16_t Spc700::abs_x() {
32 uint16_t res = (ReadOpcodeWord() + X) & 0xffff;
33 callbacks_.idle(false);
34 return res;
35}
36
37uint16_t Spc700::abs_y() {
38 uint16_t res = (ReadOpcodeWord() + Y) & 0xffff;
39 callbacks_.idle(false);
40 return res;
41}
42
43uint16_t Spc700::idy() {
44 uint8_t pointer = ReadOpcode();
45 uint16_t adr = read_word(pointer | (PSW.P << 8));
46 callbacks_.idle(false);
47 return (adr + Y) & 0xffff;
48}
49
50uint16_t Spc700::dp_imm(uint8_t* srcVal) {
51 *srcVal = ReadOpcode();
52 return ReadOpcode() | (PSW.P << 8);
53}
54
55uint16_t Spc700::ind_ind(uint8_t* srcVal) {
56 read(PC);
57 *srcVal = read(Y | (PSW.P << 8));
58 return X | (PSW.P << 8);
59}
60
61uint8_t Spc700::abs_bit(uint16_t* adr) {
62 uint16_t adrBit = ReadOpcodeWord();
63 *adr = adrBit & 0x1fff;
64 return adrBit >> 13;
65}
66
67uint16_t Spc700::dp_word(uint16_t* low) {
68 uint8_t adr = ReadOpcode();
69 *low = adr | (PSW.P << 8);
70 return ((adr + 1) & 0xff) | (PSW.P << 8);
71}
72
73uint16_t Spc700::ind_p() {
74 read(PC);
75 return X++ | (PSW.P << 8);
76}
77
78// Immediate
79uint16_t Spc700::imm() { return PC++; }
80
81// Direct page
82uint8_t Spc700::dp() {
83 return ReadOpcode() | (PSW.P << 8);
84}
85
86// Direct page indexed by X
88 PC++;
89 uint8_t offset = read(PC);
90 return read((PSW.P << 8) + offset + X);
91}
92
93// Direct page indexed by Y
95 PC++;
96 uint8_t offset = read(PC);
97 return read((PSW.P << 8) + offset + Y);
98}
99
100// Indexed indirect (add index before 16-bit lookup).
102 PC++;
103 uint16_t addr = read_word(PC + X);
104 return addr;
105}
106
107// Indirect indexed (add index after 16-bit lookup).
109 PC++;
110 uint16_t offset = read_word(PC);
111 return offset + Y;
112}
113
114uint16_t Spc700::dp_dp(uint8_t* src) {
115 *src = read(ReadOpcode() | (PSW.P << 8));
116 return ReadOpcode() | (PSW.P << 8);
117}
118
119uint16_t Spc700::abs() { return ReadOpcodeWord(); }
120
121int8_t Spc700::rel() {
122 PC++;
123 return static_cast<int8_t>(read(PC));
124}
125
126uint8_t Spc700::i() { return read((PSW.P << 8) + X); }
127
129 uint8_t value = read((PSW.P << 8) + X);
130 X++;
131 return value;
132}
133
135 PC++;
136 uint16_t addr = read(PC) | (read(PC) << 8);
137 return read(addr) + X;
138}
139
141 PC++;
142 uint16_t addr = read(PC) | (read(PC) << 8);
143 addr += X;
144 return read(addr) | (read(addr + 1) << 8);
145}
146
147} // namespace emu
148} // namespace yaze
uint8_t read(uint16_t address)
Definition spc700.h:143
uint8_t dp_plus_x()
Definition addressing.cc:87
uint16_t ind_p()
Definition addressing.cc:73
uint16_t adr
Definition spc700.h:80
uint16_t dp_y()
Definition addressing.cc:25
uint8_t abs_bit(uint16_t *adr)
Definition addressing.cc:61
uint16_t dp_indirect_plus_y()
uint16_t addr_plus_i_indexed()
uint16_t ind_ind(uint8_t *srcVal)
Definition addressing.cc:55
uint8_t i_postinc()
uint16_t dp_plus_x_indirect()
uint16_t addr_plus_i()
uint8_t dp_plus_y()
Definition addressing.cc:94
uint16_t abs_y()
Definition addressing.cc:37
uint16_t dp_imm(uint8_t *srcVal)
Definition addressing.cc:50
uint16_t ReadOpcodeWord()
Definition spc700.h:157
uint16_t dp_dp(uint8_t *src)
uint16_t abs_x()
Definition addressing.cc:31
uint16_t dp_word(uint16_t *low)
Definition addressing.cc:67
uint16_t read_word(uint16_t address)
Definition spc700.h:145
uint16_t PC
Definition spc700.h:102
ApuCallbacks callbacks_
Definition spc700.h:71
uint16_t ind()
Definition addressing.cc:8
uint8_t ReadOpcode()
Definition spc700.h:152
SNES Emulation and debugging tools.
Definition apu.cc:13
Main namespace for the application.
Definition controller.cc:18