/* dsp.h
 *
 */

/* Boot/OS host vectors */
#define VEC_DOWNLOAD 0x24
#define VEC_EXECUTE  0x28
#define VEC_MONITOR  0x2a

/* Boot/Download error result codes */
#define DSP_NOERROR              0
#define DSP_BOOTERR_NOFILE       1
#define DSP_BOOTERR_BADFILE      2
#define DSP_BOOTERR_ILLEGALSPACE 3
#define DSP_BOOTERR_PMEMEXCEEDED 4

#define DSP_DOWNLOADERR_NOFILE         1
#define DSP_DOWNLOADERR_BADFILE        2
#define DSP_DOWNLOADERR_TARGETNOTREADY 3

/* Register indices for register file
 * - Assuming a register file is a "unsigned long [48]"
 */
#define DSP_REG_R0    0
#define DSP_REG_R1    1
#define DSP_REG_R2    2
#define DSP_REG_R3    3
#define DSP_REG_R4    4
#define DSP_REG_R5    5
#define DSP_REG_R6    6
#define DSP_REG_R7    7
#define DSP_REG_N0    8
#define DSP_REG_N1    9
#define DSP_REG_N2    10
#define DSP_REG_N3    11
#define DSP_REG_N4    12
#define DSP_REG_N5    13
#define DSP_REG_N6    14
#define DSP_REG_N7    15
#define DSP_REG_M0    16
#define DSP_REG_M1    17
#define DSP_REG_M2    18
#define DSP_REG_M3    19
#define DSP_REG_M4    20
#define DSP_REG_M5    21
#define DSP_REG_M6    22
#define DSP_REG_M7    23
#define DSP_REG_X1    24
#define DSP_REG_X0    25
#define DSP_REG_Y1    26
#define DSP_REG_Y0    27
#define DSP_REG_A2    28
#define DSP_REG_A1    29
#define DSP_REG_A0    30
#define DSP_REG_B2    31
#define DSP_REG_B1    32
#define DSP_REG_B0    33
#define DSP_REG_PC    34
#define DSP_REG_SR    35
#define DSP_REG_OMR   36
#define DSP_REG_SP    37
#define DSP_REG_LA    38
#define DSP_REG_LC    39
#define DSP_REG_MAX   39

/* Misc. Constants */
#define DSP_MAX_BREAKPOINTS  15

extern char *DSP_RegisterName[];

/*
 * Prototypes
 */
void          DSP_setPort(unsigned short port);
void          DSP_out(unsigned short port, unsigned char data);
unsigned char DSP_in(unsigned short port);
void          DSP_hostVector(unsigned short address);
void          DSP_reset();
int           DSP_boot(char *filename);
int           DSP_download(char *filename);
void          DSP_write1(unsigned char datum);
void          DSP_write2(unsigned short datum);
void          DSP_write(unsigned long datum);
unsigned long DSP_read1();
unsigned long DSP_read2();
unsigned long DSP_read();
double        DSP_readfp();

int DSP_debugEnter();
int DSP_debugLeave();
int DSP_debugGo();
int DSP_debugTrace();
int DSP_debugExecute(unsigned long word0, unsigned long word1);
int DSP_debugQueryBP(unsigned long *num,
                     unsigned long addrs[DSP_MAX_BREAKPOINTS]);
int DSP_debugSetBP(unsigned long addr);
int DSP_debugClearBP(unsigned long addr);
int DSP_debugWriteRegister(unsigned long reg, unsigned long value);
int DSP_debugReadRegister(unsigned long reg, unsigned long *value);
int DSP_debugWriteRegisters(unsigned long regs[DSP_REG_MAX]);
int DSP_debugReadRegisters(unsigned long regs[DSP_REG_MAX]);
int DSP_debugWriteStack(unsigned long ssh[15], unsigned long ssl[15]);
int DSP_debugReadStack(unsigned long ssh[15], unsigned long ssl[15]);
int DSP_debugWriteMemory(unsigned long space, unsigned long addr,
                         unsigned long count, unsigned long mem[]);
int DSP_debugReadMemory(unsigned long space, unsigned long addr,
                        unsigned long count, unsigned long mem[]);



