1  /*
2   * E-UAE - The portable Amiga Emulator
3   *
4   * Support for traps
5   *
6   * Copyright Richard Drummond 2005
7   *
8   * Based on code:
9   * Copyright 1995, 1996 Bernd Schmidt
10   * Copyright 1996 Ed Hanway
11   */
12 
13 #ifndef TRAPS_H
14 #define TRAPS_H
15 
16 /*
17  * Data passed to a trap handler
18  */
19 typedef struct TrapContext TrapContext;
20 
21 
22 #define TRAPFLAG_NO_REGSAVE  1
23 #define TRAPFLAG_NO_RETVAL   2
24 #define TRAPFLAG_EXTRA_STACK 4
25 #define TRAPFLAG_DORET       8
26 #define TRAPFLAG_UAERES     16
27 
28 /*
29  * A function which handles a 68k trap
30  */
31 typedef uae_u32 (REGPARAM3 *TrapHandler) (TrapContext *) REGPARAM;
32 
33 
34 /*
35  * Interface with 68k interpreter
36  */
37 extern void REGPARAM3 m68k_handle_trap (unsigned int trap_num) REGPARAM;
38 
39 unsigned int define_trap (TrapHandler handler_func, int flags, const TCHAR *name);
40 uaecptr find_trap (const TCHAR *name);
41 
42 /*
43  * Call a 68k Library function from an extended trap
44  */
45 extern uae_u32 CallLib (TrapContext *context, uaecptr library_base, uae_s16 func_offset);
46 extern uae_u32 CallFunc (TrapContext *context, uaecptr func);
47 
48 /*
49  * Initialization
50  */
51 void init_traps (void);
52 void init_extended_traps (void);
53 
54 #define deftrap(f) define_trap((f), 0, _T(""))
55 #define deftrap2(f, mode, str) define_trap((f), (mode), (str))
56 #define deftrapres(f, mode, str) define_trap((f), (mode | TRAPFLAG_UAERES), (str))
57 
58 #endif
59