X88000 - PC-8801エミュレータ
Copyright (C) 1998-2015 Manuke


◎概要

X88000はWindows/Linux上で動作するPC-8801エミュレータです。
（PC-8001mkII/SRもエミュレート可）
N88-BASIC V1/V2モード、N-BASICモード、およびN80-BASIC V1/V2モ
ードで動作可能です。
X88000はP88SR用ディスクイメージファイル（拡張子：D88）の読み
書きが可能です。
また、カセットテープイメージファイル（拡張子：T88、CMT）の読
み込み／書き出しができます。
（T88ファイルの作成には、別途"Wav2T88"もしくは"TransT88"が必
要です）
さらに、N80用のメモリイメージファイル(拡張子：N80)も利用可能
です。


◎使用環境（Windows版）

・OS
    MS-Windows98/Me/NT4/2000/XP/Vista/7/8/8.1/10
    （Win95で動作させたい場合はソースからコンパイルし直してく
    ださい）
    DirectX3以降（なくても動くはず…）

・CPU
    なるたけ早いやつ
    （MMX Pentium 166MHz以上が基本かな？）

・メモリ
    そこそこ（笑）
    （基本的な動作には5MB前後の空きメモリが必要）


◎使用環境（Linux版）

・OS
    GNU/Linux & X Window System & GTK+2.8以降

・CPU
    x86/PPC/EmotionEngineで動作確認

・メモリ
    Windows版に準ずる(^^;)


◎必要ファイル

X88000の動作にあたっては、PC-8801mkIISR以降の機種から吸い出し
たROMファイルが別途必要となります。
以下のいずれかの組み合わせのものを用意し、X88000の実行ファイ
ルと同一フォルダに格納してください。

○P88SR用ROMファイル+フォントファイル
  （漢字は表示できません）
    PC88.ROM
    PC88.FNT（もしくはFONT.ROM）

○P88SR用ROMファイル+M88用漢字ROMファイル
    PC88.ROM
    KANJI1.ROM
    KANJI2.ROM

○M88用ROMファイル
    N88.ROM
    N88_0.ROM
    N88_1.ROM
    N88_2.ROM
    N88_3.ROM
    N80.ROM
    DISK.ROM
    KANJI1.ROM
    KANJI2.ROM
    E8.ROM（N80 BASIC 4TH-ROM、なくても動作可）
    FONT80SR.ROM（ひらがなフォント、なくても動作可）

また、PC-8801mkII以前のものであるN88用のROMファイルも使用可能
ではありますが、これを使用した場合はX88000の中からディスクシ
ステム及びN88-BASIC V2モードの機能を使うことはできません。

○N88用ROMファイル+フォントファイル
  （漢字は表示できません）
    8801-N88.ROM
    8801-N80.ROM
    8801-4TH.ROM
    PC-8801.FON

○N88用ROMファイル+M88用漢字ROMファイル
    8801-N88.ROM
    8801-N80.ROM
    8801-4TH.ROM
    KANJI1.ROM
    KANJI2.ROM

N80-BASIC V1/V2で動作させるためには、PC-8001mkII/SRから吸い出
したROMファイルが別途必要となります。

○N80-BASIC V1/V2用ROMファイル
    N80_2.ROM（V1用）
    N80_3.ROM（V2用）
    KANJI1.ROM
    KANJI2.ROM
    HIRAFONT.ROM（なくても動作可）

海外版モードを動作させるには、海外版用フォントROMファイルが必
要です。

○海外版モード用フォントROMファイル
    OPTFONT.ROM


◎操作説明

X88000はPC-8801シリーズの後期型キーボード（ファンクションキー
×10個のやつ）をエミュレーションしますが、一部キートップと異
なる割り付けを行っています。
以下にその部分を示します。（OADG106キーボードでの表記）

STOP      → F11
GRPH      → F12
後退      → Backspace
HOME CLR  → Home
HELP      → End
ROLL UP   → PageDown
ROLL DOWN → PageUp
変換      → 変換（こりゃ同じか(^^;)）
決定      → 無変換
全角      → 半角／全角
COPY      → Alt+F1
CTRL+COPY → Ctrl+Alt+F1
GRPH+COPY → Shift+Alt+F1（ちょっと変則的）

また、カナキーはWindowsのカナ入力モードに準じます。
（ScrollLockでも代用可能です）

さらに、IME経由での文字入力も受け付けます。
受け付ける文字は半角文字、全角英数字、半角記号に対応した全角
記号、および全角ひらがな／カタカナです。

なお、DirectInputを使用しない場合、一部のキーを厳密に判別でき
ません。（全角キー、左右シフト／リターンキー判別、シフト押下
時のテンキーなど）

※DirectInputとIME入力の併用は相性が悪い場合があります。
  （キーが押しっぱなしになったりする）
  この場合には、DirectInputを使用しない状態でIME入力を利用す
  ると良いようです。

その他、PC-8001mkII（非SR）のN80-BASIC V1モード用に、下／右カ
ーソルキーをエミュレートしています。
（SHIFT+上／左カーソルが使いづらいので…(笑)）


◎メニュー説明

