📄 armtest.cpp
字号:
CPPUNIT_ASSERT( r2 == 0xc00001c8 );
CPPUNIT_ASSERT( r3 == 0xffffff41 );
CPPUNIT_ASSERT( cpsr>>31== 1);
CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 0);
//-------------------------------------------------------- rm=0x20 rs=0xF000000F rdlo =156 rdhi=-189
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "smlal_7");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
//-------------------------------------------------------- use PC as rd
#endif
//____________________________________________________________________________
#ifdef TEST_UMULL
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "umull");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(3,r3);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( r2 == 0xFFFFFFFA );
CPPUNIT_ASSERT( r3 == 0x5);
CPPUNIT_ASSERT( cpsr>>31== 0);
CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 0);
//-------------------------------------------------------- rm=0xFFFFFFFF rs=6
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "umull_2");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(3,r3);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( r2 == 0x1);
CPPUNIT_ASSERT( r3 == 0xFFFFFFFE);
CPPUNIT_ASSERT( cpsr>>31== 1);
CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 0);
//-------------------------------------------------------- rm=0xFFFFFFFF rs=-1
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "umull_3");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(3,r3);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( r2 == 0x2 );
CPPUNIT_ASSERT( r3 == 0x0);
CPPUNIT_ASSERT( cpsr>>31== 0);
CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 0);
//-------------------------------------------------------- rm=1 rs=2
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "umull_4");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(3,r3);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( r2 == 0 );
CPPUNIT_ASSERT( r3 == 0 );
CPPUNIT_ASSERT( cpsr>>31== 0);
CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 1);
//-------------------------------------------------------- rm=0x1 rs=0
#endif
//____________________________________________________________________________
#ifdef TEST_UMLAL
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "umlal");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(3,r3);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( r2 == 0xFFFFFFFB );
CPPUNIT_ASSERT( r3 == 0x6);
CPPUNIT_ASSERT( cpsr>>31== 0);
CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 0);
//-------------------------------------------------------- rm=0xFFFFFFFF rs=6 rdlo =1 rdhi=1
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "umlal_2");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(3,r3);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( r2 == 0xf9);
CPPUNIT_ASSERT( r3 == 0x7);
CPPUNIT_ASSERT( cpsr>>31== 0);
CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 0);
//-------------------------------------------------------- rm=0xFFFFFFFF rs=6 rdlo =0xff rdhi=1
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "umlal_3");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(3,r3);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( r2 == 0x105 );
CPPUNIT_ASSERT( r3 == 0xFFFFFFFA);
CPPUNIT_ASSERT( cpsr>>31== 1);
CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 0);
//-------------------------------------------------------- rm=0xFFFFFFFF rs=-6 rdlo =0xff rdhi=1
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "umlal_4");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(3,r3);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( r2 == 0xF9 );
CPPUNIT_ASSERT( r3 == 0x5 );
CPPUNIT_ASSERT( cpsr>>31== 0);
CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 0);
//-------------------------------------------------------- rm=0xFFFFFFFF rs=6 rdlo =0xff rdhi=0xffffffff
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "umlal_5");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(3,r3);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( r2 == 0 );
CPPUNIT_ASSERT( r3 == 0 );
CPPUNIT_ASSERT( cpsr>>31== 0);
CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 1);
//-------------------------------------------------------- rm=0xFFFFFFFF rs=0 rdlo =0 rdhi=0
#endif
//____________________________________________________________________________
#ifdef TEST_MRS
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "mrs");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( r2 == cpsr );
//--------------------------------------------------------
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "msr1_1");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( (cpsr & 0xFF)== 0x7);
//--------------------------------------------------------
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "msr1_2");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
spsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_spsr().convert_to_int();
CPPUNIT_ASSERT( (spsr & 0xFF0000)== 0xA0000);
//--------------------------------------------------------
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "msr2_1");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( (cpsr & 0xFF000000)== 0xA000000);
//--------------------------------------------------------
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "msr2_2");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
spsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_spsr().convert_to_int();
CPPUNIT_ASSERT( (spsr & 0xFF00)== 0xA00);
//--------------------------------------------------------
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "mrs_2");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
spsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_spsr().convert_to_int();
CPPUNIT_ASSERT( r2 == spsr );
#endif
//____________________________________________________________________________
#ifdef TEST_STR
//-------------------------------------------------------- zero offset
// MOV r0,#0x10000002
// MOV r1,#0x000000E0
// STR r0,[r1]
std::vector<u8> buf;
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "str_1.axf");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->\
get_mmu().access(Memory_32Bit::MEMORY_READ,0xe0,4,buf);
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(1,r1);
u8 buf0 = buf[0];
u8 buf1 = buf[1];
u8 buf2 = buf[2];
u8 buf3 = buf[3];
CPPUNIT_ASSERT( buf0 == 0x02);
CPPUNIT_ASSERT( buf1 == 0x00);
CPPUNIT_ASSERT( buf2 == 0x00);
CPPUNIT_ASSERT( buf3 == 0x10);
CPPUNIT_ASSERT( r1 == 0x000000E0);
//-------------------------------------------------------- pre-indexed offset
// MOV r0,#0x30000004
// MOV r1,#0x000000E1
// STR r0,[r1,#0x3]
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "str_2.axf");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
std::vector<u8> STR_2_buf;
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->\
get_mmu().access(Memory_32Bit::MEMORY_READ,0xe4,4,STR_2_buf);
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(1,r1);
u8 STR_2_buf0 = STR_2_buf[0];
u8 STR_2_buf1 = STR_2_buf[1];
u8 STR_2_buf2 = STR_2_buf[2];
u8 STR_2_buf3 = STR_2_buf[3];
CPPUNIT_ASSERT( STR_2_buf0 == 0x04);
CPPUNIT_ASSERT( STR_2_buf1 == 0x00);
CPPUNIT_ASSERT( STR_2_buf2 == 0x00);
CPPUNIT_ASSERT( STR_2_buf3 == 0x30);
CPPUNIT_ASSERT( r1 == 0x000000E1);
//-------------------------------------------------------- pre-indexed offset with write-back
// MOV r0,#0x10000002
// MOV r1,#0x000000E1
// STR r0,[r1,#0x00000003]!
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "str_3.axf");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
std::vector<u8> STR_3_buf;
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->\
get_mmu().access(Memory_32Bit::MEMORY_READ,0xe4,4,STR_3_buf);
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(1,r1);
u8 STR_3_buf0 = STR_3_buf[0];
u8 STR_3_buf1 = STR_3_buf[1];
u8 STR_3_buf2 = STR_3_buf[2];
u8 STR_3_buf3 = STR_3_buf[3];
CPPUNIT_ASSERT( STR_3_buf0 == 0x02);
CPPUNIT_ASSERT( STR_3_buf1 == 0x00);
CPPUNIT_ASSERT( STR_3_buf2 == 0x00);
CPPUNIT_ASSERT( STR_3_buf3 == 0x10);
CPPUNIT_ASSERT( r1 == 0x000000E4);
//-------------------------------------------------------- post-indexed offset
// MOV r0,#0x10000002
// MOV r1,#0x000000E0
// STR r0,[r1],#0x00000002
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "str_4.axf");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
std::vector<u8> STR_4_buf;
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->\
get_mmu().access(Memory_32Bit::MEMORY_READ,0xe0,4,STR_4_buf);
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(1,r1);
u8 STR_4_buf0 = STR_4_buf[0];
u8 STR_4_buf1 = STR_4_buf[1];
u8 STR_4_buf2 = STR_4_buf[2];
u8 STR_4_buf3 = STR_4_buf[3];
CPPUNIT_ASSERT( STR_4_buf0 == 0x02);
CPPUNIT_ASSERT( STR_4_buf1 == 0x00);
CPPUNIT_ASSERT( STR_4_buf2 == 0x00);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -