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