○システム

    ・リセット
        システムをリセットします。

    ・BASICモード

      ・N-BASICモード
          N-BASICモードに切り替え、リセットします。

      ・N88-BASIC V1-Sモード
          N88-BASIC V1-Sモードに切り替え、リセットします。

      ・N88-BASIC V1-Hモード
          N88-BASIC V1-Hモードに切り替え、リセットします。

      ・N88-BASIC V2モード
          N88-BASIC V2モードに切り替え、リセットします。

      ・N80-BASIC V1モード
          N80-BASIC V1モードに切り替え、リセットします。

      ・N80-BASIC V2モード
          N80-BASIC V2モードに切り替え、リセットします。

    ・動作クロック

      ・4MHzモード
          Z80 CPUを4MHzで動作させます。

      ・8MHzモード
          Z80 CPUを8MHzで動作させます。

    ・ブーストモード(Alt+B)
        時間待ちのウェイトON/OFFを切り替えます。
        （ブースト時は、エンジン臨界点までカウントスタートし
        ます(嘘)）

    ・フルスクリーンモード(Alt+Enter) : (Windows)
        フルスクリーン動作を切り替えます。

    ・クリップボード

      ・コピー:ビットマップ : (Windows)
      ・書き出し:画像書き出し：XWD : (Linux)
          (Windows)
              テキスト+グラフィック画面をビットマップとしてク
              リップボードへコピーします。
          (Linux)
              テキスト+グラフィック画面をXWD（X-Windowダンプ）
              形式でファイルへ保存します。

      ・コピー:テキスト
          テキスト画面の内容をテキストとしてクリップボードへ
          コピーします。

      ・張り付け:テキスト
          クリップボードに上げられたテキストをキー入力します。

    ・環境設定
        環境設定ダイアログを開きます。
        （詳細は下記）

    ・パラレルポート

      ・デバイスの設定
          パラレルポートに接続したデバイスの設定を行います。
          デバイスの種類によりダイアログの内容が異なります。

      ・なし
          パラレルポートからデバイスを外します。
          （デフォルト）
          「デバイスの設定」メニューは選択できなくなります。

      ・PC-PR201
          パラレルポートにプリンタPC-PR201を接続します。
          「デバイスの設定」メニューでPC-PR201の各種操作を行
          うダイアログが表示されます。
        （詳細は下記）

    ・X88000の終了
        X88000を終了します。

○イメージ

    ・ディスクイメージ(Alt+D)
        ディスクイメージ選択ダイアログを開きます。
        （詳細は下記）

    ・テープイメージ(Alt+T)
        テープイメージ選択ダイアログを開きます。
        （詳細は下記）

    ・メモリイメージ(Alt+M)
        メモリイメージファイルを読み込みます。
        読み込める形式はN80です。
        （自動的にN-BASICモードに切り替わります）

○デバッグ

    ・メインCPUデバッグ
        メインCPUデバッグモードのON/OFFを切り替えます。

    ・サブCPUデバッグ
        サブCPUデバッグモードのON/OFFを切り替えます。

    ・デバッグ実行(Alt+F5)
        ブレークポイントに到達するまで、CPUを実行させます。

    ・ステップ実行(Alt+F10)
        CPUを1ステップ実行させます。
        トレース実行と違い、以下の命令を実行した場合にはその
        次の命令を示す位置まで一気に実行します。

          HALT
          DJNZ    e
          CALL    nn
          CALL    cc, nn
          RST     n
          LDIR / LDDR
          CPIR / CPDR
          INIR / INDR
          OTIR / OTDR

    ・トレース実行(Alt+F11)
        CPUを1命令実行させます。

    ・ステップ実行2(Alt+F12)
        CPUを1ステップ実行させます。
        「ステップ実行」のものに加え、以下の命令もステップ実
        行します。

          JR      cc, e
          JP      cc, nn

        但し、これらの命令はループに限定されないため、次の命
        令を示す位置で停止するとは限りません。

    ・実行ログ記録
        CPUが実行した命令のアドレスをファイルに落とします。
        （実行ファイルのあるディレクトリのDebug.log）

    ・RAM書き出し
        メモリのダンプをファイルに落とします。
        （実行ファイルのあるディレクトリ）

        ◎メインRAM0 : 0000H-7FFFH
          main0.ram : 32KB
        ◎メインRAM1 : 8000H-FFFFH
          main1.ram : 32KB
        ◎高速テキストVRAM（低速モード時）
          fast_tv.ram : 4KB
        ◎低速テキストVRAM（高速モード時）
          slow_tv.ram : 4KB
        ◎グラフィックVRAM0
          gv0.ram : 16KB
        ◎グラフィックVRAM1
          gv1.ram : 16KB
        ◎グラフィックVRAM2
          gv2.ram : 16KB
        ◎サブシステムRAM
          sub.ram : 16KB
        ◎拡張RAM0
          ex0.ram : 128KB
        ◎拡張RAM1[VAB]（ビデオアートボード）
          ex1.ram : 128KB

    ・逆アセンブル
        指定した位置のコードを逆アセンブルして、テキストボッ
        クスに格納します。

    ・ダンプ
        指定した位置のダンプリストをテキストボックスに格納し
        ます。

    ・ブレークポイント設定
        ブレークポイントを登録／削除します。
        デバッグ実行中にプログラムカウンタが登録されたアドレ
        スのいずれかと等しくなったとき、実行を中断します。

