#ifndef _MAIN_H_ #define _MAIN_H_ /*****************************************************************************/ typedef unsigned char u8; typedef unsigned short u16; typedef unsigned int u32; typedef unsigned long long u64; #define REG(x) (*(volatile unsigned int*)(x)) #define REG32(x) (*(volatile unsigned int*)(x)) #define REG16(x) (*(volatile unsigned short*)(x)) #define REG8(x) (*(volatile unsigned char*)(x)) #define NULL ((void*)0) #define SS_ID REG16(0x25807000) #define SS_VER REG16(0x25807002) #define SS_CTRL REG16(0x25897004) #define SS_STAT REG16(0x25897008) #define SS_TIMER REG32(0x2589700c) #define SS_CMD REG16(0x25897010) #define SS_ARG REG16(0x25897014) // SS_CTRL #define SAROO_EN 0x8000 #define CS0_NONE 0x0000 #define CS0_DATA 0x1000 #define CS0_RAM1M 0x2000 #define CS0_RAM4M 0x3000 #define SAROO_LED 0x0100 // SS_CMD #define SSCMD_PRINTF 0x0001 #define SSCMD_LISTDISC 0x0002 #define SSCMD_LOADDISC 0x0003 #define SSCMD_CHECK 0x0004 #define SSCMD_UPDATE 0x0005 #define SSCMD_FILERD 0x0006 #define SSCMD_FILEWR 0x0007 /*****************************************************************************/ #define INDIRECT_CALL(addr, return_type, ...) (**(return_type(**)(__VA_ARGS__)) addr) #define bios_run_cd_player INDIRECT_CALL(0x0600026C, void, void) int bios_cd_cmd(void); int read_1st(void); void CHEAT_patch(void); void RUN_CHEAT(void); int cdc_read_sector(int fad, int size, u8 *buf); /*****************************************************************************/ extern const int HZ; void reset_timer(void); u32 get_timer(void); void usleep(u32 us); void msleep(u32 ms); /*****************************************************************************/ #define PAD_RIGHT (1<<15) #define PAD_LEFT (1<<14) #define PAD_DOWN (1<<13) #define PAD_UP (1<<12) #define PAD_START (1<<11) #define PAD_A (1<<10) #define PAD_C (1<<9) #define PAD_B (1<<8) #define PAD_RT (1<<7) #define PAD_X (1<<6) #define PAD_Y (1<<5) #define PAD_Z (1<<4) #define PAD_LT (1<<3) u32 pad_read(void); int smpc_cmd(int cmd); /*****************************************************************************/ void conio_init(void); void conio_put_char(int x, int y, int color, int ch); void conio_putc(int ch); u32 conio_getc(void); #define BUTTON_DOWN(stat, bt) ( (stat & ((bt<<16)|bt)) == ((bt<<16)|bt) ) #define BUTTON_UP (stat, bt) ( ((stat^(~bt)) & ((bt<<16)|bt)) == ((bt<<16)|bt) ) extern int fbw, fbh; void put_pixel(int x, int y, int c); void put_line (int x1, int y1, int x2, int y2, int c); void put_hline(int y, int x1, int x2, int c); void put_vline(int x, int y1, int y2, int c); void put_rect (int x1, int y1, int x2, int y2, int c); void put_box(int x1, int y1, int x2, int y2, int c); /*****************************************************************************/ void sci_init(void); void sci_putc(int ch); int sci_getc(int timeout); /*****************************************************************************/ extern void (*printk_putc)(int ch); int printk(char *fmt, ...); int snprintf(char *buf, int size, char *fmt, ...); #define sprintf(buf, fmt, ...) snprintf(buf, 1024, fmt, __VA_ARGS__) int strlen(char *s); int strcmp(char *s1, char *s2); int strncmp(char *s1, char *s2, int n); char *strcpy(char *dst, char *src); char *strncpy(char *dst, char *src, int n); char *strchr(char *s1, int ch); u32 strtoul(char *str, char **endptr, int requestedbase, int *ret); void *memset(void *s, int v, int n); void *memcpy(void *to, void *from, int n); int memcmp(void *dst, void *src, int n); /*****************************************************************************/ void sci_shell(void); int gets(char *buf, int len); int str2hex(char *str, int *hex); void dump(int argc, int *args, int width); void mem_dump(char *str, void *addr, int size); int read_file (char *name, int offset, int size, void *buf); int write_file(char *name, int offset, int size, void *buf); /*****************************************************************************/ typedef struct { u32 pr; u32 gbr; u32 vbr; u32 mach; u32 macl; u32 r15; u32 r14; u32 r13; u32 r12; u32 r11; u32 r10; u32 r9; u32 r8; u32 r7; u32 r6; u32 r5; u32 r4; u32 r3; u32 r2; u32 r1; u32 r0; u32 pc; u32 sr; }REGS; u32 crc32(u8 *buf, int len, u32 crc); u32 get_sr(void); void set_sr(u32 sr); void break_in_game(int break_pc, void *handle); void break_in_game_next(int break_pc, void *handle); void install_ubr_isr(void); void set_break_pc(u32 addr, u32 mask); void set_break_rw(u32 addr, u32 mask, int rw); #define BRK_READ 0x04 #define BRK_WRITE 0x08 #define BRK_RW 0x0c /*****************************************************************************/ typedef struct menu_desc_t { int num; int current; char title[64]; char items[11][64]; int (*handle)(int index); }MENU_DESC; #define MENU_EXIT 99 #define MENU_RESTART 98 void menu_init(void); void add_menu_item(MENU_DESC *menu, char *item); int menu_run(MENU_DESC *menu); void menu_status(MENU_DESC *menu, char *string); void draw_menu_frame(MENU_DESC *menu); void menu_update(MENU_DESC *menu); int menu_default(MENU_DESC *menu, int ctrl); /*****************************************************************************/ // game patch extern int skip_patch; void patch_game(char *id); /*****************************************************************************/ #endif