1 2 3 #ifndef MACHINE_H 4 #define MACHINE_H 5 6 7 #include "cmds.h" 8 #include <sys/types.h> 9 #include <inttypes.h> 10 11 #include "uthash.h" 12 #include "utlist.h" 13 14 typedef enum { 15 SYM_ANY = 0, 16 SYM_CONST = 1, 17 SYM_ADDRESS = 2, 18 } symboltype; 19 20 typedef struct symbol_s symbol; 21 22 struct symbol_s { 23 const char *name; 24 const char *file; 25 const char *module; 26 int address; 27 symboltype symtype; 28 char islocal; 29 const char *section; 30 symbol *next; 31 UT_hash_handle hh; 32 }; 33 34 35 36 extern unsigned char a,b,c,d,e,h,l; 37 extern unsigned char a_,b_,c_,d_,e_,h_,l_; 38 extern unsigned char xh, xl, yh, yl; 39 extern unsigned short ff, pc, sp; 40 extern long long st; 41 42 43 #define is8080() ( (c_cpu & CPU_8080) ) 44 #define is8085() ( (c_cpu & CPU_8085) ) 45 #define is808x() ( (c_cpu & (CPU_8080|CPU_8085)) ) 46 #define isgbz80() ( (c_cpu & CPU_GBZ80) == CPU_GBZ80 ) 47 #define isr800() ( (c_cpu & CPU_R800) == CPU_R800 ) 48 #define israbbit() ( c_cpu & (CPU_R2K|CPU_R3K)) 49 #define israbbit3k() ( c_cpu & (CPU_R3K)) 50 #define isz180() ( c_cpu & (CPU_Z180)) 51 #define isez80() ( c_cpu & (CPU_EZ80)) 52 #define canaltreg() ( ( c_cpu & (CPU_8080|CPU_8085|CPU_GBZ80)) == 0 ) 53 #define canindex() ( ( c_cpu & (CPU_8080|CPU_8085|CPU_GBZ80)) == 0 ) 54 #define canixh() ( c_cpu & (CPU_Z80|CPU_Z80N|CPU_R800|CPU_EZ80)) 55 #define cansll() ( c_cpu & (CPU_Z80|CPU_Z80N)) 56 #define canz180() ( c_cpu & (CPU_Z180|CPU_EZ80)) 57 #define cancbundoc() ( c_cpu & (CPU_Z80|CPU_Z80N)) 58 59 extern int c_cpu; 60 extern int trace; 61 extern int debugger_active; 62 extern int rom_size; /* amount of memory in low addresses that is read-only */ 63 extern int ioport; 64 extern int rc2014_mode; 65 66 /* Break down flags */ 67 extern int f(void); 68 extern int f_(void); 69 70 #define SET_ERROR(error) do { \ 71 if ( (error) == Z88DK_ENONE ) { \ 72 ff &= ~256; \ 73 } else { \ 74 ff |= 256; \ 75 a = (error); \ 76 } \ 77 } while (0) 78 79 #define CPU_Z80 1 80 #define CPU_Z180 2 81 #define CPU_R2K 4 82 #define CPU_R3K 8 83 #define CPU_Z80N 16 84 #define CPU_R800 32 85 #define CPU_GBZ80 64 86 #define CPU_8080 128 87 #define CPU_8085 256 88 #define CPU_EZ80 512 89 90 #define Z88DK_O_RDONLY 0 91 #define Z88DK_O_WRONLY 1 92 #define Z88DK_O_RDWR 2 93 #define Z88DK_O_TRUNC 512 94 #define Z88DK_O_APPEND 256 95 #define Z88DK_O_CREAT 1024 96 97 #define Z88DK_SEEK_SET 0 98 #define Z88DK_SEEK_END 1 99 #define Z88DK_SEEK_CUR 2 100 101 102 #define Z88DK_ENONE 0 103 #define Z88DK_EACCES 1 104 #define Z88DK_EBADF 2 105 #define Z88DK_EDEVNF 3 106 #define Z88DK_EINVAL 4 107 #define Z88DK_ENFILE 5 108 #define Z88DK_ENOMEM 6 109 110 typedef void (*hook_command)(void); 111 112 extern void PatchZ80(void); 113 extern void hook_init(void); 114 extern void hook_io_init(hook_command *cmds); 115 extern void hook_io_set_ide_device(int unit, const char *file); 116 extern void hook_misc_init(hook_command *cmds); 117 extern void hook_cpm(void); 118 extern void hook_rc2014(void); 119 extern void hook_console_init(hook_command *cmds); 120 extern void debugger_init(); 121 extern void debugger(); 122 extern void debugger_write_memory(int addr, uint8_t val); 123 extern void debugger_read_memory(int addr); 124 extern int disassemble2(int pc, char *buf, size_t buflen, int compact); 125 extern void read_symbol_file(char *filename); 126 extern const char *find_symbol(int addr, symboltype preferred_symtype); 127 extern symbol *find_symbol_byname(const char *name); 128 extern int symbol_resolve(char *name); 129 extern char **parse_words(char *line, int *argc); 130 extern int symbol_find_lower(int addr, symboltype preferred_type, char *buf, size_t buflen); 131 132 extern void memory_init(char *model); 133 extern void memory_handle_paging(int port, int value); 134 extern void memory_reset_paging(); 135 136 137 extern void out(int port, int value); 138 139 140 extern uint8_t *get_memory_addr(int pc); 141 142 extern uint8_t get_memory(int pc); 143 extern uint8_t put_memory(int pc, uint8_t b); 144 145 // acia 146 extern int acia_out(int port, int value); 147 extern int acia_in(int port); 148 149 // am9511 150 extern int apu_out(int port, int value); 151 extern int apu_in(int port); 152 extern void apu_reset(void); 153 extern uint8_t apu_read_status(void); 154 extern uint8_t apu_read_data(); 155 extern void apu_write_data(uint8_t data); 156 extern void apu_write_command(uint8_t cmd); 157 158 extern int hook_console_out(int port, int value); 159 extern int hook_console_in(int port); 160 161 // srcfile 162 extern void srcfile_display(const char *filename, int start_line, int count, int highlight); 163 164 165 // debug 166 extern void debug_add_info_encoded(char *encoded); 167 extern int debug_find_source_location(int address, const char **filename, int *lineno); 168 extern void debug_add_cline(const char *filename, int lineno, const char *address); 169 extern int debug_resolve_source(char *name); 170 171 #ifndef WIN32 172 extern int kbhit(); 173 extern int getch(); 174 #else 175 #include <conio.h> 176 #endif 177 178 #endif 179