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