Save/restore regs when reading/writing memory. Add SFR access.
[fw/altos] / lib / ccdbg.h
index 4d4a648d41ccf61c8d6c0729bf43bb1d21ddf678..203b5aebb8c723b043f0654c95838afcfa7dcfac 100644 (file)
 #include <sys/types.h>
 #include <sys/ioctl.h>
 #include <sys/stat.h>
-#include "cp-usb.h"
+#include "ccdbg-debug.h"
+
 #define CC_CLOCK       0x1
 #define CC_DATA                0x2
 #define CC_RESET_N     0x4
-#define CC_CLOCK_US    (40)
+#define CC_CLOCK_US    (0)
 
 /* 8051 instructions
  */
@@ -43,6 +44,7 @@
 #define MOV_Rn_data(n)         (0x78 | (n))
 #define DJNZ_Rn_rel(n)         (0xd8 | (n))
 #define MOV_A_direct           0xe5
+#define MOV_direct1_direct2    0x85
 #define MOV_direct_A           0xf5
 #define MOV_DPTR_data16                0x90
 #define MOV_A_data             0x74
 /* 8051 special function registers
  */
 
+#define SFR_P0                 0x80
+#define SFR_SP                 0x81
+#define SFR_DPL0               0x82
+#define SFR_DPH0               0x83
+#define SFR_DPL1               0x84
+#define SFR_DPH1               0x85
+
 /* flash controller */
 #define FWT                    0xAB
 #define FADDRL                 0xAC
 /* Bit-addressable accumulator */
 #define ACC(bit)               (0xE0 | (bit))
 
+#define CP_USB_ASYNC
+
 struct ccdbg {
+#ifdef CP_USB_ASYNC
+       struct cp_usb_async *cp_async;
+#else
        struct cp_usb *cp;
+#endif
 };
 
 /* Intel hex file format data
@@ -153,14 +168,6 @@ struct hex_image {
 #define CC_STEP_REPLACE(n)     (0x64|(n))
 #define CC_GET_CHIP_ID         0x68
 
-/* Debug levels
- */
-#define CC_DEBUG_BITBANG       0x00000001
-#define CC_DEBUG_COMMAND       0x00000002
-#define CC_DEBUG_INSTRUCTIONS  0x00000004
-#define CC_DEBUG_EXECUTE       0x00000008
-#define CC_DEBUG_FLASH         0x00000010
-
 /* ccdbg-command.c */
 void
 ccdbg_debug_mode(struct ccdbg *dbg);
@@ -213,16 +220,6 @@ ccdbg_set_pc(struct ccdbg *dbg, uint16_t pc);
 uint8_t
 ccdbg_execute_hex_image(struct ccdbg *dbg, struct hex_image *image);
 
-/* ccdbg-debug.c */
-void
-ccdbg_debug(int level, char *format, ...);
-
-void
-ccdbg_add_debug(int level);
-
-void
-ccdbg_clear_debug(int level);
-
 /* ccdbg-flash.c */
 uint8_t
 ccdbg_flash_hex_image(struct ccdbg *dbg, struct hex_image *image);
@@ -250,8 +247,8 @@ ccdbg_half_clock(struct ccdbg *dbg);
 int
 ccdbg_write(struct ccdbg *dbg, uint8_t mask, uint8_t value);
 
-uint8_t
-ccdbg_read(struct ccdbg *dbg);
+void
+ccdbg_read(struct ccdbg *dbg, uint8_t *valuep);
 
 struct ccdbg *
 ccdbg_open(void);
@@ -298,15 +295,18 @@ ccdbg_send_byte(struct ccdbg *dbg, uint8_t byte);
 void
 ccdbg_send_bytes(struct ccdbg *dbg, uint8_t *bytes, int nbytes);
 
-uint8_t
-ccdbg_recv_bit(struct ccdbg *dbg, int first);
+void
+ccdbg_recv_bit(struct ccdbg *dbg, int first, uint8_t *bit);
 
-uint8_t
-ccdbg_recv_byte(struct ccdbg *dbg, int first);
+void
+ccdbg_recv_byte(struct ccdbg *dbg, int first, uint8_t *byte);
 
 void
 ccdbg_recv_bytes(struct ccdbg *dbg, uint8_t *bytes, int nbytes);
 
+void
+ccdbg_sync_io(struct ccdbg *dbg);
+
 void
 ccdbg_print(char *format, uint8_t mask, uint8_t set);
 
@@ -331,4 +331,10 @@ ccdbg_write_hex_image(struct ccdbg *dbg, struct hex_image *image, uint16_t offse
 struct hex_image *
 ccdbg_read_hex_image(struct ccdbg *dbg, uint16_t address, uint16_t length);
 
+uint8_t
+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);
+
 #endif /* _CCDBG_H_ */