srctree

Johan Norberg parent 480dd628 0ecd69df
Add more access methods to PpuMask

core/include/nes/core/ppu_registers.h added: 44, removed: 17, total 27
@@ -139,7 +139,22 @@ public:
// 5: Emphasize red (green on PAL/Dendy)
// 6: Emphasize green (red on PAL/Dendy)
// 7: Emphasize blue
using PpuMask = Register<uint8_t>;
class PpuMask : public Register<uint8_t> {
public:
using Register<uint8_t>::Register;
 
[[nodiscard]] constexpr bool render_background() const {
return is_set(3u);
}
 
[[nodiscard]] constexpr bool render_background_left() const {
return is_set(1u);
}
 
[[nodiscard]] constexpr bool is_rendering_enabled() const {
return is_set(3u) || is_set(4u);
}
};
 
struct PpuRegisters {
uint16_t scanline;
@@ -165,10 +180,6 @@ struct PpuRegisters {
uint8_t attribute_table_latch;
uint16_t attribute_table_shifter_low;
uint16_t attribute_table_shifter_hi;
 
[[nodiscard]] constexpr bool is_rendering_enabled() const {
return mask.is_set(3u) || mask.is_set(4u);
}
};
 
} // namespace n_e_s::core
 
core/src/ppu.cpp added: 44, removed: 17, total 27
@@ -189,7 +189,7 @@ bool Ppu::is_vblank_scanline() const {
}
 
bool Ppu::is_rendering_active() const {
return registers_->is_rendering_enabled() &&
return registers_->mask.is_rendering_enabled() &&
(is_pre_render_scanline() || is_visible_scanline());
}
 
@@ -253,7 +253,7 @@ void Ppu::shift_registers() {
}
 
void Ppu::increase_scroll_counters() {
if (!registers_->is_rendering_enabled()) {
if (!registers_->mask.is_rendering_enabled()) {
return;
}
 
 
core/test/src/test_ppu_registers.cpp added: 44, removed: 17, total 27
@@ -36,15 +36,31 @@ TEST(RegisterUint8, shift_right) {
EXPECT_EQ(0b0010'0000, reg.value());
}
 
TEST(PpuRegisters, is_rendering_enabled_returns_true_for_bit_three_and_four) {
PpuRegisters r{};
EXPECT_FALSE(r.is_rendering_enabled());
TEST(PpuMask, render_background_returns_true_for_bit_three) {
PpuMask mask{};
EXPECT_FALSE(mask.render_background());
 
r.mask = PpuMask(0b0000'1000);
EXPECT_TRUE(r.is_rendering_enabled());
mask = PpuMask(0b0000'1000);
EXPECT_TRUE(mask.render_background());
}
 
r.mask = PpuMask(0b0001'0000);
EXPECT_TRUE(r.is_rendering_enabled());
TEST(PpuMask, render_background_left_returns_true_for_bit_one) {
PpuMask mask{};
EXPECT_FALSE(mask.render_background_left());
 
mask = PpuMask(0b0000'0010);
EXPECT_TRUE(mask.render_background_left());
}
 
TEST(PpuMask, is_rendering_enabled_returns_true_for_bit_three_and_four) {
PpuMask mask{};
EXPECT_FALSE(mask.is_rendering_enabled());
 
mask = PpuMask(0b0000'1000);
EXPECT_TRUE(mask.is_rendering_enabled());
 
mask = PpuMask(0b0001'0000);
EXPECT_TRUE(mask.is_rendering_enabled());
}
 
TEST(PpuVram, construction) {