55#include "util.h"
66
77#define RESULT_COUNT 18
8- #define TEST_COUNT 7
8+ #define TEST_COUNT 8
99
1010extern void run_tests (void );
1111static void init (void );
@@ -18,12 +18,10 @@ extern volatile uint8_t g_results[RESULT_COUNT];
1818static const expected_result_t k_expected_results [RESULT_COUNT ] =
1919{
2020 /* Test 1: SEI/CLI IRQ latency */
21- EXPECT (0x01 ), /* CLI: INC ran before IRQ (value = 1) */
22- EXPECT (0x01 ), /* IRQ was actually taken */
21+ EXPECT (0x00 ), /* Pass=0, 1=INC fail, 2=IRQ not taken */
2322
2423 /* Test 2: D flag cleared on interrupt */
25- EXPECT (0x00 ), /* D flag should be cleared in IRQ handler */
26- EXPECT (0x08 ), /* D flag should be restored after RTI */
24+ EXPECT (0x00 ), /* Pass=0, 1=D not cleared, 2=D not restored */
2725
2826 /* Test 3: BCD arithmetic and flags */
2927 EXPECT (0x52 ), /* 0x29 + 0x23 = 0x52 in BCD */
@@ -48,20 +46,25 @@ static const expected_result_t k_expected_results[RESULT_COUNT] =
4846 EXPECT (0x01 ), /* SMB0: bit 0 set */
4947 EXPECT (0x01 ), /* BBR0: branch taken */
5048 EXPECT (0x01 ), /* BBS0: branch taken */
49+
50+ /* Test 8: 1-byte illegal NOPs don't acknowledge IRQs */
51+ EXPECT (0x00 ), /* Pass=0, non-zero=PC low byte where IRQ fired */
52+ EXPECT (0x00 ), /* Pass=0 (IRQ inside block), 1=fail */
5153};
5254
53- static const uint8_t k_test_offsets [TEST_COUNT ] = { 0 , 2 , 4 , 9 , 11 , 12 , 14 };
54- static const uint8_t k_test_counts [TEST_COUNT ] = { 2 , 2 , 5 , 2 , 1 , 2 , 4 };
55+ static const uint8_t k_test_offsets [TEST_COUNT ] = { 0 , 1 , 2 , 7 , 9 , 10 , 12 , 16 };
56+ static const uint8_t k_test_counts [TEST_COUNT ] = { 1 , 1 , 5 , 2 , 1 , 2 , 4 , 2 };
5557
5658static const char * k_test_names [TEST_COUNT ] =
5759{
5860 "SEI/CLI" ,
5961 "D FLAG IRQ" ,
60- "BCD" ,
62+ "BCD MATH " ,
6163 "BRK 2 BYTES" ,
6264 "JMP IND FIX" ,
63- "ILLEGAL OPS " ,
65+ "UNDOC NOPS " ,
6466 "RMB/SMB/BBx" ,
67+ "UNDC NOP IRQ" ,
6568};
6669
6770void main (void )
0 commit comments