summaryrefslogtreecommitdiff
path: root/lib/ccdbg.h
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2008-12-30 22:35:53 -0800
committerKeith Packard <keithp@keithp.com>2008-12-30 22:38:35 -0800
commit6c2a65c743a4ffae96ed27dbc38c1bf9242ed1df (patch)
treebea5fb122dfcc2edfcff0baca30dd1166a1d24af /lib/ccdbg.h
parentea366058aa467a8a7caf17e7014758f3741ea7f7 (diff)
Save/restore registers to host during memory operations. Cache ROM data.
Because the debug port uses instructions for most operations, the debug code will clobber registers used by the running program. Save and restore these to avoid corrupting application data. If the ROM file is known, use that to return data instead of fetching it from the target to improve performance. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'lib/ccdbg.h')
-rw-r--r--lib/ccdbg.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/lib/ccdbg.h b/lib/ccdbg.h
index 203b5aeb..241c4eec 100644
--- a/lib/ccdbg.h
+++ b/lib/ccdbg.h
@@ -39,6 +39,7 @@
/* 8051 instructions
*/
+#define NOP 0x00
#define MOV_direct_data 0x75
#define LJMP 0x02
#define MOV_Rn_data(n) (0x78 | (n))
@@ -99,6 +100,9 @@
/* Bit-addressable accumulator */
#define ACC(bit) (0xE0 | (bit))
+/* Bit-addressable status word */
+#define PSW(bit) (0xD0 | (bit))
+
#define CP_USB_ASYNC
struct ccdbg {
@@ -107,6 +111,7 @@ struct ccdbg {
#else
struct cp_usb *cp;
#endif
+ struct hex_image *rom;
};
/* Intel hex file format data
@@ -130,6 +135,18 @@ struct hex_image {
uint8_t data[0];
};
+#define CC_STATE_ACC 0x1
+#define CC_STATE_PSW 0x2
+#define CC_STATE_DP 0x4
+
+#define CC_STATE_NSFR 5
+
+struct ccstate {
+ uint16_t mask;
+ uint8_t acc;
+ uint8_t sfr[CC_STATE_NSFR];
+};
+
#define HEX_RECORD_NORMAL 0x00
#define HEX_RECORD_EOF 0x01
#define HEX_RECORD_EXTENDED_ADDRESS 0x02
@@ -337,4 +354,30 @@ ccdbg_read_sfr(struct ccdbg *dbg, uint8_t addr, uint8_t *bytes, int nbytes);
uint8_t
ccdbg_write_sfr(struct ccdbg *dbg, uint8_t addr, uint8_t *bytes, int nbytes);
+/* ccdbg-rom.c */
+uint8_t
+ccdbg_set_rom(struct ccdbg *dbg, struct hex_image *rom);
+
+uint8_t
+ccdbg_rom_contains(struct ccdbg *dbg, uint16_t addr, int nbytes);
+
+uint8_t
+ccdbg_rom_replace_xmem(struct ccdbg *dbg,
+ uint16_t addrp, uint8_t *bytesp, int nbytes);
+
+/* ccdbg-state.c */
+uint8_t
+ccdbg_state_save(struct ccdbg *dbg, struct ccstate *state, unsigned int mask);
+
+uint8_t
+ccdbg_state_restore(struct ccdbg *dbg, struct ccstate *state);
+
+void
+ccdbg_state_replace_xmem(struct ccdbg *dbg, struct ccstate *state,
+ uint16_t addr, uint8_t *bytes, int nbytes);
+
+void
+ccdbg_state_replace_sfr(struct ccdbg *dbg, struct ccstate *state,
+ uint8_t addr, uint8_t *bytes, int nbytes);
+
#endif /* _CCDBG_H_ */