○ヘルプ

    ・バージョン情報
        X88000のバージョンを表示します。


◎環境設定ダイアログ

○「一般」タグ

    ・UI言語
        ユーザインターフェースに使用する言語を選びます。
        日本語と英語のどちらかを選択可能です。
        （「自動」はロケール設定から自動判別します）

    ・ブーストリミッタ
        ブーストモード時の最大速度を制限します。
        （「V-MAX」は無制限）
        100%より小さい場合には減速されます。

    ・ディスク
        ディスクドライブの数を指定します。
        ただし、3ドライブ以上はBIOS-ROMが対応している必要があ
        ります。
        （M付き2HD対応機種は駄目みたい…）
        ※次回リセット時に反映

    ・CRT
        CRTの種類（24KHz/15KHz）を選択します。
          24KHz : 垂直周期24KHz／640x400のCRT
          15KHz : 垂直周期15KHz／640x200のCRT
        （ウェイト速度に影響）
        15KHzでは400ライン表示ができなくなります。
        ※次回リセット時に反映

    ・その他

      ・ウェイト
          実機相当のウェイトエミュレーションを実施します。
          （エミュレーション詳細を参照）
          ※次回リセット時に反映

      ・旧機種互換
          新機種で追加されたI/Oポートを一部塞ぎます。
          （エミュレーション詳細を参照）
          ※次回リセット時に反映

      ・PCG-8800
          HAL研究所のPCG-8800をサポートします。
          （エミュレーション詳細を参照）
          ※次回リセット時に反映

      ・海外版モード
          テキストフォントを海外で発売された機種（PC-8801A等）
          へ差し替えます。
          ※OPTFONT.ROMが必要

○「画面」タグ

    ・更新レート
        画面の更新レートを指定します。

    ・インタレース
        画面をインタレース表示するかどうか指定します。

○「入力」タグ : (Windows)

    ・DirectInput
        キーボード入力にDirectInputを使うかどうか指定します。

    ・IME
        IMEオン／オフ切り替えを禁止するかどうか指定します。

○「入力」タグ : (Linux)

    ・XQueryKeymap
        キーボード入力にXQueryKeymapを使うかどうか指定します。

    ・IM : (Linux)
        インプットメソッドオン／オフ切り替えを禁止するかどう
        か指定します。

○「サウンド」タグ : (Windows)

    ・DirectSound
        BEEP／疑似サウンド／PCGサウンド再生にDirectSoundを使
        うかどうか指定します。

    ・周波数
        DirectSoundの再生周波数を指定します。

    ・ビット
        DirectSoundの再生ビット数を指定します。

    ・チャンネル
        DirectSoundの再生チャンネル数を指定します。

    ・BEEP音量
        BEEP音／擬似サウンドの音量を指定します。
        （左：音量小、右：音量大）

    ・ミュート（BEEP）
        BEEP音／擬似サウンドをミュートします。

    ・PCG音量
        PCGサウンドの音量を指定します。
        （左：音量小、右：音量大）

    ・ミュート（PCG）
        PCGサウンドをミュートします。


◎プリンタ設定ダイアログ

    ・プリンタ名
        プリンタの名前を表示します。

    ・用紙サイズ
        プリンタにセットする用紙のサイズを選びます。
        用紙を選択しなおすと、現在の印刷結果がクリアされます。

    ・用紙中央
        可能な場合、用紙位置を指定することができます。
        チェック状態では、用紙はプリンタの中央にセットされま
        す。
        非チェック状態では、用紙は左寄せになります。

    ・ページ
        プレビュー表示する用紙のページ番号を指定します。

    ・コピー : (Windows)
    ・書き出し : (Linux)
        (Windows)
            印刷結果をクリップボードへコピーします。
        (Linux)
            印刷結果をファイルへ書き出します。
        （詳細は下記）

    ・用紙削除
        印刷した用紙を削除します。
        特定の1ページ、または全ページの削除が可能です。

    ・紙送り
        紙送りを実行します。
        紙送り量はページ単位、行（1/6インチ）単位、ポイント
        （1/72インチ）単位の中から選べます。

    ・リセット
        プリンタをリセット（電源再投入）します。
        X88000本体をリセットしてもプリンタはリセットされませ
        ん。ご注意ください。

    ・プレビュー
        印刷内容をプレビュー表示します。
        ハッチパターンはプリンタヘッド行を示します。
        マウス左クリックで拡大、右クリックで縮小が可能です。


