Files
ComSquare/tests/PPU/testPpuWriteFromVmain.cpp
2021-07-06 23:35:56 +02:00

299 lines
11 KiB
C++

//
// Created by cbihan on 2/11/20.
//
#include <bitset>
#include "tests.hpp"
#include <catch2/catch_test_macros.hpp>
#include "SNES.hpp"
#include "Memory/MemoryBus.hpp"
#include "PPU/PPU.hpp"
using namespace ComSquare;
TEST_CASE("vmain_data_full PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x2115, 0b11111111);
REQUIRE(snes.ppu._registers._vmain.incrementMode == true);
REQUIRE(snes.ppu._registers._vmain.addressRemapping == 0b11);
REQUIRE(snes.ppu._registers._vmain.incrementAmount == 0b11);
}
TEST_CASE("vmain_incrementmode_off_false_else_full PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x2115, 0b01111111);
REQUIRE(snes.ppu._registers._vmain.incrementMode == false);
REQUIRE(snes.ppu._registers._vmain.addressRemapping == 0b11);
REQUIRE(snes.ppu._registers._vmain.incrementAmount == 0b11);
}
TEST_CASE("vmain_addressremaping_null_else_full PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x2115, 0b11110011);
REQUIRE(snes.ppu._registers._vmain.incrementMode == true);
REQUIRE(snes.ppu._registers._vmain.addressRemapping == 0b00);
REQUIRE(snes.ppu._registers._vmain.incrementAmount == 0b11);
}
TEST_CASE("vmain_incrementamount_null_else_full PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x2115, 0b11111100);
REQUIRE(snes.ppu._registers._vmain.incrementMode == true);
REQUIRE(snes.ppu._registers._vmain.addressRemapping == 0b11);
REQUIRE(snes.ppu._registers._vmain.incrementAmount == 0b00);
}
TEST_CASE("vmadd_full_data PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x2116, 0b11111111);
snes.bus.write(0x2117, 0b11111111);
REQUIRE(snes.ppu._registers._vmadd.vmadd == 0b1111111111111111);
}
TEST_CASE("vmadd_full_data_check_ram PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x2115, 0b10000000);
snes.bus.write(0x2116, 2);
snes.bus.write(0x2117, 0);
snes.bus.write(0x2118, 0xFF);
snes.bus.write(0x2119, 0xFF);
REQUIRE(snes.ppu._registers._vmadd.vmadd == 3);
REQUIRE(snes.ppu.vram.read(4) == 0xFF);
REQUIRE(snes.ppu.vram.read(5) == 0xFF);
}
TEST_CASE("vmadd_full_high_byte_null PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x2116, 0b11111111);
snes.bus.write(0x2117, 0b00000000);
REQUIRE(snes.ppu._registers._vmadd.vmadd == 0b0000000011111111);
}
TEST_CASE("vmdata_full_data PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x2118, 0b11111111);
snes.bus.write(0x2119, 0b11111111);
REQUIRE(snes.ppu._registers._vmdata.vmdata == 0b1111111111111111);
}
TEST_CASE("vmdata_full_high_byte_null PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x2118, 0b11111111);
snes.bus.write(0x2119, 0b00000000);
REQUIRE(snes.ppu._registers._vmdata.vmdata == 0b0000000011111111);
}
TEST_CASE("cgadd_full_high_byte_null PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x2121, 0b11111111);
REQUIRE(snes.ppu._registers._cgadd == 0b11111111);
REQUIRE(snes.ppu._registers._isLowByte == true);
}
TEST_CASE("cgdata_data_full PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x2121, 0x0);
snes.bus.write(0x2122, 0b11111111);
REQUIRE(snes.ppu._registers._cgdata.cgdatal == 0b11111111);
REQUIRE(snes.ppu._registers._isLowByte == false);
int address = snes.ppu._registers._cgadd;
snes.bus.write(0x2122, 0b11111000);
REQUIRE(snes.ppu._registers._cgdata.cgdatah == 0b11111000);
REQUIRE(snes.ppu._registers._isLowByte == true);
REQUIRE(snes.ppu._registers._cgadd == address + 2);
}
TEST_CASE("m7sel_data_full PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x211A, 0b11111111);
REQUIRE(snes.ppu._registers._m7sel.playingFieldSize == true);
REQUIRE(snes.ppu._registers._m7sel.emptySpaceFill == true);
REQUIRE(snes.ppu._registers._m7sel.horizontalMirroring == true);
REQUIRE(snes.ppu._registers._m7sel.verticalMirroring == true);
}
TEST_CASE("m7sel_data_actual PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x211A, 0b01111101);
REQUIRE(snes.ppu._registers._m7sel.playingFieldSize == false);
REQUIRE(snes.ppu._registers._m7sel.emptySpaceFill == true);
REQUIRE(snes.ppu._registers._m7sel.horizontalMirroring == true);
REQUIRE(snes.ppu._registers._m7sel.verticalMirroring == false);
}
TEST_CASE("w12sel_data_full PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x2123, 0b11111111);
REQUIRE(snes.ppu._registers._wsel[0].window1InversionForBg1Bg3Obj == true);
REQUIRE(snes.ppu._registers._wsel[0].enableWindow1ForBg1Bg3Obj == true);
REQUIRE(snes.ppu._registers._wsel[0].window2InversionForBg1Bg3Obj == true);
REQUIRE(snes.ppu._registers._wsel[0].enableWindow2ForBg1Bg3Obj == true);
REQUIRE(snes.ppu._registers._wsel[0].window1InversionForBg2Bg4Color == true);
REQUIRE(snes.ppu._registers._wsel[0].enableWindow1ForBg2Bg4Color == true);
REQUIRE(snes.ppu._registers._wsel[0].window2InversionForBg2Bg4Color == true);
REQUIRE(snes.ppu._registers._wsel[0].enableWindow2ForBg2Bg4Color == true);
}
TEST_CASE("w34sel_data_full PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x2124, 0b10101010);
REQUIRE(snes.ppu._registers._wsel[1].window1InversionForBg1Bg3Obj == true);
REQUIRE(snes.ppu._registers._wsel[1].enableWindow1ForBg1Bg3Obj == false);
REQUIRE(snes.ppu._registers._wsel[1].window2InversionForBg1Bg3Obj == true);
REQUIRE(snes.ppu._registers._wsel[1].enableWindow2ForBg1Bg3Obj == false);
REQUIRE(snes.ppu._registers._wsel[1].window1InversionForBg2Bg4Color == true);
REQUIRE(snes.ppu._registers._wsel[1].enableWindow1ForBg2Bg4Color == false);
REQUIRE(snes.ppu._registers._wsel[1].window2InversionForBg2Bg4Color == true);
REQUIRE(snes.ppu._registers._wsel[1].enableWindow2ForBg2Bg4Color == false);
}
TEST_CASE("wobjsel_data_full PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x2125, 0b10110001);
REQUIRE(snes.ppu._registers._wsel[2].window1InversionForBg1Bg3Obj == true);
REQUIRE(snes.ppu._registers._wsel[2].enableWindow1ForBg1Bg3Obj == false);
REQUIRE(snes.ppu._registers._wsel[2].window2InversionForBg1Bg3Obj == true);
REQUIRE(snes.ppu._registers._wsel[2].enableWindow2ForBg1Bg3Obj == true);
REQUIRE(snes.ppu._registers._wsel[2].window1InversionForBg2Bg4Color == false);
REQUIRE(snes.ppu._registers._wsel[2].enableWindow1ForBg2Bg4Color == false);
REQUIRE(snes.ppu._registers._wsel[2].window2InversionForBg2Bg4Color == false);
REQUIRE(snes.ppu._registers._wsel[2].enableWindow2ForBg2Bg4Color == true);
}
TEST_CASE("wbglog_data_full PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x212A, 0b10110001);
REQUIRE(snes.ppu._registers._wbglog.maskLogicBg1 == 0b10);
REQUIRE(snes.ppu._registers._wbglog.maskLogicBg2 == 0b11);
REQUIRE(snes.ppu._registers._wbglog.maskLogicBg3 == 0b00);
REQUIRE(snes.ppu._registers._wbglog.maskLogicBg4 == 0b01);
}
TEST_CASE("wobjlog_data_full PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x212B, 0b10110001);
REQUIRE(snes.ppu._registers._wobjlog.maskLogicObj == 0b01);
REQUIRE(snes.ppu._registers._wobjlog.maskLogicColor == 0b00);
}
TEST_CASE("tm_data_full PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x212C, 0b10110001);
REQUIRE(snes.ppu._registers._t[0].enableWindowDisplayBg1 == true);
REQUIRE(snes.ppu._registers._t[0].enableWindowDisplayBg2 == false);
REQUIRE(snes.ppu._registers._t[0].enableWindowDisplayBg3 == false);
REQUIRE(snes.ppu._registers._t[0].enableWindowDisplayBg4 == false);
REQUIRE(snes.ppu._registers._t[0].enableWindowDisplayObj == true);
}
TEST_CASE("ts_data_full PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x212D, 0b10101110);
REQUIRE(snes.ppu._registers._t[1].enableWindowDisplayBg1 == false);
REQUIRE(snes.ppu._registers._t[1].enableWindowDisplayBg2 == true);
REQUIRE(snes.ppu._registers._t[1].enableWindowDisplayBg3 == true);
REQUIRE(snes.ppu._registers._t[1].enableWindowDisplayBg4 == true);
REQUIRE(snes.ppu._registers._t[1].enableWindowDisplayObj == false);
}
TEST_CASE("tmw_data_full PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x212E, 0b10101110);
REQUIRE(snes.ppu._registers._tw[0].enableWindowMaskingBg1 == false);
REQUIRE(snes.ppu._registers._tw[0].enableWindowMaskingBg2 == true);
REQUIRE(snes.ppu._registers._tw[0].enableWindowMaskingBg3 == true);
REQUIRE(snes.ppu._registers._tw[0].enableWindowMaskingBg4 == true);
REQUIRE(snes.ppu._registers._tw[0].enableWindowMaskingObj == false);
}
TEST_CASE("tsw_data_full PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x212F, 0b10100011);
REQUIRE(snes.ppu._registers._tw[1].enableWindowMaskingBg1 == true);
REQUIRE(snes.ppu._registers._tw[1].enableWindowMaskingBg2 == true);
REQUIRE(snes.ppu._registers._tw[1].enableWindowMaskingBg3 == false);
REQUIRE(snes.ppu._registers._tw[1].enableWindowMaskingBg4 == false);
REQUIRE(snes.ppu._registers._tw[1].enableWindowMaskingObj == false);
}
TEST_CASE("cgwsel_data_full PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x2130, 0b10111001);
REQUIRE(snes.ppu._registers._cgwsel.clipColorToBlackBeforeMath == 0b10);
REQUIRE(snes.ppu._registers._cgwsel.preventColorMath == 0b11);
REQUIRE(snes.ppu._registers._cgwsel.addSubscreen == false);
REQUIRE(snes.ppu._registers._cgwsel.directColorMode == true);
}
TEST_CASE("cgadsub_data_full PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x2131, 0b10111001);
REQUIRE(snes.ppu._registers._cgadsub.addSubtractSelect == true);
REQUIRE(snes.ppu._registers._cgadsub.halfColorMath == false);
REQUIRE(snes.ppu._registers._cgadsub.enableColorMathBackdrop == true);
REQUIRE(snes.ppu._registers._cgadsub.enableColorMathObj == true);
REQUIRE(snes.ppu._registers._cgadsub.enableColorMathBg4 == true);
REQUIRE(snes.ppu._registers._cgadsub.enableColorMathBg3 == false);
REQUIRE(snes.ppu._registers._cgadsub.enableColorMathBg2 == false);
REQUIRE(snes.ppu._registers._cgadsub.enableColorMathBg1 == true);
}
TEST_CASE("coldata_data_full PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x2132, 0b10111001);
REQUIRE(snes.ppu._registers._coldata.blue == true);
REQUIRE(snes.ppu._registers._coldata.green == false);
REQUIRE(snes.ppu._registers._coldata.red == true);
REQUIRE(snes.ppu._registers._coldata.colorIntensity == 0b11001);
}
TEST_CASE("setini_data_full PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x2133, 0b10111001);
REQUIRE(snes.ppu._registers._setini.externalSync == true);
REQUIRE(snes.ppu._registers._setini.mode7ExtBg == false);
REQUIRE(snes.ppu._registers._setini.enablePseudoHiresMode == true);
REQUIRE(snes.ppu._registers._setini.overscanMode == false);
REQUIRE(snes.ppu._registers._setini.objInterlace == false);
REQUIRE(snes.ppu._registers._setini.screenInterlace == true);
}
TEST_CASE("m7a_data_full PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x211B, 0b10111001);
REQUIRE(snes.ppu._registers._m7[0].m7l == 0b10111001);
}
TEST_CASE("m7c_data_low_and_high_byte PPU_write_2", "[PPU_write_2]")
{
Init()
snes.bus.write(0x211D, 0b10111001);
snes.bus.write(0x211D, 0b11111111);
REQUIRE(snes.ppu._registers._m7[2].m7 == 0b1011100111111111);
}