@@ -371,6 +371,64 @@ pub const INSTRUCTIONS: &[Instruction] = &[
371371 assert ! ( !m. test_bit( "SR" , ZERO ) , "zero flag not cleared" ) ;
372372 } ,
373373 } ,
374+ Instruction {
375+ mnemonic : "INC" ,
376+ mode : Mode :: ZeroPage ,
377+ opcode : 0xE6 ,
378+ bytes : 2 ,
379+ cycles : 5 ,
380+ execute : |m| {
381+ let addr = u16:: from ( m. fetch8 ( ) ) ;
382+ let result = m. get8 ( addr) . wrapping_add ( 1 ) ;
383+ m. set8 ( addr, result) ;
384+ update_zero_flag ( m, result) ;
385+ } ,
386+ test : |m| {
387+ m. set8 ( 0x10 , 0xFF ) ;
388+ m. run_program ( & [
389+ 0xE6 , 0x10 , // $0000 INC $10
390+ 0x00 , // $0002 BRK
391+ ] ) ;
392+ assert_eq ! ( m. get8( 0x10 ) , 0x00 , "wrong value" ) ;
393+ assert ! ( m. test_bit( "SR" , ZERO ) , "zero flag not set" ) ;
394+
395+ m. run_program ( & [
396+ 0xE6 , 0x10 , // $0000 INC $10
397+ 0x00 , // $0002 BRK
398+ ] ) ;
399+ assert_eq ! ( m. get8( 0x10 ) , 0x01 , "wrong value" ) ;
400+ assert ! ( !m. test_bit( "SR" , ZERO ) , "zero flag not cleared" ) ;
401+ } ,
402+ } ,
403+ Instruction {
404+ mnemonic : "INC" ,
405+ mode : Mode :: Absolute ,
406+ opcode : 0xEE ,
407+ bytes : 3 ,
408+ cycles : 6 ,
409+ execute : |m| {
410+ let addr = m. fetch16 ( ) ;
411+ let result = m. get8 ( addr) . wrapping_add ( 1 ) ;
412+ m. set8 ( addr, result) ;
413+ update_zero_flag ( m, result) ;
414+ } ,
415+ test : |m| {
416+ m. set8 ( 0x1000 , 0xFF ) ;
417+ m. run_program ( & [
418+ 0xEE , 0x00 , 0x10 , // $0000 INC $1000
419+ 0x00 , // $0003 BRK
420+ ] ) ;
421+ assert_eq ! ( m. get8( 0x1000 ) , 0x00 , "wrong value" ) ;
422+ assert ! ( m. test_bit( "SR" , ZERO ) , "zero flag not set" ) ;
423+
424+ m. run_program ( & [
425+ 0xEE , 0x00 , 0x10 , // $0000 INC $1000
426+ 0x00 , // $0003 BRK
427+ ] ) ;
428+ assert_eq ! ( m. get8( 0x1000 ) , 0x01 , "wrong value" ) ;
429+ assert ! ( !m. test_bit( "SR" , ZERO ) , "zero flag not cleared" ) ;
430+ } ,
431+ } ,
374432 Instruction {
375433 mnemonic : "INX" ,
376434 mode : Mode :: Implied ,
0 commit comments