◎プリンタ設定:コピーダイアログ : (Windows)
◎プリンタ設定:書き出しダイアログ : (Linux)

    ・ページ
        コピー／書き出し対象のページ番号を指定します。

    ・メタファイル : (Windows)
    ・PDF : (Linux)
        (Windows)
            拡張メタファイル形式で印刷結果をクリップボードへ
            コピーします。
        (Linux)
            PDF形式で印刷結果をファイルへ書き出します。

    ・比率
        (Windows)
            メタファイルの大きさを決定します。
        (Linux)
            PDFの大きさを決定します。

        等倍、1/2、1/4の中から選択可能です。

    ・枠
        用紙の外枠を描画するかどうか指定します。

    ・スプロケット穴
        連続紙の場合、用紙左右のスプロケット穴を描画するかど
        うか指定します。

    ・テキスト抽出
        (Windows)
            印刷された内容のうち、文字として出力されたデータ
            のみを抽出し、テキスト形式でクリップボードへコピ
            ーします。
            ※エンコードはShift_JIS
        (Linux)
            印刷された内容のうち、文字として出力されたデータ
            のみを抽出し、テキスト形式でファイルへ保存します。
            ※エンコードはロケール設定に順ずる

        抽出可能なデータはASCII文字、半角カナ（Linuxは全角カ
        ナに変換）、全角漢字です。
      （図形イメージとして書き出された文字は抽出できません）


◎ディスクイメージ選択ダイアログ

○「ディスクイメージファイル」グループ

    ・ファイル
        読み込まれているディスクイメージファイルの名前が表示
        されます。
        ファイル名の後の括弧内の数字は、ファイルに含まれるデ
        ィスクイメージの数を表します。
        （リードオンリーディスクは<R>のマークが付きます）

    ・追加
        ディスクイメージを読み込み、ファイルリストに追加しま
        す。
        （リードオンリー指定されたディスクは、書き込み内容が
        ファイルに反映されません）

    ・削除
        ファイルリストからディスクイメージファイルを削除しま
        す。（ファイルが消えてしまうわけではありません）

    ・全削除
        ファイルリストからディスクイメージファイルを全て削除
        します。（ファイルが消えてしまうわけではありません）

○「ディスクドライブ」グループ

    ・ドライブ1
    ・ドライブ2
    ・ドライブ3
    ・ドライブ4
        フロッピーディスクドライブにセットするディスクイメー
        ジを指定します。
        （環境設定で指定したドライブ数に影響されます）

    ・P（プロテクトシール）
        フロッピーディスクのプロテクトシール状態を切り替えま
        す。（チェック状態が書きこみ禁止）


◎テープイメージ選択ダイアログ

○「ロードイメージ」グループ

    ・開く
        テープイメージファイルを読み込み、位置を先頭にセット
        します。
        読み込める形式はT88およびCMTです。
        （拡張子省略時はT88）

    ・<<
        テープを巻き戻し、データブロックの先頭に合わせます。

    ・>>
        テープを早送りし、データブロックの先頭に合わせます。

○「セーブイメージ」グループ

    ・保存
        セーブされたテープデータをテープイメージファイルに書
        き出します。
        書き出せる形式はT88およびCMTです。
        （拡張子省略時はT88）

    ・消去
        セーブされたテープデータを消去します。
        

◎起動オプション／環境設定ファイル

X88000起動時に、オプションを指定することができます。

X88000 [opt [opt ...]]

また、「※コマンドライン限定」の記述がないものは、環境設定フ
ァイルにも登録可能です。
（環境設定ファイル読み込み後、コマンドラインオプションを解釈
するため、同一オプションはコマンドラインが優先されます）
環境設定ファイルは「X88000.ini」の名前で実行ファイルと同一の
ディレクトリに置かれます。
各オプションは先頭のハイフン（'-'）を取り除いたキー名で、環境
設定ファイルの[option]セクションに記述します。

例：
X88000 -basic:v1s
  ↓
[option]
basic=v1s

また、コマンドラインから非保存指定（-saveenv:off）がない限り、
メニューで設定を変更すると各オプション内容が環境設定ファイル
に反映されます。

# 下記のように記述すると、Ver.1, 1, 5以前と同等の動作になりま
# す。
# X88000 -default -saveenv:off ...


<ファイル名>
  ※コマンドライン限定
  起動するD88/T88/CMTファイルを指定します。
  （スペースが入るパス名の場合はダブルクォートで囲むこと）
  D88は複数指定可能ですが、/T88/CMTは最後に指定した一つだけが
  有効です。

-default
  ※コマンドライン限定
  全オプションをデフォルトに戻します。

-saveenv:<on|off>
  ※コマンドライン限定
  メニューから設定したとき、環境設定を保存するか指定します。
    on  : 設定を保存する（デフォルト）
    off : 設定を保存しない

-readonly:<on|off>
  ※コマンドライン限定
  このオプションの後ろで指定されるD88ファイルの属性を指定しま
  す。
  （リードオンリー指定されたディスクは、書き込み内容がファイ
  ルに反映されません）
    on  : リードオンリーON
    off : リードオンリーOFF（デフォルト）

-drive1:<数字>
  ※コマンドライン限定
  ドライブ1にセットするディスクの番号を指定します。
  （ディスクファイル指定の前／後は問わず）
    0        : ディスクをセットしない。
    それ以外 : ディスクの通し番号を指定。
               （「ディスクイメージ」ダイアログの並びと同じ）

