-
Notifications
You must be signed in to change notification settings - Fork 1
/
readme.txt
262 lines (183 loc) · 6.7 KB
/
readme.txt
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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
// ---- 定義
最適化の為のメモリ使用量の抑制
MEMOPTIMIZE = 0~2
CPUにより以下の数値をセットされることを期待している
MEMOPTIMIZE未定義 … Celeron333A以降のセカンドキャッシュ有効機
MEMOPTIMIZE = 0 … x86
MEMOPTIMIZE = 1 … PowerPC等のデスクトップ用RISC
MEMOPTIMIZE = 2 … StrongARM等の組み込み用RISC
コンパイラの引き数・戻り値の最適化
引き数・戻り値でint型以外を指定した場合に、最適化が有効に働かない
コンパイラ向けの定義です。
通常は common.h の物を使用します。
REG8 … UINT8型 / (sizeof(REG8) != 1)の場合 上位ビットを0fillする事
REG16 … UINT16型 / (sizeof(REG16) != 2)の場合 上位ビットを0fillする事
いずれも値をセットする側が0fillし、参照側は0fillしたものと見なします。
OSの言語の選択
OSLANG_SJIS … Shift-JISの漢字コードを解釈する
OSLANG_EUC … EUCの漢字コードを解釈する
OSLINEBREAK_CR … MacOS "\r"
OSLINEBREAK_LF … Unix "\n"
OSLINEBREAK_CRLF … Windows "\r\n"
※現在は以下のソースコード内で個別に設定しています。
(Windowsが APIによって \r\nの場合と\nの場合があるので…)
・common/_memory.c
・debugsub.c
・statsave.c
(milstr.h選択用)
SUPPORT_ANK … ANK文字列操作関数をリンクする
SUPPORT_SJIS … SJIS文字列操作関数をリンクする
SUPPORT_EUC … EUC文字列操作関数をリンクする
※現在milstr.hですべて定義されたままになっています。
ver0.73でmilstr.hの定義を外し compiler.hで指定した物となります。
CPUCORE_IA32
IA32アーキテクチャを採用
i386cを使用する場合の注意点
・CPU panic や警告表示時に msgbox() という API を使用します。
compiler.h あたりで適当に定義してください。
・sigsetjmp(3), siglongjmp(3) が無いアーキテクチャは以下の define を
compiler.h あたりに追加してください。
----------------------------------------------------------------------
#define sigjmp_buf jmp_buf
#define sigsetjmp(env, mask) setjmp(env)
#define siglongjmp(env, val) longjmp(env, val)
----------------------------------------------------------------------
CPUSTRUC_MEMWAIT
cpucore構造体にメモリウェイト値を移動する(vramop)
SUPPORT_CRT15KHZ
水平走査15.98kHzをサポートする(DIPSW1-1)
SUPPORT_CRT31KHZ
水平走査31.47kHzをサポートする
Fellowタイプはこれ
SUPPORT_PC9821
PC-9821拡張のサポート
当然ですが 386必須です。
また SUPPORT_CRT31KHZも必要です(ハイレゾBIOSを使用する為)
SUPPORT_PC9861K
PC-9861K(RS-232C拡張I/F)をサポート
SUPPORT_IDEIO
IDEの I/Oレベルでのサポート
でも ATAのリード程度しかできない…
SUPPORT_SASI
SASI HDDをサポート
定義がなければ常時IDEとして作動します。
SUPPORT_SCSI
SCSI HDDをサポート…全然動かない
SUPPORT_S98
S98ログを取得
SUPPORT_WAVEREC
Soundレベルで waveファイルの書き出し関数をサポート
但し書き出し中は サウンド出力が止まるので ほぼデバグ用
// ---- screen
PC-9801シリーズの画面サイズは標準で 641x400。
VGAでは収まらないので 強制的にVGAに収める為に 画面横サイズは width + extend
とする。
8 < width < 640
8 < height < 480
extend = 0 or 1
typedef struct {
BYTE *ptr; // VRAMポインタ
int xalign; // x方向オフセット
int yalign; // y方向オフセット
int width; // 横幅
int height; // 縦幅
UINT bpp; // スクリーン色ビット
int extend; // 幅拡張
} SCRNSURF;
サーフェスサイズは (width + extern) x height。
const SCRNSURF *scrnmng_surflock(void);
画面描画開始
void scrnmng_surfunlock(const SCRNSURF *surf);
画面描画終了(このタイミングで描画)
void scrnmng_setwidth(int posx, int width)
void scrnmng_setextend(int extend)
void scrnmng_setheight(int posy, int height)
描画サイズの変更
ウィンドウサイズの変更する
フルスクリーン中であれば 表示領域を変更。
SCRNSURFではこの値を返すようにする
posx, widthは 8の倍数
BOOL scrnmng_isfullscreen(void) … NP2コアでは未使用
フルスクリーン状態の取得
return: 非0でフルスクリーン
BOOL scrnmng_haveextend(void)
横幅状態の取得
return: 非0で 横幅拡張サポート
UINT scrnmng_getbpp(void)
スクリーン色ビット数の取得
return: ビット数(8/16/24/32)
void scrnmng_palchanged(void)
パレット更新の通知(8bitスクリーンサポート時のみ)
RGB16 scrnmng_makepal16(RGB32 pal32)
RGB32から 16bit色を作成する。(16bitスクリーンサポート時のみ)
// ---- sound
NP2のサウンドデータは sound.cの以下の関数より取得
const SINT32 *sound_pcmlock(void)
void sound_pcmunlock(const SINT32 *hdl)
SOUND_CRITICAL セマフォを入れる(see sndcsec.c)
SOUNDRESERVE 予約バッファのサイズ(ミリ秒)
サウンドを割り込み処理する場合の指定。
割り込みの最大延滞時間をSOUNDRESERVEで指定。
(Win9xの場合、自前でリングバッファを見張るので 割り込み無し・指定時間通りに
サウンドライトが来るので、この処理は不要だった)
UINT soundmng_create(UINT rate, UINT ms)
サウンドストリームの確保
input: rate サンプリングレート(11025/22050/44100)
ms サンプリングバッファサイズ(ミリ秒)
return: 獲得したバッファのサンプリング数
msに従う必要はない(SDLとかバッファサイズが限定されるので)
NP2のサウンドバッファ操作は 返り値のみを利用しています。
void soundmng_destroy(void)
サウンドストリームの終了
void soundmng_reset(void)
サウンドストリームのリセット
void soundmng_play(void)
サウンドストリームの再生
void soundmng_stop(void)
サウンドストリームの停止
void soundmng_sync(void)
サウンドストリームのコールバック
void soundmng_setreverse(BOOL reverse)
サウンドストリームの出力反転設定
input: reverse 非0で左右反転
BOOL soundmng_pcmplay(UINT num, BOOL loop)
PCM再生
input: num PCM番号
loop 非0でループ
void soundmng_pcmstop(UINT num)
PCM停止
input: num PCM番号
// ---- mouse
BYTE mousemng_getstat(SINT16 *x, SINT16 *y, int clear)
マウスの状態取得
input: clear 非0で 状態を取得後にカウンタをリセットする
output: *x clearからのx方向カウント
*y clearからのy方向カウント
return: bit7 左ボタンの状態 (0:押下)
bit5 右ボタンの状態 (0:押下)
// ---- serial/parallel/midi
COMMNG commng_create(UINT device)
シリアルオープン
input: デバイス番号
return: ハンドル (失敗時NULL)
void commng_destroy(COMMNG hdl)
シリアルクローズ
input: ハンドル (失敗時NULL)
// ---- joy stick
BYTE joymng_getstat(void)
ジョイスティックの状態取得
return: bit0 上ボタンの状態 (0:押下)
bit1 下ボタンの状態
bit2 左ボタンの状態
bit3 右ボタンの状態
bit4 連射ボタン1の状態
bit5 連射ボタン2の状態
bit6 ボタン1の状態
bit7 ボタン2の状態
// ----
void sysmng_update(UINT bitmap)
状態が変化した場合にコールされる。
void sysmng_cpureset(void)
リセット時にコールされる
void taskmng_exit(void)
システムを終了する。