forked from AZO234/NP2kai
-
Notifications
You must be signed in to change notification settings - Fork 0
/
nevent.h
executable file
·153 lines (129 loc) · 3.25 KB
/
nevent.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/**
* @file nevent.h
* @brief Interface of the event
*/
#pragma once
enum
{
NEVENT_MAXCLOCK = 0x400000,
};
/**
* NEvent ID
*/
enum tagNEventId
{
NEVENT_FLAMES = 0,
NEVENT_ITIMER = 1,
NEVENT_BEEP = 2,
NEVENT_RS232C = 3,
NEVENT_MUSICGEN = 4,
NEVENT_FMTIMERA = 5,
NEVENT_FMTIMERB = 6,
NEVENT_FMTIMER2A = 7,
NEVENT_FMTIMER2B = 8,
// NEVENT_FMTIMER3A = 9,
// NEVENT_FMTIMER3B = 10,
// NEVENT_FMTIMER4A = 11,
// NEVENT_FMTIMER4B = 12,
NEVENT_MOUSE = 13,
NEVENT_KEYBOARD = 14,
NEVENT_MIDIWAIT = 15,
NEVENT_MIDIINT = 16,
NEVENT_PICMASK = 17,
NEVENT_S98TIMER = 18,
NEVENT_CS4231 = 19,
NEVENT_GDCSLAVE = 20,
NEVENT_FDBIOSBUSY = 21,
NEVENT_FDCINT = 22,
NEVENT_PC9861CH1 = 23,
NEVENT_PC9861CH2 = 24,
NEVENT_86PCM = 25,
NEVENT_SASIIO = 26,
NEVENT_SCSIIO = 27,
NEVENT_CDWAIT = 28, // XXX: 勝手に使ってOK?
NEVENT_CT1741 = 29, // np2sより 28を使っちゃったので29に np21w ver0.86 rev29
#if defined(VAEG_EXT)
NEVENT_FDCTIMER = 29,
NEVENT_FDDMOTOR = 30,
NEVENT_FDCSTEPWAIT = 31,
#endif
#if defined(VAEG_FIX)
NEVENT_FDCSTATE = 32,
#endif
#if defined(SUPPORT_WAB)
NEVENT_WABSNDOFF = 33,
#endif
NEVENT_HRTIMER = 34,
/* ---- */
NEVENT_MAXEVENTS = 35
};
typedef enum tagNEventId NEVENTID;
enum
{
NEVENT_ENABLE = 0x0001,
NEVENT_SETEVENT = 0x0002,
NEVENT_WAIT = 0x0004
};
/**
* event position
*/
enum tagNEventPosition
{
NEVENT_RELATIVE = 0, /*!< relative */
NEVENT_ABSOLUTE = 1 /*!< absolute */
};
typedef enum tagNEventPosition NEVENTPOSITION; /*!< the defines of position */
struct _neventitem;
typedef struct _neventitem _NEVENTITEM;
typedef struct _neventitem *NEVENTITEM;
typedef void (*NEVENTCB)(NEVENTITEM item);
struct _neventitem
{
SINT32 clock;
UINT32 flag;
NEVENTCB proc;
INTPTR userData;
};
typedef struct {
UINT readyevents;
UINT waitevents;
NEVENTID level[NEVENT_MAXEVENTS];
NEVENTID waitevent[NEVENT_MAXEVENTS];
_NEVENTITEM item[NEVENT_MAXEVENTS];
} _NEVENT, *NEVENT;
#ifdef __cplusplus
extern "C" {
#endif
extern _NEVENT g_nevent;
#if defined(SUPPORT_MULTITHREAD)
// 全体の初期化処理
void nevent_initialize(void);
// 全体の解放処理
void nevent_shutdown(void);
#endif
// 初期化
void nevent_allreset(void);
// 最短イベントのセット
void nevent_get1stevent(void);
// 時間を進める
void nevent_progress(void);
// イベントの実行
void nevent_execule(void);
// イベントの追加
void nevent_set(NEVENTID id, SINT32 eventclock, NEVENTCB proc, NEVENTPOSITION absolute);
void nevent_setbyms(NEVENTID id, SINT32 ms, NEVENTCB proc, NEVENTPOSITION absolute);
// イベントの削除
void nevent_reset(NEVENTID id);
void nevent_waitreset(NEVENTID id);
// イベントの動作状態取得
BOOL nevent_iswork(NEVENTID id);
// イベントコールバックの強制実行(注:既存の待ちイベントの無効化は行われない)
void nevent_forceexecute(NEVENTID id);
// イベント実行までのクロック数の取得
SINT32 nevent_getremain(NEVENTID id);
// NEVENTの強制脱出
void nevent_forceexit(void);
void nevent_changeclock(UINT32 oldclock, UINT32 newclock);
#ifdef __cplusplus
}
#endif