-drive2:<数字>
  ※コマンドライン限定
  ドライブ2にセットするディスクの番号を指定します。
  （-drive1を参照）

-drive3:<数字>
  ※コマンドライン限定
  ドライブ3にセットするディスクの番号を指定します。
  （-drive1を参照）

-drive4:<数字>
  ※コマンドライン限定
  ドライブ4にセットするディスクの番号を指定します。
  （-drive1を参照）

-basic:<n|v1s|v1h|v2>
  ベーシックモードを指定します。
    n     : N-BASICモード
    v1s   : N88-BASIC V1Sモード
    v1h   : N88-BASIC V1Hモード
    v2    : N88-BASIC V2モード（デフォルト）
    n80v1 : N80-BASIC V2モード
    n80v2 : N80-BASIC V2モード

-clock:<4|8>
  動作クロックを指定します。
    4 : 4MHzモード（デフォルト）
    8 : 8MHzモード

-uilang:<auto|ja|en>
  ユーザインターフェースに使用する言語を選びます。
    auto : ロケールから自動判別（デフォルト）
    ja   : 日本語
    en   : 英語

-boost:<on|off>
  ブーストモードを指定します。
    on  : ブーストON
    off : ブーストOFF（デフォルト）

-boostlim:<v-max|数字>
  ブーストモードリミッタを指定します。
    v-max : 最大速度で動作（デフォルト）
    数字  : リミット値をパーセントで指示（25%〜400%）

-drives:<数字>
  ディスクドライブの数を指定します。
    1〜4 : ドライブ数を指定（デフォルト:2）

-crtvsync:<24|15>
  CRTの種類を指定します。
    24 : 垂直周期24KHz／640x400のCRT（デフォルト）
    15 : 垂直周期15KHz／640x200のCRT

-waitemu:<on|off>
  実機相当のウェイトエミュレーションを行うか指定します。
    on  : ウェイトエミュレーションする
    off : ウェイトエミュレーションしない（デフォルト）

-oldcompat:<on|off>
  旧機種互換モードにするか指定します。
    on  : 旧機種互換モードにする
    off : 旧機種互換モードにしない（デフォルト）

-pcg:<on|off>
  PCG-8800を使用するか指定します。
    on  : PCG-8800を使用する
    off : PCG-8800を使用しない（デフォルト）

-optfont:<on|off>
  海外版モードにするか指定します。
    on  : 海外版モードにする
    off : 海外版モードにしない（デフォルト）

-framerate:<20|30|40|60>
  画面の更新レートを指定します。
    20,30,40,60 : 更新回数／秒（デフォルト:20）

-interlace:<on|off>
  インタレースモードを指定します。
    on  : インタレースON
    off : インタレースOFF（デフォルト）

-directinput:<on|off>
  (Windows)
  キー入力にDirectInputを使用するか指定します。
    on  : DirectInputを使用する（デフォルト）
    off : DirectInputを使用しない
  (Linux)
  キー入力にXQueryKeymapを使用するか指定します。
    on  : XQueryKeymapを使用する（デフォルト）
    off : XQueryKeymapを使用しない

-imedisable:<on|off>
  (Windows)
  IMEオン／オフ切り替えを禁止するか指定します。
    on  : IMEを禁止する
    off : IMEを許可する（デフォルト）
  (Linux)
  インプットメソッドオン／オフ切り替えを禁止するか指定します。
    on  : インプットメソッドを禁止する
    off : インプットメソッドを許可する（デフォルト）

-directsound:<on|off>
  (Windows)
  BEEP／疑似サウンド再生にDirectSoundを使用するか指定します。
    on  : DirectSoundを使用する（デフォルト）
    off : DirectSoundを使用しない

-dsoundfreq:<11025|22050|44100|48000>
  (Windows)
  DirectSoundの動作周波数を指定します。
    11025,22050,44100,48000 : Hz（デフォルト:44100）

-dsoundbit:<8|16>
  (Windows)
  DirectSoundの動作ビット数を指定します。
    8,16 : ビット数（デフォルト:8）

-dsoundch:<1|2>
  (Windows)
  DirectSoundの動作チャンネル数を指定します。
    1,2 : チャンネル数（デフォルト:1）

-beepvolume:<数字>
  (Windows)
  BEEP／疑似サウンドの音量を指定します。
    0〜100 : 音量（100で最大、デフォルト:50）

-beepmute:<on|off>
  (Windows)
  BEEP／疑似サウンドのミュート状態を指定します。
    on  : ミュートする
    off : ミュートしない（デフォルト）

-pcgvolume:<数字>
  (Windows)
  PCGサウンドの音量を指定します。
    0〜100 : 音量（100で最大、デフォルト:50）

-pcgmute:<on|off>
  (Windows)
  PCGサウンドのミュート状態を指定します。
    on  : ミュートする
    off : ミュートしない（デフォルト）

-parallel:<null:pr201>
  パラレルポートにデバイスを接続します。
    null  : デバイスを外す（デフォルト）
    pr201 : PC-PR201を接続する


◎エミュレーション詳細

