Add overflow and auxiliary carry flags manipulation functions
[emu8051.git] / src / cpu8051.c
index b83175d..58a0e79 100644 (file)
@@ -95,6 +95,8 @@ ToggleBreakpoint(unsigned int address)
 void
 cpu8051_init(void)
 {
+       memory_init();
+
        cpu8051.pc = 0;
        cpu8051.clock = 0;
        cpu8051.active_priority = -1;
@@ -105,24 +107,20 @@ cpu8051_init(void)
 void
 cpu8051_Reset(void)
 {
-       int i;
-
        cpu8051.pc = 0;
        cpu8051.clock = 0;
        cpu8051.active_priority = -1;
 
-       /* Reset registers */
+       /* Clear IRAM and SFR. */
+       memory_clear(INT_MEM_ID);
 
-       for (i = 0; i < 256; i++) {
-               /* Clear  IRAM and SFR */
-               memory_write8(INT_MEM_ID, i, 0);
-       }
+       memory_sfr_write8(_P0_, 0xFF);
+       memory_sfr_write8(_P1_, 0xFF);
+       memory_sfr_write8(_P2_, 0xFF);
+       memory_sfr_write8(_P3_, 0xFF);
 
-       memory_write8(INT_MEM_ID, _P0_, 0xFF);
-       memory_write8(INT_MEM_ID, _P1_, 0xFF);
-       memory_write8(INT_MEM_ID, _P2_, 0xFF);
-       memory_write8(INT_MEM_ID, _P3_, 0xFF);
-       memory_write8(INT_MEM_ID, _SP_, 0x07);
+       /* The default value of SP (after system reset) is 07 */
+       memory_sfr_write8(_SP_, 0x07);
 }
 
 static void
@@ -213,12 +211,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;
 }