-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathREADME-XM8.txt
511 lines (323 loc) · 22.6 KB
/
README-XM8.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
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
(UTF-8: Japanese)
-----------------------------------------------------------------------
eXellent Multi-platform emulator type 8 - 'XM8'
based on ePC-8801MA
Copyright (C) 2015-2018 PI.
version 1.70 (2018/01/23)
-----------------------------------------------------------------------
□はじめに
XM8は、Windows/Linux/Androidのマルチプラットフォームに対応したPC-8801MA
(PC-8801mkIISR上位互換)のエミュレータです。
仮想マシン部分は、武田俊也氏の"Common Source Project"から、PC-8801MAエミュ
レータである"ePC-8801MA"に該当する部分を武田氏の了解を頂いた上で、独自に
改良したものを使用しています。以下のURLより詳細情報を得られます。
http://takeda-toshiya.my.coocan.jp/
ビデオ・サウンド・インプットなどホストOSとのインタフェースは、SDL(Simple
Media Library) 2.0を使用しています。以下のURLより詳細情報を得られます。
http://www.libsdl.org/
□対応プラットフォーム
(1)Windows
Windows XP以降のバージョンで動作します。32bit版/64bit版双方のバイナリを
同梱しています。
実行時に必要となる SDL 2.0.7のDLLは、ライセンスに従って再配布しています。
ライセンスは"README-SDL.txt"を参照してください。
(2)Linux
Linux 2.6以降の各ディストリビューションで動作します。
基本的にソースファイルからのビルドが必要ですが、作者環境であるXUbuntu 16.04
でビルドした32bit版/64bit版のバイナリを同梱しました。
上記に近い環境であればビルドは不要で、以下の操作で実行できます。
sudo apt-get install libsdl2-2.0
chmod +x xm8
./xm8
(3)Android
Android 4.0(Ice Cream Sandwitch)以降のARMアーキテクチャまたはx86アーキテク
チャのデバイスで動作します。version 1.70以降は64bit(arm64-v8aおよびx86-64)の
ネイティブコードが含まれているため、32bit環境/64bit環境の双方で動作します。
ただしPlayストアではなくapkファイルでの配布となりますので、以下の要領で
任意のapkファイルをインストール可能に設定した後、インストールしてください。
インストール直後は設定を元に戻すことをお勧めします。
"設定"→"セキュリティ"→"提供元不明のアプリ"→
"提供元がPlayストアではないアプリのインストールを許可する"に設定
Android 6.0(Marshmallow)以降を使用している場合、XM8にストレージへのアクセス
権限を与える必要があります。初回起動時に以下のメッセージが表示されますので
"許可"を選んでください。(一度許可すれば以降は操作不要です)
"XM8に「ご利用の端末上の写真、メディア、ファイルへのアクセス」を許可しま
すか?"
□ROMファイル
Windows向けPC-88エミュレータ"M88"またはPC-98x1向けPC-88エミュレータ"P88SR"
向けのROMセットを利用します。以下の通りです。
[M88向けROMセットを利用する場合]
"N80.ROM"
"N88.ROM"
"N88_0.ROM"
"N88_1.ROM"
"N88_2.ROM"
"N88_3.ROM"
"DISK.ROM"
"KANJI1.ROM"
"KANJI2.ROM" (オプション)
"JISYO.ROM" (オプション)
"2608_BD.WAV" (オプション)
"2608_HH.WAV" (オプション)
"2608_RIM.WAV" (オプション)
"2608_SD.WAV" (オプション)
"2608_TOM.WAV" (オプション)
"2608_TOP.WAV" (オプション)
[P88SR向けROMセットを利用する場合]
"PC88.ROM"
"KANJI1.ROM"
"KANJI2.ROM" (オプション)
"JISYO.ROM" (オプション)
"2608_BD.WAV" (オプション)
"2608_HH.WAV" (オプション)
"2608_RIM.WAV" (オプション)
"2608_SD.WAV" (オプション)
"2608_TOM.WAV" (オプション)
"2608_TOP.WAV" (オプション)
PC-8801mkIISR以降のROMセットを使用可能ですが、以下の点に注意が必要です。
・PC-8801mkIISR/TR/FR/MRのROMセットを使用した場合、System Optionsでクロック
8MHzへ設定できません。実機同様の4MHz固定となります。
・2HDディスクからのブートには、PC-8801mkIIMR,PC-8801MH/MA/MA2/MC,PC-88VA/
VA2/VA3,PC-98DO/DO+といった、2HDをサポートする機種のROMセットが必要です。
これらのROMセットを使用した場合のみ、2DD/2HDモードをサポートします。
ROMファイルの配置は以下の通りです。
・Windows/Linuxは、実行ファイルと同じディレクトリに配置してください。
・ファイル名は全て大文字としてください(特にLinuxは注意してください)
・Androidは、デバイス内蔵ストレージに"XM8"というディレクトリを作成し配置し
てください。具体的なパスは端末により異なりますが、以下に例を挙げます。
/sdcard/XM8/*.ROM
/mnt/sdcard/XM8/*.ROM
/storage/sdcard0/XM8/*.ROM
/storage/emulated/0/XM8/*.ROM
いずれのプラットフォームでも必要なROMが見つからない場合はエラー画面と共にパ
スが表示されますので、それに従って配置してください。
□使い方
(1)起動
XM8を起動すると最低限必要なROMファイルが存在するかチェックし、OKであれば以
下の設定で仮想マシンをスタートさせます。
起動モード:V2モード
クロック :4MHz
FM音源 :OPN (YM2203)
これらは、"System Options"および"Audio Options"で変更可能です。変更すると、
いったんリセットされます(動作中の動的切り替えはできません)
設定情報はXM8の終了時に保存され、次回起動時に自動ロードされます。
リズム音源WAVファイルが存在しない場合でも、OPNA(YM2608)に設定することができ
ます。この場合リズム音源は再生されず、FM6音+SSG3音+ADPCM1音となります。
(2)ユーザI/F
XM8はPC-88の漢字ROMフォントを利用したプラットフォーム非依存のユーザI/Fを
搭載しています。以下にユーザI/Fへの入り方、戻り方を記します。
・キーボード
[F11]でユーザI/Fに入り、[ESC]で一つ上のレベルまたはユーザI/Fから抜けます。
・マウス
スクリーン右上の部分(ソフトウェアキーボードのMENU)を左クリックするか、
またはスクリーンの任意部分を右クリックするとユーザI/Fに入ります。
右クリックで一つ上のレベルまたはユーザI/Fから抜けます。
・タッチ
スクリーン右上の部分(ソフトウェアキーボードのMENU)をタップするとユーザ
I/Fに入ります。メニュー表示外の部分をタップすると一つ上のレベルまたはユー
ザI/Fから抜けます。
・ジョイスティック
ジョイスティック有効かつキーボードエミュレーション有効の場合、ボタン9~ボタ
ン11のいずれかで入ります。キーボードエミュレーション無効の場合、ボタン3~
ボタン11のいずれかで入ります。ボタン2で一つ上のレベルまたはユーザI/Fから抜
けます。
・Android
タッチ操作の他、"戻る"キーで一つ上のレベルまたはユーザI/Fから抜けます。
ユーザI/Fで出来ることは他のPC-88エミュレータと大差ありませんので、ここでは
詳述しません。
ただしversion 1.70では、Android 5.0(Lollipop)以降で外部SDカードを使用する
ためのUIを追加しました。後述の制限事項(5)を参照してください。
(3)キーボード
キーボードでサポートしている特殊操作を以下に記します。
右Alt+Enter:全画面モード/ウィンドウモードの切り替え
右Alt+F11 :フルスピード/通常スピードの切り替え(Windowsのみ)
それぞれユーザI/Fからも切り替え可能です。
また、シフト系/日本語入力系のキーは以下のように割り付いています。
Caps Lock → (PC88)CAPS
Scroll Lock → (PC88)カナ
左Alt → (PC88)GRPH
変換 → (PC88)スペース[変換]
無変換 → (PC88)スペース[決定]
右Ctrl → (PC88)全角
(4)ソフトウェアキーボード
タッチ操作のみでPC-88エミュレータを実現するため、XM8は画面上に透過表示でき
るソフトウェアキーボードを備えています。
キーボードレイアウトは12種類中から4パターンを選択できます。また半透明レベル
や一定時間操作されなかった場合のタイムアウト時間も選択可能です。
"Input Options"→"Softkey type 1"~"Softkey type 4"でパターンを設定しますが
連続する番号で同一パターンを設定した場合は1つとして扱われます。これを利用し
て、パターン数を1~4の範囲で自由に設定できます。
デフォルトの半透明レベルは96(37.5%)に設定しています。利用するアプリケーショ
ンや操作慣れの程度に応じて調整してください。
タイムアウト時間は400msから20000msの間で選択可能です。最大値である20000msに
設定した場合は無限(タイムアウトしない)動作を行います。
なお、フルキーボードレイアウトについて、CAPS/カナ/右SHIFTはロック動作を行い
ます。一度タップまたはクリックすると押し動作、もう一度タップまたはクリックす
ると離し動作となります。
(5)ステートロード・ステートセーブ
"Load State""Save State"で10種類のステートロード・セーブが可能です。これらは
ディスク毎ではなく、XM8全体で10種類となっています。
また0番はオートロード・オートセーブ用に割り当てており、XM8の終了時に0番へ自
動的にステートセーブを行い、次回起動時に0番からステートロードします。
(6)外部アプリケーションとの連携
Windows/Linuxでは、ドラッグ&ドロップによるディスクファイルの指定が可能です。
ファイルにディスクが2枚以上含まれていれば、ドライブ1に1枚目、ドライブ2に2枚
目をそれぞれセットします。1枚のみの場合はドライブ2はイジェクト状態とします。
その後、直ちにリセットします。
Androidでは拡張子"d88""D88"に対応するインテントフィルターを実装しています。
"ESファイルエクスプローラー"はこれに対応しています。(他のファイラーアプリは
未確認です)ディスクファイルを指定すると、上記Windows/Linuxと同様の動作を
行います。
(7)バッテリー動作
CPU時間の消費を抑えるため、フレームを間引いて表示する(フレームスキップ)
オプションを用意しています。"Video Options"→"No frame skip"~"3 frame skip"
の範囲で設定してください。フレームスキップすると表示動作の代わりにSleepしま
すので、その分消費電力を低減できます。
またバッテリーの残りが10%以下になると、"Battery level is too low"のメッセー
ジを表示してエミュレーション動作を強制的に停止します。11%以上、または電源の
接続で自動復帰します。
version 1.30から、バッテリー監視機能の有効化/無効化を選択可能としました。
System Options→Watch battery levelで行います。
□制限事項
(1)サンプリングレート
WindowsまたはLinuxでは、サンプリングレートを5種類(44100Hz, 48000Hz, 55467Hz,
88200Hz, 96000Hz)から選択することができます。
Androidでは、48000Hzを超えるサンプリングレート(55467Hz, 88200Hz, 96000Hz)を
使用できないため、"Audio Options"で表示されません。これはSDL 2.0.8βの実装に
よる制限です。
(2)ジョイスティック・インテリジェントマウス
XM8ではジョイスティックのみ使用できます。デフォルトではキーボードエミュレー
ションする設定になっています。同一ポートを兼用するインテリジェントマウスは
サポートしていません。
"Input Options"で、"Joystick enable"と"Joystick to keyboard"の両方を有効に
した場合のキー割り当ては次の通りです。
上方向 :(PC88)テンキー 8
下方向 :(PC88)テンキー 2
左方向 :(PC88)テンキー 4
右方向 :(PC88)テンキー 6
ボタン1:(PC88)フルキー SPACE
ボタン2:(PC88)フルキー RETURN
ボタン3:(PC88)フルキー ESC
ボタン4:(PC88)フルキー 左SHIFT
ボタン5:(PC88)フルキー Z
ボタン6:(PC88)フルキー X
ボタン7:(PC88)フルキー Y
ボタン8:(PC88)フルキー N
ボタン9~ボタン11:ユーザI/Fに入る
version 1.50から、上記割り当てをカスタマイズ可能としました。
Input Options→Joystick to keyboard mapで行います。
version 1.70から、使用しているジョイスティックのテストが行えるようにしました。
Input Options→Joystick testで行います。
(3)Android (全バージョン)
version 1.10から、"Input Options"に"Keyboard enable"を追加しました。これは
Androidでキーボードとゲームコントローラを正確に判定できないデバイスがあるこ
とに対応したものです。
"Keyboard enable"と"Joystick enable"は排他で使用することを想定していますが
キーボードデバイス、ジョイスティックデバイス双方の組み合わせによっては同時
使用も可能です。
使用端末によっては音切れが度々発生する場合があります。まずは"Audio Options"
→"Audio Buffer"の数値を300以上に上げて試してください。それでも改善されない
場合、次の2点を試したうえで微調整してください。
・機内モードに設定する
・バックグラウンドで動作中のプログラムをすべて終了させる
これで改善されるようなら、何らかの要因でCPU時間が強制的に奪われています。
"何らかの要因"は環境ごとに異なりますので、色々と試してみてください。
version 1.70では、XM8がバックグラウンドに遷移した後、再びフォアグラウンド
(前面)に戻ったときに必ずユーザーI/Fが表示される仕様に変更しました。
version 1.61以前から移行される方はご注意ください。
(4)Android 4.4(Kitkat)
Android 4.4では外部SDカードへの書き込みアクセスがOSによって制限されている
ため、外部SDカードにイメージファイルを置いて利用した場合は書き込みが行え
ません。制限を避けるには外部SDカードではなく、デバイス内蔵のストレージを利
用してください。
(5)Android 5.0以降(Lollipop, Marshmallow, Nougat, Oreo)
これらのバージョンで外部SDカードを使用するためには、ユーザがSDカードへの
アクセス権を与える必要があります。以下にその手順を記します。
Step 1:
外部SDカードを装着、マウントしてください。
Step 2:
XM8を起動し、"System Options"の最下段にある"Use ext.SD (on next launch)"
にチェックを入れてください。"Choose SD Card → Select"に文言が変わります。
Step 3:
XM8をいったん終了させ、再度起動してください。"次から開く:"の画面になり
ますので、"SDカード"をタップし、そのまま画面中央下にある"選択"をタップして
ください。
上記操作で、外部SDカード上のイメージファイルに対し書き込みアクセスが可能です。
これ以降、Drive1/Drive2/CMTのファイル選択で内蔵ストレージのルートフォルダに
対し"../"を選ぶと外部SDのルートフォルダに遷移するようになります(逆も同様)
<注意>
Step 2の時点で外部SD上のイメージファイルを開いていた場合は、Step 3の操作後
も"読み取り専用"の内部情報が残ったままになるため、書き込みアクセス不可とな
ります。一旦イメージファイルをイジェクトし、再度開き直してください。
(6)Linux+ジョイスティック
Linuxではジョイスティックの利用に制限があります。以下の情報を参照ください。
https://hg.libsdl.org/SDL/file/tip/docs/README-linux.md
□ライセンス
仮想マシン部分に使用している"Common Source Project"がGPLライセンスであるた
め、XM8もGPLライセンスとなります。またSDLはzlibライセンスとなっています。
詳しくは、"License"ディレクトリを参照してください。
□謝辞
武田俊也氏より仮想マシン部分の使用を快諾いただきました。お礼申し上げます。
実機チェックのため、RetroPC Foundationが管理しているレトロPC倉庫よりPC-8801
MA2を貸与いただきました。管理人の高木@Molice氏には忙しい時間を縫って倉庫の
発掘及び動作チェックにご協力いただきました。大変ありがとうございました。
version 1.10のバージョンアップに当たっては、CHEMOOL氏より複数のデバイスでの
動作状況をレポートして頂きました。これによりWindows 8.xのタッチ動作や、And
roidのキーボード動作を改善できました。
□あとがき~version 1.00公開にあたって~
ようやくXM7(FM-7/77AV)、XM6(X68000)に続くXMシリーズ第三弾、XM8(PC-88)を公開
できました。
2012年頃より、Android向けのPC-88エミュレータを開発するという構想をあたためて
いましたが、仮想マシン部分の開発に掛かる莫大な時間を捻出できない点がネックと
なっていました。
しかし武田さんが"Common Source Project"の一環としてePC-98DOとそれからつながる
ePC-8801MAを開発され、次第に完成度が上がってきたことから、SDL 2.0と組み合わせ
Windowsで開発したePC-8801MAベースのアプリケーションをAndroidへ移行させる形で
構築することにしました。
これにより、XM8では以下の3点がポイントになっています。
(1)ホストとのインタフェースをWin32からSDLへ載せ替え
(2)プラットフォーム非依存ユーザI/F
(3)ソフトウェアキーボード
ただ(1)(2)(3)を実現して評価してみると、Windowsでは問題ないものの、Androidは
パフォーマンスの面で問題を抱えていることがわかりました。
たとえば富士通ARROWS M01(2014年12月発売、Android 4.4.2)で評価したところ、ク
ロック8MHz時の実効フレームレートは10fps~15fpsしか出ませんでした。これはあま
りにも寂しい数字ですし、バッテリー持ちの面でも非常に不利になります。
(注)実際にはARROWS M01の姉妹機である、ARROWS M305/KA4(法人向けモデル)を使用、
評価しています。
オリジナルのePC-8801MAやWindows/Linuxプラットフォームではフルフレームに近い
性能が出ていましたので、これはモバイル環境が非力というよりも、現在のPCがあ
まりに速すぎる、本当に贅沢すぎる性能を持っていると言えます。
そこで、上記(1)(2)(3)がほぼ完成した時点で、FM音源合成を含めたスケジューラの
大幅な手直しに踏み切りました。過去にX68000エミュレータXM6を開発した際、様々
な構成を研究した経緯がありましたので、その経験を活かして大きく手を入れていま
す。(Source\ePC-8801MA\vm\event.cppで#ifdef SDLで括っている部分)
これによりオリジナルが持つ厳密さや汎用性、特にサブCPUとの同期タイミングや
BEEP音の音質が犠牲になった反面、変更前と比べて3倍以上の高速化を達成でき、よ
うやくAndroidでも満足の行く性能を得ることができました。
あわせて仮想マシン部にも幾つか手を入れましたので、メモリウェイトや割り込み
タイミングに依存する部分の再現性が向上しています。
例えば、「信長の野望・武将風雲録」のオープニングでの音楽と画面の同期は、こ
れまでどのPC-88エミュレータでも再現できていなかったものと思いますが、XM8は
完全に同期できています。※クロック8MHz時のみ。実機も同様。
その他、実機(PC-8801MA2)上で独自のテストプログラムを走らせ、再現が難しいと
されるV1Sモード時の15k/24kモニタ設定によるGVRAMアクセスウェイトの違いやテキ
スト画面表示時のバス占有時間を測定し、それに近い結果になるよう調整しました。
ただ、ePC-8801MAの仮想マシン部をなるべく変更せず再利用しているため、色々な
ところで無理している部分があります。使用するROMファイルやディスクファイルに
しても、まずXM8で読み込みと解析を行い、その後に仮想マシン部でもう一度読み込
みをしていたりします。ePC-8801MAでステートセーブ・ロードにかかるファイルサ
イズが大きいため、XM8でも起動・終了にワンテンポかかる状態になっています。
こういった点は、やはり仮想マシン部を新開発しないと解決できません。いつ実現
できるかどうかは未定ですが、ゆくゆくはversion 2.00として独自の仮想マシンを
作成・内蔵したいと考えています。
□最後に
今回SDLをインタフェースとして利用したことで、SDLがサポートする他のOSへの
移植も容易に行えると思います。"common.h"の冒頭と"Platform.cpp"を改変する
程度で、Mac OS XやiOSへの移植が可能と思います。興味のある方は是非チャレンジ
してください。
(2018/01/23追記)
version 1.61の時点でiOSへのポートが行われているようです。以下のGitHubになり
ます。
https://github.com/yoshisuga/xm8-ios/
(EOF)