・X88000のコアであるZ80エミュレータは、Manukeが調査できた範囲
  の未定義命令をすべて実装しています。
  ただし、C++で記述されているため今一速度は遅いです(;_;)。
  （やっぱアセンブラ使わんとあかんのかなあ…）

・X88000は速度同期のため、CPUを2ミリ秒分いっぺんに実行し、そ
  の後ウェイトをかけています。
  このため、実行処理にややムラが出ることがあるかもしれません。

・カレンダクロックは起動時／リセット時にX88000の実行環境のも
  のに合わせられますが、メニューやダイアログ表示中は停止しま
  す。
  また、ブースト時にはカレンダのカウンタも加速します。
  このため、実行環境の時刻とずれてしまう可能性があります。

・カレンダクロック同様、VSyncやタイマ割り込みもブースト中は同
  率で加速されます。

・画面の更新は標準20fpsです。（環境設定で指定可能）
  （VRAM等が更新されていない場合は書き直ししません）

・起動時／リセット時にフロッピーディスクドライブにディスクイ
  メージがセットされていないとき、X88000はROM BASICモードで起
  動します。

・X88000はメインCPUを10命令分実行した後、周辺装置との同期を取
  ります。
  ソフトによっては、これが原因で誤動作する可能性もあります。

・サブCPUは、ポート0FEHを256回参照する間、メイン側からアクセ
  スのない場合には、高速化のためアクセスが発生するまでスリー
  プモードに入ります。

・テープデータの読み書きで、データ前後のマーク／スペースはリ
  アルタイムで処理されます。
  （読み込み時は最大２秒までで打ち切り）
  しかし、データ本体の読み書きは即座に処理されるため、実機と
  動作が異なる可能性があります。
  （ロード時に演奏したりするばやいなど）

・N88-BASICモードでのテープイメージファイルの読み込み速度アッ
  プのため、一部ROMルーチンを高速エミュレートしています。
  （N88-BASIC ROM : 7F87H - カセット1文字入力）
  実用上問題ないはずですが、4クロックでルーチンが終了してしま
  うため、実機とタイミングが異なる可能性があります。

・N88との互換のため、I/Oポート0にデータを出力するとテープイメ
  ージからマシン語を高速ロードします。
  （PCG-8800が有効になっている場合は、この機能は使えません）
  I/Oポート0は実機では出力に結び付けられていないためデータ出
  力は行われないはずですが、アプリケーションによってはトラブ
  ルが生じる可能性もあります。

・BEEP／PC-8801mkII疑似サウンドは、DirectSoundによって再生さ
  れます。
  このため、DirectSoundをハードウェアでサポートしていないサウ
  ンドカードをお使いの場合、音階の再現度が悪くなります。

・X88000は、256KBの拡張RAMを装備した状態になっています。
  （128KBのRAMカードx2枚）
    カード0 : 拡張RAM（PC-8801-02N相当）
    カード1 : ビデオアートボード（PC-8801-17）

・ビデオアートボード画面は65536色を使用するため、画面モードが
  256色モードでは画面を奇麗に表示することはできません。
  ハイカラー以上の画面モードでご利用ください。
  （フルスクリーンは、256色モードで動作しています）

・現バージョンでは、Linux版は以下の機能が実装されていません。
    ・フルスクリーンモード
    ・ウィンドウサイズ変更
    ・BEEP再生

・ウェイトエミュレーションモードでは、以下のようなウェイトを
  実行します。
    ・低速モードでのM1サイクルウェイト
    ・低速テキストVRAMのDMA転送
    ・低速グラフィックVRAMバンク時のCPU停止
    ・高速テキストVRAMのM1サイクルウェイト
    ・8MHz動作時のメモリアクセスウェイト
    ・FDDサブシステム（2D）のM1サイクルウェイト
  このうち、「低速グラフィックVRAMバンク時のCPU停止」は統計的
  データに頼らざるを得なかったため(^^;)、若干実機との速度が異
  なる可能性もあります。

・旧機種互換モードでは、N88-BASIC V1/N-BASIC/N80-BASIC V1モー
  ドにおいて、新機種で追加されたI/Oポートを一部塞ぎます。
  このため、新機種で動作しないソフトが比較的動作しやすくなり
  ます。
  ただし、新機種対応ソフトでありながら上記BASICモードを使用す
  るソフトが逆に動作しなくなりますのでご注意ください。

・HAL研究所のPCG-8800は、一部実機と異なる実装が行われています。
  リセット時、X88000はハイコードにバンク0のPCG-RAMを表示する
  ように設定されます。PCG-8100相当のソフトを実行する場合に、
  "OUT 3,8"を事前に行う必要性をなくすためです。
  これに伴い、PCG-RAMの内容はリセット直後、キャラクタ80H-FFH
  の内容があらかじめコピーされた状態になります。
  また、PCG-8800では省略されてしまったキャラクタコピー機能が、
  X88000ではPCG-8100の仕様のまま実装されています。
  上記仕様はPCG-8100対応ソフトとの互換性を高めるためのもので
  すが、実機と異なる仕様のため問題が生ずるかもしれません。

