Merge remote-tracking branch 'sliedes/to-upstream' into dev-home
[simavr] / simavr / sim / sim_avr.h
1 /*
2         sim_avr.h
3
4         Copyright 2008, 2009 Michel Pollet <buserror@gmail.com>
5
6         This file is part of simavr.
7
8         simavr is free software: you can redistribute it and/or modify
9         it under the terms of the GNU General Public License as published by
10         the Free Software Foundation, either version 3 of the License, or
11         (at your option) any later version.
12
13         simavr is distributed in the hope that it will be useful,
14         but WITHOUT ANY WARRANTY; without even the implied warranty of
15         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16         GNU General Public License for more details.
17
18         You should have received a copy of the GNU General Public License
19         along with simavr.  If not, see <http://www.gnu.org/licenses/>.
20  */
21
22 #ifndef __SIM_AVR_H__
23 #define __SIM_AVR_H__
24
25 #include <stdint.h>
26 #include <inttypes.h>
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31
32 #include "sim_irq.h"
33
34 typedef uint64_t avr_cycle_count_t;
35 typedef uint16_t        avr_io_addr_t;
36
37 // printf() conversion specifier for avr_cycle_count_t
38 #define PRI_avr_cycle_count PRIu64
39
40 struct avr_t;
41 typedef uint8_t (*avr_io_read_t)(struct avr_t * avr, avr_io_addr_t addr, void * param);
42 typedef void (*avr_io_write_t)(struct avr_t * avr, avr_io_addr_t addr, uint8_t v, void * param);
43 typedef avr_cycle_count_t (*avr_cycle_timer_t)(struct avr_t * avr, avr_cycle_count_t when, void * param);
44
45 enum {
46         // SREG bit indexes
47         S_C = 0,S_Z,S_N,S_V,S_S,S_H,S_T,S_I,
48
49         // 16 bits register pairs
50         R_XL    = 0x1a, R_XH,R_YL,R_YH,R_ZL,R_ZH,
51         // stack pointer
52         R_SPL   = 32+0x3d, R_SPH,
53         // real SREG
54         R_SREG  = 32+0x3f,
55
56         // maximum number of IO registers, on normal AVRs
57         MAX_IOs = 256 - 32,     // minus 32 GP registers
58 };
59
60 #define AVR_DATA_TO_IO(v) ((v) - 32)
61 #define AVR_IO_TO_DATA(v) ((v) + 32)
62
63 /*
64  * Core states.
65  */
66 enum {
67         cpu_Limbo = 0,  // before initialization is finished
68         cpu_Stopped,    // all is stopped, timers included
69
70         cpu_Running,    // we're free running
71
72         cpu_Sleeping,   // we're now sleeping until an interrupt
73
74         cpu_Step,               // run ONE instruction, then...
75         cpu_StepDone,   // tell gdb it's all OK, and give it registers
76 };
77
78 // this is only ever used if CONFIG_SIMAVR_TRACE is defined
79 struct avr_trace_data_t {
80         struct avr_symbol_t ** codeline;
81
82         /* DEBUG ONLY
83          * this keeps track of "jumps" ie, call,jmp,ret,reti and so on
84          * allows dumping of a meaningful data even if the stack is
85          * munched and so on
86          */
87         #define OLD_PC_SIZE     32
88         struct {
89                 uint32_t pc;
90                 uint16_t sp;
91         } old[OLD_PC_SIZE]; // catches reset..
92         int                     old_pci;
93
94 #if AVR_STACK_WATCH
95         #define STACK_FRAME_SIZE        32
96         // this records the call/ret pairs, to try to catch
97         // code that munches the stack -under- their own frame
98         struct {
99                 uint32_t        pc;
100                 uint16_t        sp;             
101         } stack_frame[STACK_FRAME_SIZE];
102         int                     stack_frame_index;
103 #endif
104
105         // DEBUG ONLY
106         // keeps track of which registers gets touched by instructions
107         // reset before each new instructions. Allows meaningful traces
108         uint32_t        touched[256 / 32];      // debug
109 };
110
111 /*
112  * Main AVR instance. Some of these fields are set by the AVR "Core" definition files
113  * the rest is runtime data (as little as possible)
114  */
115 typedef struct avr_t {
116         const char * mmcu;      // name of the AVR
117         // these are filled by sim_core_declare from constants in /usr/lib/avr/include/avr/io*.h
118         uint16_t        ramend;         
119         uint32_t        flashend;
120         uint32_t        e2end;
121         uint8_t         vector_size;
122         uint8_t         signature[3];
123         uint8_t         fuse[4];
124         avr_io_addr_t   rampz;  // optional, only for ELPM/SPM on >64Kb cores
125         avr_io_addr_t   eind;   // optional, only for EIJMP/EICALL on >64Kb cores
126
127         // filled by the ELF data, this allow tracking of invalid jumps
128         uint32_t                        codeend;
129
130         int                                     state;          // stopped, running, sleeping
131         uint32_t                        frequency;      // frequency we are running at
132         // mostly used by the ADC for now
133         uint32_t                        vcc,avcc,aref; // (optional) voltages in millivolts
134
135         // cycles gets incremented when sleeping and when running; it corresponds
136         // not only to "cycles that runs" but also "cycles that might have run"
137         // like, sleeping.
138         avr_cycle_count_t       cycle;          // current cycle
139         
140         // called at init time
141         void (*init)(struct avr_t * avr);
142         // called at init time (for special purposes like using a memory mapped file as flash see: simduino)
143         void (*special_init)(struct avr_t * avr);
144         // called at termination time ( to clean special initalizations)
145         void (*special_deinit)(struct avr_t * avr);
146         // called at reset time
147         void (*reset)(struct avr_t * avr);
148
149         /*!
150          * Default AVR core run function.
151          * Two modes are available, a "raw" run that goes as fast as
152          * it can, and a "gdb" mode that also watchouts for gdb events
153          * and is a little bit slower.
154          */
155         void (*run)(struct avr_t * avr);
156
157         /*!
158          * Sleep default behaviour.
159          * In "raw" mode, it calls usleep, in gdb mode, it waits
160          * for howLong for gdb command on it's sockets.
161          */
162         void (*sleep)(struct avr_t * avr, avr_cycle_count_t howLong);
163
164         /*!
165          * Every IRQs will be stored in this pool. It is not
166          * mandatory (yet) but will allow listing IRQs and their connections
167          */
168         avr_irq_pool_t  irq_pool;
169
170         // Mirror of the SREG register, to facilitate the access to bits
171         // in the opcode decoder.
172         // This array is re-synthetized back/forth when SREG changes
173         uint8_t         sreg[8];
174         uint8_t         i_shadow;       // used to detect edges on I flag
175
176         /* 
177          * ** current PC **
178          * Note that the PC is representing /bytes/ while the AVR value is
179          * assumed to be "words". This is in line with what GDB does...
180          * this is why you will see >>1 and <<1 in the decoder to handle jumps.
181          * It CAN be a little confusing, so concentrate, young grasshopper.
182          */
183         uint32_t        pc;
184
185         /*
186          * callback when specific IO registers are read/written.
187          * There is one drawback here, there is in way of knowing what is the
188          * "beginning of useful sram" on a core, so there is no way to deduce
189          * what is the maximum IO register for a core, and thus, we can't
190          * allocate this table dynamically.
191          * If you wanted to emulate the BIG AVRs, and XMegas, this would need
192          * work.
193          */
194         struct {
195                 struct avr_irq_t * irq; // optional, used only if asked for with avr_iomem_getirq()
196                 struct {
197                         void * param;
198                         avr_io_read_t c;
199                 } r;
200                 struct {
201                         void * param;
202                         avr_io_write_t c;
203                 } w;
204         } io[MAX_IOs];
205
206         /*
207          * This block allows sharing of the IO write/read on addresses between
208          * multiple callbacks. In 99% of case it's not needed, however on the tiny*
209          * (tiny85 at last) some registers have bits that are used by different
210          * IO modules.
211          * If this case is detected, a special "dispatch" callback is installed that
212          * will handle this particular case, without impacting the performance of the
213          * other, normal cases...
214          */
215         int     io_shared_io_count;
216         struct {
217                 int used;
218                 struct {
219                         void * param;
220                         void * c;
221                 } io[4];
222         } io_shared_io[4];
223
224         // flash memory (initialized to 0xff, and code loaded into it)
225         uint8_t *       flash;
226         // this is the general purpose registers, IO registers, and SRAM
227         uint8_t *       data;
228
229         // queue of io modules
230         struct avr_io_t *io_port;
231
232         // cycle timers are callbacks that will be called when "when" cycle is reached
233         // the bitmap allows quick knowledge of whether there is anything to call
234         // these timers are one shots, then get cleared if the timer function returns zero,
235         // they get reset if the callback function returns a new cycle number
236         uint32_t        cycle_timer_map;
237         avr_cycle_count_t next_cycle_timer;
238         struct {
239                 avr_cycle_count_t       when;
240                 avr_cycle_timer_t       timer;
241                 void * param;
242         } cycle_timer[32];
243
244         // interrupt vectors, and their enable/clear registers
245         struct avr_int_vector_t * vector[64];
246         uint8_t         pending_wait;   // number of cycles to wait for pending
247         uint32_t        pending[2];             // pending interrupts
248
249         // DEBUG ONLY -- value ignored if CONFIG_SIMAVR_TRACE = 0
250         int             trace;
251
252         // Only used if CONFIG_SIMAVR_TRACE is defined
253         struct avr_trace_data_t *trace_data;
254
255         // VALUE CHANGE DUMP file (waveforms)
256         // this is the VCD file that gets allocated if the 
257         // firmware that is loaded explicitly asks for a trace
258         // to be generated, and allocates it's own symbols
259         // using AVR_MMCU_TAG_VCD_TRACE (see avr_mcu_section.h)
260         struct avr_vcd_t * vcd;
261         
262         // gdb hooking structure. Only present when gdb server is active
263         struct avr_gdb_t * gdb;
264
265         // if non-zero, the gdb server will be started when the core
266         // crashed even if not activated at startup
267         // if zero, the simulator will just exit() in case of a crash
268         int             gdb_port;
269 } avr_t;
270
271
272 // this is a static constructor for each of the AVR devices
273 typedef struct avr_kind_t {
274         const char * names[4];  // name aliases
275         avr_t * (*make)();
276 } avr_kind_t;
277
278 // a symbol loaded from the .elf file
279 typedef struct avr_symbol_t {
280         const char * symbol;
281         uint32_t        addr;
282 } avr_symbol_t;
283
284 // locate the maker for mcu "name" and allocates a new avr instance
285 avr_t * avr_make_mcu_by_name(const char *name);
286 // initializes a new AVR instance. Will call the IO registers init(), and then reset()
287 int avr_init(avr_t * avr);
288 // resets the AVR, and the IO modules
289 void avr_reset(avr_t * avr);
290 // run one cycle of the AVR, sleep if necessary
291 int avr_run(avr_t * avr);
292 // finish any pending operations 
293 void avr_terminate(avr_t * avr);
294
295 // set an IO register to receive commands from the AVR firmware
296 // it's optional, and uses the ELF tags
297 void avr_set_command_register(avr_t * avr, avr_io_addr_t addr);
298
299 // specify the "console register" -- output sent to this register
300 // is printed on the simulator console, without using a UART
301 void avr_set_console_register(avr_t * avr, avr_io_addr_t addr);
302
303 // load code in the "flash"
304 void avr_loadcode(avr_t * avr, uint8_t * code, uint32_t size, uint32_t address);
305
306
307 /*
308  * these are accessors for avr->data but allows watchpoints to be set for gdb
309  * IO modules use that to set values to registers, and the AVR core decoder uses
310  * that to register "public" read by instructions.
311  */
312 void avr_core_watch_write(avr_t *avr, uint16_t addr, uint8_t v);
313 uint8_t avr_core_watch_read(avr_t *avr, uint16_t addr);
314
315 // called when the core has detected a crash somehow.
316 // this might activate gdb server
317 void avr_sadly_crashed(avr_t *avr, uint8_t signal);
318
319
320 /*
321  * These are callbacks for the two 'main' bahaviour in simavr
322  */
323 void avr_callback_sleep_gdb(avr_t * avr, avr_cycle_count_t howLong);
324 void avr_callback_run_gdb(avr_t * avr);
325 void avr_callback_sleep_raw(avr_t * avr, avr_cycle_count_t howLong);
326 void avr_callback_run_raw(avr_t * avr);
327
328 #ifdef __cplusplus
329 };
330 #endif
331
332 #include "sim_io.h"
333 #include "sim_regbit.h"
334 #include "sim_interrupts.h"
335 #include "sim_cycle_timers.h"
336
337 #endif /*__SIM_AVR_H__*/
338