diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2020-12-12 20:14:45 +0100 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2020-12-12 20:14:45 +0100 |
commit | 8dde478cfc2174f198290be40a633a4c9c9db833 (patch) | |
tree | f3ebae298dc285fd407093efbf774a684f520867 /emu/tests/test_cpu_6502.c | |
parent | 1269d11d15f1014b7ac87fc2bb2c76367404e16c (diff) | |
download | 6502-8dde478cfc2174f198290be40a633a4c9c9db833.tar.gz 6502-8dde478cfc2174f198290be40a633a4c9c9db833.tar.bz2 |
some more testing
Diffstat (limited to 'emu/tests/test_cpu_6502.c')
-rw-r--r-- | emu/tests/test_cpu_6502.c | 90 |
1 files changed, 81 insertions, 9 deletions
diff --git a/emu/tests/test_cpu_6502.c b/emu/tests/test_cpu_6502.c index 6f53ff0..a6a97cc 100644 --- a/emu/tests/test_cpu_6502.c +++ b/emu/tests/test_cpu_6502.c @@ -51,18 +51,27 @@ void teardown( void ) START_TEST( test_cpu_6502_nop ) { cpu_6502_t before_cpu; + memory_t before_ram; cpu_6502_reset( &cpu ); memory_reset( &rom ); memory_reset( &ram ); + memset( code, 0, ROM_SIZE ); code[0] = 0xea; // NOP codesize = 1; memory_set( &rom, 0x00, code, codesize ); memcpy( &before_cpu, &cpu, sizeof( cpu ) ); + memory_copy( &before_ram, &ram ); + cpu_6502_run( &cpu, 1 ); + fprintf( stderr, "state before:\n" ); + cpu_6502_print_debug( &before_cpu ); + fprintf( stderr, "state after:\n" ); + cpu_6502_print_debug( &cpu ); + ck_assert_int_eq( cpu.error_state, ERROR_STATE_OK ); ck_assert_int_eq( cpu.PC, before_cpu.PC+1 ); ck_assert_int_eq( cpu.SP, before_cpu.SP ); @@ -70,17 +79,22 @@ START_TEST( test_cpu_6502_nop ) ck_assert_int_eq( cpu.A, before_cpu.A ); ck_assert_int_eq( cpu.X, before_cpu.X ); ck_assert_int_eq( cpu.Y, before_cpu.Y ); + ck_assert_mem_eq( ram.cell, before_ram.cell, ram.size ); + + memory_deinit( &before_ram ); } END_TEST START_TEST( test_cpu_6502_txs ) { cpu_6502_t before_cpu; + memory_t before_ram; cpu_6502_reset( &cpu ); memory_reset( &rom ); memory_reset( &ram ); + memset( code, 0, ROM_SIZE ); code[0] = 0x9a; // TXS codesize = 1; memory_set( &rom, 0x00, code, codesize ); @@ -88,7 +102,14 @@ START_TEST( test_cpu_6502_txs ) cpu.X = 0xff; memcpy( &before_cpu, &cpu, sizeof( cpu ) ); + memory_copy( &before_ram, &ram ); + cpu_6502_run( &cpu, 1 ); + + fprintf( stderr, "state before:\n" ); + cpu_6502_print_debug( &before_cpu ); + fprintf( stderr, "state after:\n" ); + cpu_6502_print_debug( &cpu ); ck_assert_int_eq( cpu.error_state, ERROR_STATE_OK ); ck_assert_int_eq( cpu.PC, before_cpu.PC+1 ); @@ -97,24 +118,75 @@ START_TEST( test_cpu_6502_txs ) ck_assert_int_eq( cpu.A, before_cpu.A ); ck_assert_int_eq( cpu.X, 0xff ); ck_assert_int_eq( cpu.Y, before_cpu.Y ); + ck_assert_mem_eq( ram.cell, before_ram.cell, ram.size ); + + memory_deinit( &before_ram ); +} +END_TEST + +START_TEST( test_cpu_6502_ldx ) +{ + cpu_6502_t before_cpu; + memory_t before_ram; + + cpu_6502_reset( &cpu ); + memory_reset( &rom ); + memory_reset( &ram ); + + memset( code, 0, ROM_SIZE ); + code[0] = 0xa2; // LDX immediate + code[1] = 0x01; // #$1 + codesize = 2; + memory_set( &rom, 0x00, code, codesize ); + + cpu.X = 0xff; + + memcpy( &before_cpu, &cpu, sizeof( cpu ) ); + memory_copy( &before_ram, &ram ); + + cpu_6502_run( &cpu, 1 ); + + fprintf( stderr, "state before:\n" ); + cpu_6502_print_debug( &before_cpu ); + fprintf( stderr, "state after:\n" ); + cpu_6502_print_debug( &cpu ); + + ck_assert_int_eq( cpu.error_state, ERROR_STATE_OK ); + ck_assert_int_eq( cpu.PC, before_cpu.PC+2 ); + ck_assert_int_eq( cpu.SP, before_cpu.SP ); + ck_assert_int_eq( cpu.PS & ~( PS_N | PS_Z ), before_cpu.PS & ~( PS_N | PS_Z ) ); + ck_assert( !cpu_6502_is_zero( &cpu ) ); + ck_assert( !cpu_6502_is_negative( &cpu ) ); + ck_assert_int_eq( cpu.A, before_cpu.A ); + ck_assert_int_eq( cpu.X, 0x01 ); + ck_assert_int_eq( cpu.Y, before_cpu.Y ); + ck_assert_mem_eq( ram.cell, before_ram.cell, ram.size ); + + memory_deinit( &before_ram ); } END_TEST Suite *make_cpu_6502_testsuite( void ) { Suite *suite; + TCase *tc; suite = suite_create( "6502 CPU tests" ); - TCase *tc_nop = tcase_create( "NOP" ); - tcase_add_checked_fixture( tc_nop, setup, teardown); - tcase_add_test( tc_nop, test_cpu_6502_nop ); - suite_add_tcase( suite, tc_nop ); - - TCase *tc_txs = tcase_create( "TXS" ); - tcase_add_checked_fixture( tc_txs, setup, teardown); - tcase_add_test( tc_txs, test_cpu_6502_txs ); - suite_add_tcase( suite, tc_txs ); + tc = tcase_create( "NOP" ); + tcase_add_unchecked_fixture( tc, setup, teardown); + tcase_add_test( tc, test_cpu_6502_nop ); + suite_add_tcase( suite, tc ); + + tc = tcase_create( "TXS" ); + tcase_add_unchecked_fixture( tc, setup, teardown); + tcase_add_test( tc, test_cpu_6502_txs ); + suite_add_tcase( suite, tc ); + + tc = tcase_create( "LDX" ); + tcase_add_unchecked_fixture( tc, setup, teardown); + tcase_add_test( tc, test_cpu_6502_ldx ); + suite_add_tcase( suite, tc ); return suite; } |