・海外版用のテキストフォントファイルOPTFONT.ROMは、8x8ドット
  のテキスト表示用フォント256文字分を格納した2048バイトのファ
  イルです。
  フォントデータは全文字分埋められている必要はなく、変更のあ
  る文字のみでもOKです。（1文字の全ビットが0の場合、国内版フ
  ォントの内容が使いまわされます）


◎PC-PR201エミュレーション詳細

手元にあったPC-PR201Gマニュアルを元に、PC-PR201系のコマンドは
ほぼ全て実装してあります。
（縁取り／影付き文字等のWindows上で実装の難しいものは一部省き
ました）
なお、PC-PR201Gはモノクロプリンタなのでカラーはサポートしてま
せん。＜言い訳(笑)
また、プロポーショナルフォントの横幅に関してはかなりいい加減
になってます(^^;)

# 実機がない状態で作り込んだので動作が完全かどうかは保証でき
# ませんです(^^;)。
# （特にエラーコマンドの処理方法など）

印刷イメージは、文字は表示デバイスの解像度で、イメージデータ
はPC-PR201の解像度である160DPIで出力されます。
このため、印刷結果は実機とは多少異なる場合があります。

選択できる用紙は以下のものです。

・15インチ連続紙
・10インチ連続紙
・A4（縦置き／横置き）
・A5（縦置き／横置き）
・B4（縦置き／横置き）
・B5（縦置き／横置き）
・はがき（縦置き／横置き）

15／10インチ連続紙はトラクタフィーダ、他はカットシートフィー
ダ扱い（左寄せ／中央寄せ選択可）になります。

※X88000は直接このプリンタ出力結果をWindows/Linux上のプリンタ
  にて印刷する手段を持っていません。
  実際に紙に印刷したい場合には以下の手順が必要です。
  (Windows)
      「コピー」で印刷結果をクリップボードへコピーし、コンテ
      ナ系アプリケーション等へ貼り付けて印刷。
  (Linux)
      「書き出し」で印刷結果をPDF形式で書き出し、他のアプリケ
      ーションで印刷。
      （PDF作成にCairoを使用していますが、現時点ではCairoが縦
      書き文字に対応していないため、印刷文字の一部で回転・移
      動を使い擬似的に縦書き表記を実現しています）


◎課題

・高速化。

・FM音源のサポート。

・FDCのエミュレーション強化。

・カレンダ／VSync／タイマの外部同期モード。


◎更新履歴

2015-08-10 : Ver. 1.5.0
・Z80の16ビットADC/SBC実行後、P/Vフラグがおかしかったのを修正。
　（apaslothyさんご提供）
・CRTCの設定反映方法を修正。
　（apaslothyさんご提供）
・N80 BASICの4TH-ROMを追加、バンク切り替え動作を修正。
　（apaslothyさんご提供）
・Vista以降のWindowsで、フルスクリーン時にAltキーのゴミが画面
　に残ってしまう不具合を修正。

2008-10-09 : Ver. 1.4.0
・apaslothyさんが提供してくださった、HAL研PCG-8800機能及び海
  外版モードを追加。
・インターフェースに英語モードを追加。
・FDCのWRITE IDコマンド（FDフォーマット）をサポート。
・WindowsXP/Vistaを正式にサポート。
・Windows95が非対応に。
  （コンパイラをWin95非対応のVC2005に変更したため。必要な場合
  はソースからコンパイルしてください）
・Linux版のツールキットGTK+を2.8以降に変更。
・Linux版PC-PR201エミュレーションのPostScript書き出しをPDF書
  き出しに変更。
  （Cairoを使用するため、GhostScriptは不要になりました）
・実行時のCPU負荷を軽減。
・バージョン表記方法を変更(^^;)

2002-06-15 : Ver. 1, 3, 3
・CMTファイル読み込み時の問題点を修正。
      連続したマシン語ファイルが読めない不具合対応。
      末尾にゴミデータ(00H)が入ったときの対応。
      データファイルを厳密にチェックするよう修正。
・g++コンパイル時にメモリ使用量が少なくなるよう、Z80エミュレ
  ータ部分を若干書き直し。
  （動作には全く影響はありません）
・g++/PowerPCコンパイル時に、"-fsigned-char"オプションが不要
  になるようZ80エミュレータを修正。

2001-10-09 : Ver. 1, 3, 2
・ウェイトエミュレーションモード装備。
  V1-Sモード等の速度が実機に近づきました。
・旧機種互換モード追加。
・Linux版にてPR-201エミュレーションを実装。
  （PostScript使用。動作にはGhostScriptが必要です）
・8MHz動作時、FDDサブシステムCPUも8MHzで動作していた不具合を
  修正。（常に4MHz）

2001-08-25 : Ver. 1, 3, 1
・ジョイスティックの状態不正による不具合を修正。
  （ボタンが押されっぱなしになってました(^^;)）

2001-07-07 : Ver. 1, 3, 0
・Linuxプラットフォーム対応。（一部制限あり）
・areareaさんが提供してくださった、PC-8001mkII/SRエミュレーシ
  ョン部分を組み込み〜♪
・ビデオアートボードエミュレーション装備。
  320x200x65536色画面が表示可能です。
  （え、いらない？(^^;)）
