Skip to content

Commit 9b65cdb

Browse files
committed
utils, general: Move bitset to its own header and use gba:: namespace for utils
1 parent d9de4d2 commit 9b65cdb

File tree

8 files changed

+118
-248
lines changed

8 files changed

+118
-248
lines changed

libgba-cpp/arch/cpu/interrupts.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ auto& register_at(uint16_t address) {
5353
}
5454

5555
void set_interrupt_bit(Handler handler, bool enabled) {
56-
const auto& sender = senders[utils::value_of(handler.type)];
56+
const auto& sender = senders[gba::utils::value_of(handler.type)];
5757
register_at(sender.offset)[sender.bit] = enabled;
5858
}
5959

libgba-cpp/arch/registers.h

+35-103
Original file line numberDiff line numberDiff line change
@@ -6,75 +6,7 @@
66
#include <type_traits>
77
#include <new>
88

9-
10-
template<typename T>
11-
class bitset_bit {
12-
public:
13-
bitset_bit(T& value, std::size_t index)
14-
: index_(index)
15-
, value_(value)
16-
{}
17-
18-
bitset_bit& operator=(bool bit) {
19-
if (bit) {
20-
value_ |= (1 << index_);
21-
} else {
22-
value_ &= ~(1 << index_);
23-
}
24-
return *this;
25-
};
26-
27-
operator bool() const {
28-
return value_ & (1 << index_);
29-
}
30-
31-
operator bool() {
32-
return value_ & (1 << index_);
33-
}
34-
35-
private:
36-
std::size_t index_;
37-
T& value_;
38-
};
39-
40-
template<typename T>
41-
class bitset {
42-
public:
43-
bitset() = default;
44-
45-
bitset(T value)
46-
: value_(value)
47-
{}
48-
49-
auto operator[](std::size_t index) -> bitset_bit<T> {
50-
return bitset_bit(value_, index);
51-
}
52-
53-
auto operator[](std::size_t index) const -> const bitset_bit<const T> {
54-
return bitset_bit(value_, index);
55-
}
56-
57-
auto operator[](std::size_t index) volatile const -> const bitset_bit<const volatile T> {
58-
return bitset_bit(value_, index);
59-
}
60-
61-
auto operator=(const T& other) -> uint32_t {
62-
value_ = other;
63-
return value_;
64-
}
65-
66-
auto operator|=(const T& other) -> T& {
67-
value_ |= other;
68-
return value_;
69-
}
70-
71-
auto to_ulong() const -> unsigned long int {
72-
return value_;
73-
}
74-
75-
private:
76-
T value_;
77-
};
9+
#include <libgba-cpp/utils/bitset.h>
7810

7911
/**
8012
* Elements related to GBA's physical architecture.
@@ -118,18 +50,18 @@ namespace display {
11850
/**
11951
* Display Control Register.
12052
*/
121-
static auto& lcd_control = at<bitset<uint16_t>>(0x0400'0000);
53+
static auto& lcd_control = at<gba::utils::bitset<uint16_t>>(0x0400'0000);
12254
static_assert(sizeof(lcd_control) == 2, "LCD Control must exactly have 2 bytes.");
12355

12456
/**
12557
* Green Swap Register (no official documentation).
12658
*/
127-
static auto& green_swap = raw_at<bitset<uint16_t>>(0x0400'0002);
59+
static auto& green_swap = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0002);
12860

12961
/**
13062
* Display status register.
13163
*/
132-
static auto& lcd_status = raw_at<bitset<uint16_t>>(0x0400'0004);
64+
static auto& lcd_status = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0004);
13365

13466
/**
13567
* Number of scanline currently being processed by PPU.
@@ -218,7 +150,7 @@ static auto& window_inside = raw_at<uint16_t>(0x0400'0048);
218150
static auto& window_outside = raw_at<uint16_t>(0x0400'004a);
219151

220152
static auto& mosaic_size = raw_at<uint16_t>(0x0400'004c);
221-
static auto& effect_control = raw_at<bitset<uint16_t>>(0x0400'0050);
153+
static auto& effect_control = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0050);
222154
static auto& blend_a = raw_at<uint8_t>(0x0400'0052);
223155
static auto& blend_b = raw_at<uint8_t>(0x0400'0054);
224156

@@ -230,38 +162,38 @@ static auto& bg_palette = raw_at<std::array<uint16_t, 256>>(0x05
230162
*/
231163
namespace sound {
232164

233-
static auto& channel1_sweep = raw_at<bitset<uint16_t>>(0x0400'0060);
234-
static auto& channel1_envelope = raw_at<bitset<uint16_t>>(0x0400'0062);
235-
static auto& channel1_control = raw_at<bitset<uint16_t>>(0x0400'0064);
165+
static auto& channel1_sweep = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0060);
166+
static auto& channel1_envelope = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0062);
167+
static auto& channel1_control = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0064);
236168

237-
static auto& channel2_envelope = raw_at<bitset<uint16_t>>(0x0400'0068);
238-
static auto& channel2_control = raw_at<bitset<uint16_t>>(0x0400'006c);
169+
static auto& channel2_envelope = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0068);
170+
static auto& channel2_control = raw_at<gba::utils::bitset<uint16_t>>(0x0400'006c);
239171

240-
static auto& channel3_wave_bank = raw_at<bitset<uint16_t>>(0x0400'0070);
241-
static auto& channel3_length = raw_at<bitset<uint16_t>>(0x0400'0072);
242-
static auto& channel3_control = raw_at<bitset<uint16_t>>(0x0400'0074);
172+
static auto& channel3_wave_bank = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0070);
173+
static auto& channel3_length = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0072);
174+
static auto& channel3_control = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0074);
243175

244-
static auto& channel4_envelope = raw_at<bitset<uint16_t>>(0x0400'0078);
245-
static auto& channel4_noise = raw_at<bitset<uint16_t>>(0x0400'007c);
176+
static auto& channel4_envelope = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0078);
177+
static auto& channel4_noise = raw_at<gba::utils::bitset<uint16_t>>(0x0400'007c);
246178

247-
static auto& dmg_control = raw_at<bitset<uint16_t>>(0x0400'0080);
248-
static auto& directsound_control = raw_at<bitset<uint16_t>>(0x0400'0082);
249-
static auto& status = raw_at<bitset<uint16_t>>(0x0400'0084);
179+
static auto& dmg_control = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0080);
180+
static auto& directsound_control = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0082);
181+
static auto& status = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0084);
250182

251-
static auto& bias = raw_at<bitset<uint16_t>>(0x0400'0088);
183+
static auto& bias = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0088);
252184

253-
static auto& wave_ram0_l = raw_at<bitset<uint16_t>>(0x0400'0090);
254-
static auto& wave_ram0_h = raw_at<bitset<uint16_t>>(0x0400'0092);
185+
static auto& wave_ram0_l = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0090);
186+
static auto& wave_ram0_h = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0092);
255187

256-
static auto& wave_ram1_l = raw_at<bitset<uint16_t>>(0x0400'0094);
257-
static auto& wave_ram1_h = raw_at<bitset<uint16_t>>(0x0400'0096);
188+
static auto& wave_ram1_l = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0094);
189+
static auto& wave_ram1_h = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0096);
258190

259-
static auto& wave_ram2_l = raw_at<bitset<uint16_t>>(0x0400'0098);
260-
static auto& wave_ram2_h = raw_at<bitset<uint16_t>>(0x0400'009a);
191+
static auto& wave_ram2_l = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0098);
192+
static auto& wave_ram2_h = raw_at<gba::utils::bitset<uint16_t>>(0x0400'009a);
261193

262194
// TODO: Fix data types
263-
static auto& wave_ram3_l = raw_at<bitset<uint16_t>>(0x0400'009c);
264-
static auto& wave_ram3_h = raw_at<bitset<uint16_t>>(0x0400'009e);
195+
static auto& wave_ram3_l = raw_at<gba::utils::bitset<uint16_t>>(0x0400'009c);
196+
static auto& wave_ram3_h = raw_at<gba::utils::bitset<uint16_t>>(0x0400'009e);
265197

266198
static auto& dsa_fifo_0 = raw_at<uint8_t>(0x0400'00a0);
267199
static auto& dsa_fifo_1 = raw_at<uint8_t>(0x0400'00a1);
@@ -317,14 +249,14 @@ static auto& serial_third = raw_at<uint16_t>(0x0400'0126);
317249
static auto& serial_control = raw_at<uint16_t>(0x0400'0128);
318250
static auto& serial_send_data = raw_at<uint8_t>(0x0400'012a);
319251

320-
static auto& keypad_status = raw_at<volatile const bitset<uint16_t>>(0x0400'0130);
321-
static auto& keypad_interrupt = raw_at<bitset<uint16_t>>(0x0400'0132);
252+
static auto& keypad_status = raw_at<volatile const gba::utils::bitset<uint16_t>>(0x0400'0130);
253+
static auto& keypad_interrupt = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0132);
322254

323-
static auto& serial_mode = raw_at<bitset<uint16_t>>(0x0400'0134);
324-
static auto& serial_joy_control = raw_at<bitset<uint16_t>>(0x0400'0140);
255+
static auto& serial_mode = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0134);
256+
static auto& serial_joy_control = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0140);
325257
static auto& serial_joy_receive_data = raw_at<uint32_t>(0x0400'0150);
326258
static auto& serial_joy_transmit_data = raw_at<uint32_t>(0x0400'0154);
327-
static auto& serial_joy_receive_status = raw_at<bitset<uint32_t>>(0x0400'0158);
259+
static auto& serial_joy_receive_status = raw_at<gba::utils::bitset<uint32_t>>(0x0400'0158);
328260

329261
}
330262

@@ -333,9 +265,9 @@ static auto& serial_joy_receive_status = raw_at<bitset<uint32_t>>(0x0400'0158);
333265
//----------------------------------------------------------------------------
334266
namespace cpu {
335267

336-
static auto& interrupt_enable = raw_at<bitset<uint16_t>>(0x0400'0200);
268+
static auto& interrupt_enable = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0200);
337269
static volatile auto& interrupt_request = raw_at<volatile uint16_t>(0x0400'0202);
338-
static auto& gamepak_wait_control = raw_at<bitset<uint16_t>>(0x0400'0204);
270+
static auto& gamepak_wait_control = raw_at<gba::utils::bitset<uint16_t>>(0x0400'0204);
339271
static auto& master_enable = raw_at<bool>(0x0400'0208);
340272

341273
}
@@ -345,7 +277,7 @@ static auto& master_enable = raw_at<bool>(0x0400'0208);
345277
//----------------------------------------------------------------------------
346278
namespace bios {
347279

348-
static volatile auto& interrupt_check = raw_at<bitset<uint16_t>>(0x0300'7ff8);
280+
static volatile auto& interrupt_check = raw_at<gba::utils::bitset<uint16_t>>(0x0300'7ff8);
349281

350282
}
351283

libgba-cpp/arch/sound/directsound.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
#include "registers.h"
66

7-
using utils::value_of;
7+
using gba::utils::value_of;
88
using namespace gba::arch::registers::sound;
99

1010
namespace gba {

libgba-cpp/arch/sound/sound.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#include <libgba-cpp/arch/registers.h>
44
#include <libgba-cpp/utils/general.h>
55

6-
using utils::value_of;
6+
using gba::utils::value_of;
77
using namespace gba::arch::registers::sound;
88

99
namespace gba {

libgba-cpp/engine/graphics/map.h

-49
This file was deleted.

libgba-cpp/engine/graphics/maps.h

-92
This file was deleted.

0 commit comments

Comments
 (0)