Add parity bit update each instruction cycle
[emu8051.git] / src / cpu8051.c
index 213f61b..55e761a 100644 (file)
@@ -28,6 +28,7 @@
 #include "reg8051.h"
 #include "cpu8051.h"
 #include "memory.h"
+#include "psw.h"
 #include "disasm.h"
 #include "instructions_8051.h"
 
@@ -211,12 +212,7 @@ cpu8051_ReadB(uint8_t bit_address)
 static void
 cpu8051_process_interrupt(int pc, int pri)
 {
-       unsigned char SP;
-
-       SP = cpu8051_ReadD(_SP_);
-       cpu8051_WriteI(++SP, (cpu8051.pc & 0xFF));
-       cpu8051_WriteI(++SP, (cpu8051.pc >> 8));
-       cpu8051_WriteD(_SP_, SP);
+       stack_push16(pc);
        cpu8051.pc = 0x0B;
        cpu8051.active_priority = pri;
 }
@@ -379,6 +375,12 @@ cpu8051_Exec(void)
        cpu8051.pc++;
        insttiming = (*opcode_table[opcode])(); /* Function callback. */
 
+       /*
+        * Parity bit (p): is automatically set or cleared in each machine
+        * cycle to establish even parity in the accumulator.
+        */
+       psw_compute_parity_bit();
+
        for (i = 0; i < insttiming; i++) {
                cpu8051_CheckInterrupts();
                cpu8051_DoTimers();