more tests

This commit is contained in:
Clément Le Bihan
2020-02-10 17:49:11 +01:00
parent 0b442450a5
commit b4a0a23069
3 changed files with 113 additions and 70 deletions
+9 -17
View File
@@ -47,26 +47,18 @@ namespace ComSquare::PPU
case 0x05: //! @brief $2105 BGMODE (BG Mode and Character Size). case 0x05: //! @brief $2105 BGMODE (BG Mode and Character Size).
this->_bgmode.raw = data; this->_bgmode.raw = data;
break; break;
case 0x06: case 0x06: //! $2106 MOSAIC (Screen Pixelation)
this->_mosaic.raw = data; this->_mosaic.raw = data;
break; break;
case 0x07: case 0x07: // BG1SC (BG1 Tilemap Address and Size)
this->_bg1sc.raw = data; case 0x08: // BG2SC (BG2 Tilemap Address and Size)
case 0x09: //! @brief BG3SC (BG3 Tilemap Address and Size)
case 0x0A: //! @brief BG4SC (BG4 Tilemap Address and Size)
this->_bgsc[addr - 0x07].raw = data;
break; break;
case 0x08: case 0x0B: //! @brief BG12NBA (BG1 and 2 Chr Address)
this->_bg2sc.raw = data; case 0x0C: //! @brief BG34NBA (BG3 and 4 Chr Address)
break; this->_bgnba[addr - 0x0B].raw = data;
case 0x09:
this->_bg3sc.raw = data;
break;
case 0x0A:
this->_bg4sc.raw = data;
break;
case 0x0B:
this->_bg12nba.raw = data;
break;
case 0x0C:
this->_bg34nba.raw = data;
break; break;
//TODO adding the rest of the registers. oaf ! //TODO adding the rest of the registers. oaf !
default: default:
+5 -32
View File
@@ -129,50 +129,23 @@ namespace ComSquare::PPU
}; };
uint8_t raw; uint8_t raw;
} _mosaic; } _mosaic;
//! @brief BG1SC Register (BG1 Tilemap Address and Size) //! @brief BGSC Registers (BG Tilemap Address and Size)
union { union {
struct { struct {
uint8_t tilemapAddress: 6;
bool tilemapHorizontalMirroring: 1; bool tilemapHorizontalMirroring: 1;
bool tilemapVerticalMirroring: 1; bool tilemapVerticalMirroring: 1;
};
uint8_t raw;
} _bg1sc;
//! @brief BG2SC Register (BG2 Tilemap Address and Size)
union {
struct {
uint8_t tilemapAddress: 6; uint8_t tilemapAddress: 6;
bool tilemapHorizontalMirroring: 1;
bool tilemapVerticalMirroring: 1;
}; };
uint8_t raw; uint8_t raw;
} _bg2sc; } _bgsc[4];
//! @brief BG3SC Register (BG3 Tilemap Address and Size) //! @brief BGNBA Registers (BG1/2/3/4 Chr Address)
union { union {
struct { struct {
uint8_t tilemapAddress: 6;
bool tilemapHorizontalMirroring: 1;
bool tilemapVerticalMirroring: 1;
};
uint8_t raw;
} _bg3sc;
//! @brief BG4SC Register (BG4 Tilemap Address and Size)
union {
struct {
uint8_t tilemapAddress: 6;
bool tilemapHorizontalMirroring: 1;
bool tilemapVerticalMirroring: 1;
};
uint8_t raw;
} _bg4sc;
//! @brief BG12NBA Register (BG1 and 2 Chr Address)
union {
struct {
uint8_t baseAddressBg2a4: 4;
uint8_t baseAddressBg1a3: 4; uint8_t baseAddressBg1a3: 4;
uint8_t baseAddressBg2a4: 4;
}; };
uint8_t raw; uint8_t raw;
} _bg12nba; } _bgnba[2];
//! @brief BG34NBA Register (BG3 and 4 Chr Address) //! @brief BG34NBA Register (BG3 and 4 Chr Address)
union { union {
struct { struct {
+99 -21
View File
@@ -155,33 +155,111 @@ Test(PPU_write, bgmode_bgmode_5_and_bg24_on)
Test(PPU_write, mosaic_data_full) Test(PPU_write, mosaic_data_full)
{ {
auto pair = Init(); auto pair = Init();
pair.first->write(0x2106, 0b11111111); pair.first->write(0x2106, 0b11111111);
cr_assert_eq(pair.second.ppu->_mosaic.affectBg1, true); cr_assert_eq(pair.second.ppu->_mosaic.affectBg1, true);
cr_assert_eq(pair.second.ppu->_mosaic.affectBg2, true); cr_assert_eq(pair.second.ppu->_mosaic.affectBg2, true);
cr_assert_eq(pair.second.ppu->_mosaic.affectBg3, true); cr_assert_eq(pair.second.ppu->_mosaic.affectBg3, true);
cr_assert_eq(pair.second.ppu->_mosaic.affectBg4, true); cr_assert_eq(pair.second.ppu->_mosaic.affectBg4, true);
cr_assert_eq(pair.second.ppu->_mosaic.pixelSize, 0xF); cr_assert_eq(pair.second.ppu->_mosaic.pixelSize, 0xF);
} }
Test(PPU_write, mosaic_affectbg23_w_1x1_size) Test(PPU_write, mosaic_affectbg23_w_1x1_size)
{ {
auto pair = Init(); auto pair = Init();
pair.first->write(0x2106, 0b00000110); pair.first->write(0x2106, 0b00000110);
cr_assert_eq(pair.second.ppu->_mosaic.affectBg1, false); cr_assert_eq(pair.second.ppu->_mosaic.affectBg1, false);
cr_assert_eq(pair.second.ppu->_mosaic.affectBg2, true); cr_assert_eq(pair.second.ppu->_mosaic.affectBg2, true);
cr_assert_eq(pair.second.ppu->_mosaic.affectBg3, true); cr_assert_eq(pair.second.ppu->_mosaic.affectBg3, true);
cr_assert_eq(pair.second.ppu->_mosaic.affectBg4, false); cr_assert_eq(pair.second.ppu->_mosaic.affectBg4, false);
cr_assert_eq(pair.second.ppu->_mosaic.pixelSize, 0x0); cr_assert_eq(pair.second.ppu->_mosaic.pixelSize, 0x0);
} }
Test(PPU_write, mosaic_affectbg14_w_2x2_size) Test(PPU_write, mosaic_affectbg14_w_2x2_size)
{ {
auto pair = Init(); auto pair = Init();
pair.first->write(0x2106, 0b00101001); pair.first->write(0x2106, 0b00101001);
cr_assert_eq(pair.second.ppu->_mosaic.affectBg1, true); cr_assert_eq(pair.second.ppu->_mosaic.affectBg1, true);
cr_assert_eq(pair.second.ppu->_mosaic.affectBg2, false); cr_assert_eq(pair.second.ppu->_mosaic.affectBg2, false);
cr_assert_eq(pair.second.ppu->_mosaic.affectBg3, false); cr_assert_eq(pair.second.ppu->_mosaic.affectBg3, false);
cr_assert_eq(pair.second.ppu->_mosaic.affectBg4, true); cr_assert_eq(pair.second.ppu->_mosaic.affectBg4, true);
cr_assert_eq(pair.second.ppu->_mosaic.pixelSize, 0x2); cr_assert_eq(pair.second.ppu->_mosaic.pixelSize, 0x2);
}
Test(PPU_write, bg1sc_data_full)
{
auto pair = Init();
pair.first->write(0x2107, 0b11111111);
cr_assert_eq(pair.second.ppu->_bgsc[0].tilemapAddress, 0b111111);
cr_assert_eq(pair.second.ppu->_bgsc[0].tilemapHorizontalMirroring, true);
cr_assert_eq(pair.second.ppu->_bgsc[0].tilemapVerticalMirroring, true);
}
Test(PPU_write, bg2sc_data_full)
{
auto pair = Init();
pair.first->write(0x2108, 0b11111111);
cr_assert_eq(pair.second.ppu->_bgsc[1].tilemapAddress, 0b111111);
cr_assert_eq(pair.second.ppu->_bgsc[1].tilemapHorizontalMirroring, true);
cr_assert_eq(pair.second.ppu->_bgsc[1].tilemapVerticalMirroring, true);
}
Test(PPU_write, bg3sc_data_full)
{
auto pair = Init();
pair.first->write(0x2109, 0b11111111);
cr_assert_eq(pair.second.ppu->_bgsc[2].tilemapAddress, 0b111111);
cr_assert_eq(pair.second.ppu->_bgsc[2].tilemapHorizontalMirroring, true);
cr_assert_eq(pair.second.ppu->_bgsc[2].tilemapVerticalMirroring, true);
}
Test(PPU_write, bg4sc_data_full)
{
auto pair = Init();
pair.first->write(0x210A, 0b11111111);
cr_assert_eq(pair.second.ppu->_bgsc[3].tilemapAddress, 0b111111);
cr_assert_eq(pair.second.ppu->_bgsc[3].tilemapHorizontalMirroring, true);
cr_assert_eq(pair.second.ppu->_bgsc[3].tilemapVerticalMirroring, true);
}
Test(PPU_write, bg4sc_data_null)
{
auto pair = Init();
pair.first->write(0x210A, 0b00000000);
cr_assert_eq(pair.second.ppu->_bgsc[3].tilemapAddress, 0);
cr_assert_eq(pair.second.ppu->_bgsc[3].tilemapHorizontalMirroring, false);
cr_assert_eq(pair.second.ppu->_bgsc[3].tilemapVerticalMirroring, false);
}
Test(PPU_write, bg4sc_horizontal_off_vertical_on_random_tilemapAdress)
{
auto pair = Init();
pair.first->write(0x210A, 0b11000110);
cr_assert_eq(pair.second.ppu->_bgsc[3].tilemapAddress, 0b110001);
cr_assert_eq(pair.second.ppu->_bgsc[3].tilemapHorizontalMirroring, false);
cr_assert_eq(pair.second.ppu->_bgsc[3].tilemapVerticalMirroring, true);
}
Test(PPU_write, bg12nba_data_full)
{
auto pair = Init();
pair.first->write(0x210B, 0b11111111);
cr_assert_eq(pair.second.ppu->_bgnba[0].baseAddressBg1a3, 0b1111);
cr_assert_eq(pair.second.ppu->_bgnba[0].baseAddressBg2a4, 0b1111);
}
Test(PPU_write, bg34nba_data_full)
{
auto pair = Init();
pair.first->write(0x210C, 0b11111111);
cr_assert_eq(pair.second.ppu->_bgnba[1].baseAddressBg1a3, 0b1111);
cr_assert_eq(pair.second.ppu->_bgnba[1].baseAddressBg2a4, 0b1111);
}
Test(PPU_write, bg12nba_data_random_data)
{
auto pair = Init();
pair.first->write(0x210B, 0b10101010);
cr_assert_eq(pair.second.ppu->_bgnba[0].baseAddressBg1a3, 0b1010);
cr_assert_eq(pair.second.ppu->_bgnba[0].baseAddressBg2a4, 0b1010);
} }