Fix error with CJNE instruction
authorHugo Villeneuve <hugo@hugovil.com>
Sat, 7 Sep 2013 22:10:27 +0000 (18:10 -0400)
committerHugo Villeneuve <hugo@hugovil.com>
Sun, 8 Sep 2013 22:54:52 +0000 (18:54 -0400)
When the comparison was true, the PC was advanced by 2 instead of 3 bytes.

Error reported and fixed by Tobias Diedrich (ranma at tdiedrich.de).

src/opcode2c.pl

index 4741f07..a80f651 100755 (executable)
@@ -610,7 +610,7 @@ for ($i=0 ; $i< 256; $i++) {
            print INST_IMP "unsigned int reladdr = ((char) memory_read8(PGM_MEM_ID, cpu8051.pc)) + (cpu8051.pc + 1);\n";
            print INST_IMP "cpu8051_WriteD( _PSW_, ( cpu8051_ReadD( _PSW_ ) & 0x7F ) );\n";
            print INST_IMP "if ( destination < source ) cpu8051_WriteD( _PSW_, ( cpu8051_ReadD( _PSW_ ) | 0x80 ) );\n";
-           print INST_IMP "if ( destination != source ) cpu8051.pc = reladdr;\n";
+           print INST_IMP "if ( destination != source ) cpu8051.pc = reladdr; else cpu8051.pc++; \n";
        }
 
        # PUSH