1 /*
2 * UAE - The Un*x Amiga Emulator
3 *
4 * Events
5 * These are best for low-frequency events. Having too many of them,
6 * or using them for events that occur too frequently, can cause massive
7 * slowdown.
8 *
9 * Copyright 1995-1998 Bernd Schmidt
10 */
11
12 #ifndef HATARI_EVENT_H
13 #define HATARI_EVENT_H
14
15 #undef EVENT_DEBUG
16
17 #define do_cycles do_cycles_slow
18
19 extern void reset_frame_rate_hack (void);
20 extern int rpt_available;
21
22 extern void compute_vsynctime (void);
23 extern void init_eventtab (void);
24 extern void do_cycles_ce (long cycles);
25 extern void do_cycles_ce020 (int clocks);
26 extern void do_cycles_ce020_mem (int clocks);
27 extern void do_cycles_ce000 (int clocks);
28 extern int is_cycle_ce (void);
29 extern int current_hpos (void);
30
31 static void events_schedule (void);
32
33 extern unsigned long currcycle, nextevent, is_lastline;
34 typedef void (*evfunc)(void);
35 typedef void (*evfunc2)(uae_u32);
36
37 typedef unsigned long int evt;
38
39 struct ev
40 {
41 int active;
42 evt evtime, oldcycles;
43 evfunc handler;
44 };
45
46 struct ev2
47 {
48 int active;
49 evt evtime;
50 uae_u32 data;
51 evfunc2 handler;
52 };
53
54 enum {
55 ev_hsync, ev_audio, ev_cia, ev_misc,
56 ev_max
57 };
58
59 enum {
60 ev2_blitter, ev2_disk, ev2_misc,
61 ev2_max = 12
62 };
63
64 extern struct ev eventtab[ev_max];
65 extern struct ev2 eventtab2[ev2_max];
66
67 extern void event2_newevent (int, evt, uae_u32);
68 extern void event2_newevent2 (evt, uae_u32, evfunc2);
69 extern void event2_remevent (int);
70
71 /*#if 0
72 #ifdef JIT
73 #include "events_jit.h"
74 #else
75 #include "events_normal.h"
76 #endif
77 #else
78 #include "events_jit.h"
79 #endif
80 */
81
82 #include "events_normal.h"
83
84
cycles_in_range(unsigned long endcycles)85 STATIC_INLINE bool cycles_in_range (unsigned long endcycles)
86 {
87 signed long c = get_cycles ();
88 return (signed long)endcycles - c > 0;
89 }
90
91 #endif //HATARI_EVENT_H
92