・OPNAタイマ割り込みの動作不具合を修正。
・ディスクが挿入されていないドライブへ書き込みしたとき、異常
  終了する不具合を修正。
・RAM書き出し機能の追加。

2000-12-24 : Ver. 1, 2, 0
・プリンタPC-PR201エミュレーション装備〜♪
  力作っす。（苦労しました…(;_;)）
・BEEP音、およびPC-8801mkII疑似サウンド機能をDirectSoundで再
  現。
・後期型キーボード対応。
・CMT形式テープイメージで、ファイル名つきマシン語プログラムが
  うまく読めなかったのを修正。（T88形式は問題なし）
・88マシン語モニタが書き出したテープデータを読み残すため(涙)、
  マシン語プログラムが2つ連続したテープイメージを正常に読めな
  かった不具合を修正。（モータOFF時に1文字読み飛ばし〜）
・IME入力／クリップボード貼り付けをESCキーで中断可能に。
・ウィンドウサイズ変更をサポート。
・リセット時に時刻合わせを行うよう変更。
・フルスクリーン動作時、マウスカーソル移動でメニューバーを表
  示するよう変更。

1999-01-24 : Ver. 1, 1, 5
・フルスクリーンモードの追加。
・インタレース表示を追加。
・ディスクドライブ数変更を追加(笑)。
・キー入力をDirectInputに変更。
・結合T88ファイルの読み込みをサポート。

1998-12-13 : Ver. 1, 1, 4
・メニュー構造の整理。
・クリップボード操作を追加。
・4MHz／8MHz切り替えを追加。
・DAA命令が不完全だったのを修正。
・背景パレットの不具合を修正。
・割り込みコントローラの動作を変更。
・VSYNCタイミングのバランスを調整。
・FDC動作を修正。
      MultiTrack時EOT動作修正（まだおかしかった(^^;)）。

1998-11-08 : Ver. 1, 1, 3
・ディスクイメージへの保存機能を追加。
・偽READ DIAGNOSTICをサポート。
・FDCアクセス時にディレイを入れるよう修正。
・IME経由のカナ入力をサポート。
・デバッグトレース機能の追加。
・テキストアトリビュートのN-BASIC/N88-BASIC判別方法が誤ってい
  たのを修正。
・コンパイラをVisualC++6.0へ変更。

1998-10-09 : Ver. 1, 1, 2
・Manuke誕生日スペシャルバージョン(嘘)。
・FDC動作を修正。
      MultiTrack時EOT動作修正。
      TC入力時のエラーリストア不具合訂正。
      ST3のReadyフラグが立っていなかったのを修正。
・BIT 7, r実行時、サインフラグへ結果を反映するよう変更。
・デバッグ表示時のP/Vフラグの表示が間違っていたのを修正。
・デバッグモードを若干機能アップ。

1998-09-25 : Ver. 1, 1, 1
・メイン／サブCPUの同期方法を変更。
・N80メモリイメージが読めなくなっていたバグを修正。
  （テキスト表示がOFFになってた(^^;)）

1998-09-23 : Ver. 1, 1, 0
・V2モード／ディスクイメージのサポート(^^)。
  （ただしディスクはまだ暫定です。保存などができません）
・デバッグ機能の追加。
・テキストVRAM周りのバグ修正。
・INC IXL／INC IYLが誤動作していたのを修正。
・また少しだけ高速化（したはず）。

1998-08-21 : Ver. 1, 0, 2
・テープがうまく巻き戻せないバグを修正。
・N-BASICモードでテキストウィンドウが有効になっていたのを修正。
・N-BASIC起動の手法を変更。
  （ROMまかせから自前セットアップに）
・OUT 0でテープイメージのマシン語高速読み込み機能を追加。
・メモリイメージ(N80)読み込み機能を追加。
・メニューアクセラレータを付加。

1998-08-16 : Ver. 1, 0, 1
・グラフィックカラーモード／400ラインモードの優先順位を訂正。
・N88-BASICモードでテープイメージが正常に読めなかったのを修正。
  （Delayが不足してました(;_;)）
・ROMルーチンを一部高速エミュレートするよう変更。
・CMTファイルを読み書き可能に。
・ちびっと高速化（したのか？）。

1998-08-10 : Ver. 1, 0, 0
・いっちゃん最初のバージョン。


◎著作権等

ROMファイルやディスク／テープ／メモリイメージファイルは著作物
のため、個人利用以外の運用は著作権法に反するおそれがあります。
ご注意ください。

P88SRはぶるー氏の、M88はcisc氏の、N88およびN80はH.Kanemoto氏
の著作物です。


◎お・や・く・そ・く

このプログラムはフリーウェアです。著作権はManukeが有するもの
とします。
ただし、このプログラムを用いたことによるいかなる損害もManuke
は補償しません。悪しからずご了承くださいませm(_ _)m。
配布は自由ですが、Manukeが提供した形態を変更しないでください。
（ファイル追加したり、一部だけ配布しないよーに）
また、バージョン統一管理のため転載はなるべく控えてください。


〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
  へ  へ    Manuke
  の  の    E-Mail : manuke.skylark@gmail.com
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
