// // Created by anonymus-raccoon on 2/10/20. // #include #include #include #include "../tests.hpp" #include "../../sources/SNES.hpp" using namespace ComSquare; Test(AddrModeInit, LegitBus) { auto pair = Init(); cr_assert_eq(pair.first.get(), pair.second.cpu->_bus.get(), "Warning, the CPU's bus is not the same the SNES's bus. Next tests of the CPU may fail."); } Test(AddrMode, Immediate) { auto pair = Init(); pair.second.cpu->_registers.pac = 0x000015; cr_assert_eq(pair.second.cpu->_getImmediateAddr(), 0x000015, "Got %x, Expected 0x000015"); cr_assert_eq(pair.second.cpu->_registers.pac, 0x000016); } Test(AddrMode, ImmediateBankChange) { auto pair = Init(); pair.second.cpu->_registers.pac = 0x00FFFF; cr_assert_eq(pair.second.cpu->_getImmediateAddr(), 0x00FFFF); cr_assert_eq(pair.second.cpu->_registers.pac, 0x010000); } Test(AddrMode, Direct) { auto pair = Init(); pair.second.cartridge->_data[0] = 0x15; pair.second.cpu->_registers.pac = 0x808000; pair.second.cpu->_registers.d = 0x1000; cr_assert_eq(pair.second.cpu->_getDirectAddr(), 0x1015, "Returned address was %x but was expecting 0x1015.", pair.second.cpu->_getDirectAddr()); cr_assert_eq(pair.second.cpu->_registers.pac, 0x808001); } Test(AddrMode, Absolute) { auto pair = Init(); pair.second.cartridge->_data[0] = 0x1C; pair.second.cartridge->_data[1] = 0x90; pair.second.cpu->_registers.pac = 0x808000; pair.second.cpu->_registers.dbr = 0x88; cr_assert_eq(pair.second.cpu->_getAbsoluteAddr(), 0x88901C, "Returned address was %x but was expecting 0x88901C.", pair.second.cpu->_getAbsoluteAddr()); cr_assert_eq(pair.second.cpu->_registers.pac, 0x808002); } Test(AddrMode, AbsoluteLong) { auto pair = Init(); pair.second.cartridge->_data[0] = 0x1C; pair.second.cartridge->_data[1] = 0x90; pair.second.cartridge->_data[2] = 0xFF; pair.second.cpu->_registers.pac = 0x808000; pair.second.cpu->_registers.dbr = 0x88; cr_assert_eq(pair.second.cpu->_getAbsoluteLongAddr(), 0xFF901C, "Returned address was %x but was expecting 0xFF901C.", pair.second.cpu->_getAbsoluteLongAddr()); cr_assert_eq(pair.second.cpu->_registers.pac, 0x808003); } Test(AddrMode, DirectIndirectIndexed) { auto pair = Init(); pair.second.cartridge->_data[0] = 0x10; pair.second.wram->_data[0x1010] = 0x30; pair.second.wram->_data[0x1011] = 0x40; pair.second.cpu->_registers.pac = 0x808000; pair.second.cpu->_registers.dbr = 0x80; pair.second.cpu->_registers.y = 0x0001; pair.second.cpu->_registers.d = 0x1000; cr_assert_eq(pair.second.cpu->_getDirectIndirectIndexedAddr(), 0x804031, "Returned address was %x but was expecting 0x804031.", pair.second.cpu->_getDirectIndirectIndexedAddr()); cr_assert_eq(pair.second.cpu->_registers.pac, 0x808001); } Test(AddrMode, DirectIndirectIndexedLong) { auto pair = Init(); pair.second.cpu->_registers.pac = 0x808000; pair.second.cpu->_registers.d = 0x1000; pair.second.cartridge->_data[0] = 0x10; pair.second.wram->_data[0x1010] = 0x30; pair.second.wram->_data[0x1011] = 0x40; pair.second.wram->_data[0x1012] = 0x23; cr_assert_eq(pair.second.cpu->_getDirectIndirectIndexedLongAddr(), 0x234030, "Returned address was %x but was expecting 0x234030.", pair.second.cpu->_getDirectIndirectIndexedLongAddr()); cr_assert_eq(pair.second.cpu->_registers.pac, 0x808001); } Test(AddrMode, DirectIndexedIndirect) { auto pair = Init(); pair.second.cartridge->_data[0] = 0x10; pair.second.cpu->_registers.d = 0x1000; pair.second.cpu->_registers.x = 0x0002; pair.second.wram->_data[0x1012] = 0x30; pair.second.wram->_data[0x1013] = 0x40; pair.second.cpu->_registers.dbr = 0x80; pair.second.cpu->_registers.pac = 0x808000; cr_assert_eq(pair.second.cpu->_getDirectIndexedIndirectAddr(), 0x804030, "Returned address was %x but was expecting 0x804030.", pair.second.cpu->_getDirectIndexedIndirectAddr()); cr_assert_eq(pair.second.cpu->_registers.pac, 0x808001); } Test(AddrMode, DirectIndexedByX) { auto pair = Init(); pair.second.cartridge->_data[0] = 0x10; pair.second.cpu->_registers.d = 0x1000; pair.second.cpu->_registers.x = 0x0002; pair.second.cpu->_registers.pac = 0x808000; cr_assert_eq(pair.second.cpu->_getDirectIndexedByXAddr(), 0x1012, "Returned address was %x but was expecting 0x1012.", pair.second.cpu->_getDirectIndexedByXAddr()); cr_assert_eq(pair.second.cpu->_registers.pac, 0x808001); } Test(AddrMode, DirectIndexedByY) { auto pair = Init(); pair.second.cartridge->_data[0] = 0x10; pair.second.cpu->_registers.d = 0x1000; pair.second.cpu->_registers.y = 0x0002; pair.second.cpu->_registers.pac = 0x808000; cr_assert_eq(pair.second.cpu->_getDirectIndexedByYAddr(), 0x1012, "Returned address was %x but was expecting 0x1012.", pair.second.cpu->_getDirectIndexedByYAddr()); cr_assert_eq(pair.second.cpu->_registers.pac, 0x808001); } Test(AddrMode, AbsoluteIndexByX) { auto pair = Init(); pair.second.cpu->_registers.pac = 0x808000; pair.second.cartridge->_data[0] = 0x10; pair.second.cartridge->_data[1] = 0xAC; pair.second.cpu->_registers.dbr = 0xEF; pair.second.cpu->_registers.x = 0x0005; cr_assert_eq(pair.second.cpu->_getAbsoluteIndexedByXAddr(), 0xEFAC15, "Returned address was %x but was expecting 0xEFAC15.", pair.second.cpu->_getAbsoluteIndexedByXAddr()); cr_assert_eq(pair.second.cpu->_registers.pac, 0x808002); } Test(AddrMode, AbsoluteIndexByY) { auto pair = Init(); pair.second.cpu->_registers.pac = 0x808000; pair.second.cartridge->_data[0] = 0x10; pair.second.cartridge->_data[1] = 0xAC; pair.second.cpu->_registers.dbr = 0xEF; pair.second.cpu->_registers.y = 0x0005; cr_assert_eq(pair.second.cpu->_getAbsoluteIndexedByYAddr(), 0xEFAC15, "Returned address was %x but was expecting 0xEFAC15.", pair.second.cpu->_getAbsoluteIndexedByYAddr()); cr_assert_eq(pair.second.cpu->_registers.pac, 0x808002); } Test(AddrMode, AbsoluteLongIndexByX) { auto pair = Init(); pair.second.cpu->_registers.pac = 0x808000; pair.second.cartridge->_data[0] = 0x10; pair.second.cartridge->_data[1] = 0xAC; pair.second.cartridge->_data[2] = 0xEF; pair.second.cpu->_registers.x = 0x0005; cr_assert_eq(pair.second.cpu->_getAbsoluteLongIndexedByXAddr(), 0xEFAC15, "Returned address was %x but was expecting 0xEFAC15.", pair.second.cpu->_getAbsoluteLongIndexedByXAddr()); cr_assert_eq(pair.second.cpu->_registers.pac, 0x808003); }