#include "common.h"
#include "cpu8051.h"
+#include "reg8051.h"
#include "hexfile.h"
#include "memory.h"
#include "options.h"
log_err("%s", strerror(errno));
exit(1);
}
+
+ memset(m->buf, 0x00, m->size);
}
}
memory_write8(INT_MEM_ID, address, value);
}
+void
+memory_sfr_write_dptr(u_int16_t value)
+{
+ memory_write8(INT_MEM_ID, _DPTRHIGH_, value >> 8);
+ memory_write8(INT_MEM_ID, _DPTRLOW_, (uint8_t) value);
+}
+
u_int8_t
memory_read8(enum mem_id_t id, unsigned long address)
{
return memory_read8(INT_MEM_ID, address);
}
+u_int16_t
+memory_sfr_read_dptr(void)
+{
+ return (memory_read8(INT_MEM_ID, _DPTRHIGH_) << 8) +
+ memory_read8(INT_MEM_ID, _DPTRLOW_);
+}
+
+void
+stack_push8(uint8_t value)
+{
+ uint8_t sp;
+
+ sp = memory_read8(INT_MEM_ID, _SP_);
+
+ memory_write8(INT_MEM_ID, ++sp, value);
+ memory_write8(INT_MEM_ID, _SP_, sp); /* Save new stack pointer */
+}
+
+void
+stack_push16(uint16_t value)
+{
+ uint8_t sp;
+
+ sp = memory_read8(INT_MEM_ID, _SP_);
+
+ memory_write8(INT_MEM_ID, ++sp, (uint8_t) value); /* Write LSB */
+ memory_write8(INT_MEM_ID, ++sp, value >> 8); /* Write MSB */
+ memory_write8(INT_MEM_ID, _SP_, sp); /* Save new stack pointer */
+}
+
+uint8_t
+stack_pop8(void)
+{
+ uint8_t sp;
+ uint8_t value;
+
+ sp = memory_read8(INT_MEM_ID, _SP_);
+
+ value = memory_read8(INT_MEM_ID, sp--);
+ memory_write8(INT_MEM_ID, _SP_, sp); /* Save new stack pointer */
+
+ return value;
+}
+
+uint16_t
+stack_pop16(void)
+{
+ uint8_t sp;
+ uint16_t value;
+
+ sp = memory_read8(INT_MEM_ID, _SP_);
+
+ value = memory_read8(INT_MEM_ID, sp--) << 8; /* Read MSB */
+ value |= memory_read8(INT_MEM_ID, sp--); /* Read LSB */
+ memory_write8(INT_MEM_ID, _SP_, sp); /* Save new stack pointer */
+
+ return value;
+}
+
+/* Read a 16-bit address from PGM memory, starting at <base> offset */
+uint16_t
+pgm_read_addr16(uint16_t base)
+{
+ uint16_t addr;
+
+ addr = memory_read8(PGM_MEM_ID, base) << 8; /* MSB */
+ addr |= memory_read8(PGM_MEM_ID, base + 1); /* LSB */
+
+ return addr;
+}
+
/* Dump memory */
void
DumpMem(char *Address, char *Asize, int memory_id)