#include "reg8051.h"
#include "cpu8051.h"
#include "memory.h"
+#include "psw.h"
#include "disasm.h"
#include "instructions_8051.h"
memory_sfr_write8(_P1_, 0xFF);
memory_sfr_write8(_P2_, 0xFF);
memory_sfr_write8(_P3_, 0xFF);
+
+ /* The default value of SP (after system reset) is 07 */
memory_sfr_write8(_SP_, 0x07);
}
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;
}
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();