nkeynes@185: #ifndef dc_lib_H nkeynes@185: #define dc_lib_H nkeynes@185: nkeynes@185: #include nkeynes@185: nkeynes@185: typedef unsigned char uint8_t; nkeynes@185: typedef unsigned short uint16_t; nkeynes@185: typedef unsigned int uint32_t; nkeynes@185: typedef volatile unsigned int vuint32_t; nkeynes@185: typedef volatile unsigned short vuint16_t; nkeynes@185: nkeynes@185: #define ASIC_STATUS0 0xA05F6900 nkeynes@185: #define ASIC_STATUS1 0xA05F6904 nkeynes@185: #define ASIC_STATUS2 0xA05F6908 nkeynes@185: #define ASIC_IRQB0 0xA05F6920 nkeynes@185: #define ASIC_IRQC2 0xA05f6938 nkeynes@185: #define IRQB0_MASK 0x0007B000 nkeynes@185: nkeynes@812: #define AICA_RESET 0xA0702C00 nkeynes@812: nkeynes@210: #define float_read(A) (*((volatile float*)(A))) nkeynes@210: #define float_write(A, V) ( (*((volatile float*)(A))) = (V) ) nkeynes@185: #define long_read(A) (*((volatile unsigned long*)(A))) nkeynes@185: #define long_write(A, V) ( (*((volatile unsigned long*)(A))) = (V) ) nkeynes@185: #define word_read(A) (*((volatile unsigned short*)(A))) nkeynes@185: #define word_write(A, V) ( (*((volatile unsigned short*)(A))) = (V) ) nkeynes@185: #define byte_read(A) (unsigned int)(*((volatile unsigned char*)(A))) nkeynes@185: #define byte_write(A, V) ( (*((volatile unsigned char*)(A))) = (V) ) nkeynes@185: nkeynes@185: int asic_wait(int event); nkeynes@185: void asic_clear(void); nkeynes@185: void asic_dump(FILE *f); nkeynes@185: nkeynes@185: void fwrite_dump(FILE *f, char *buf, int length); nkeynes@190: void fwrite_diff(FILE *f, char *expect, int exp_length, char *buf, int length); nkeynes@190: void fwrite_diff32(FILE *f, char *expect, int exp_length, char *buf, int length); nkeynes@185: nkeynes@185: void *align32(char *buf ); nkeynes@185: void write_asic_status(void); nkeynes@185: void reset_asic_status(void); nkeynes@185: nkeynes@812: #define aica_enable() long_write( AICA_RESET, (long_read(AICA_RESET) & 0xFFFFFFFE) ) nkeynes@812: #define aica_disable() long_write( AICA_RESET, (long_read(AICA_RESET) | 1) ) nkeynes@185: nkeynes@185: struct spudma_struct { nkeynes@185: uint32_t g2_addr; nkeynes@185: uint32_t sh4_addr; nkeynes@185: uint32_t count; nkeynes@185: uint32_t direction; nkeynes@185: uint32_t mode; nkeynes@185: uint32_t enable; nkeynes@185: uint32_t status; nkeynes@185: uint32_t blah; nkeynes@185: }; nkeynes@185: extern struct spudma_struct *spudma; nkeynes@185: nkeynes@185: #define get_asic_status() (long_read(ASIC_STATUS0)&EVENT_MAPLE_MASK) nkeynes@185: nkeynes@185: int is_start_pressed(); nkeynes@185: nkeynes@185: #define CHECK_IEQUALS( a, b ) if( a != b ) { fprintf(stderr, "Assertion failed at %s:%d: expected %08X, but was %08X\n", __FILE__, __LINE__, a, b ); return -1; } nkeynes@278: #define DMA_ALIGN(x) ((void *)((((unsigned int)(x))+0x1F)&0xFFFFFFE0)) nkeynes@185: nkeynes@976: nkeynes@976: /* SH4 Exceptions */ nkeynes@976: #define POWERON 0x000 /* reset vector */ nkeynes@976: #define MANRESET 0x020 /* reset vector */ nkeynes@976: #define OTLBMULTIHIT 0x140 /* reset vector */ nkeynes@976: #define RTLBMISS 0x040 /* TLB vector */ nkeynes@976: #define WTLBMISS 0x060 /* TLB vector */ nkeynes@976: #define FIRSTWRITE 0x080 nkeynes@976: #define READPROT 0x0A0 nkeynes@976: #define WRITEPROT 0x0C0 nkeynes@976: #define RADDERR 0x0E0 nkeynes@976: #define WADDERR 0x100 nkeynes@976: #define FPUEXC 0x120 nkeynes@976: #define ILLSLOT 0x1A0 nkeynes@976: #define RESINST 0x180 nkeynes@976: #define TRAP 0x160 nkeynes@976: #define FPUDIS 0x800 nkeynes@976: #define SLOTFPUDIS 0x820 nkeynes@976: nkeynes@185: #endif