
                    j80 - PC-8000 Series Emulator
                      Release 6b38 (Ver.6.b.78)
           Copyright (c)2000-2013 Shigekazu Hirao (HAL8999)
    +------------------------------------------------------------+

■はじめに■

・j80 は、NEC PC-8000シリーズ(＋α)をエミュレートするプログラムです
    本体        ：下記機種をcfgファイルで指定して起動します
                  1-1 PC-8001(32K RAM) + DiskIFなど + 拡張RAM + PCG8100
                  1-2 PC-8001(パレット追加) + PCG8100(フルドットカラー化)
                  2   PC-8001mkII       (+ 漢字ROM + 拡張RAM) + PCG8200
                  3   PC-8001mkIISR     (+ 漢字ROM + 拡張RAM)
                  4   PC-8801/mkII      (+ 漢字ROM + 拡張RAM) + PCG8800
                  5-1 PC-8801mkIISR/TR  (+ 漢字ROM + 拡張RAM) +(PCG8800)
                  5-2 PC-8801mkIIFR/MR  (+ 漢字ROM + 拡張RAM) +(PCG8800)
                  6-1 PC-88(8MHz機)     (+ 漢字ROM + 拡張RAM) +(PCG8800)
                  6-2 PC-88(8MHz機+SB2) (+ 漢字ROM + 拡張RAM) +(PCG8800)
    ディスプレイ：PC-8041(Green),PC-8042(Color),PC-8047(Amber),アナログ など
    ライトペン  ：PC-8045                                (簡易実装)
    ディスクsys ：PC-8031-2 など        (2HD対応)        (FDCに未実装の機能あり)
    サウンド@BUS：下記デバイスセットのうち一つを選択できます
                  ・GSX8800                     ２枚挿し (AY-3-8910 x4)
                  ・PCS-8081(テクノシンセ)      ４枚挿し (AY-3-8910 x4)
                  ・PCS-8007(ルンルンシンセ)    ２枚挿し (AY-3-8910 x4)
                  ・アドコムサウンドユニット    ６音拡張 (SN76489   x2)
                  ・PC-8801-10                           (AY-3-8910 x2)
                  ・PC-8801-11                           (YM2203    x1)
                  ・PC-8801-10 + PC-8801-11              (AY-3-8910 x2 + YM2203)
                  ・PC-8801-23                           (YM2608    x1)
                  ・PSGによる音楽自動演奏[I/O   1981.12] (AY-3-8912 x1)
                  ・12chシンセユニット   [Oh!PC 1982. 8] (AY-3-8910 x4)
                  ・1bit PCM             [Oh!PC 1983. 7]
    サウンド@PRN：下記デバイスセットのうち一つを選択できます
                  ・ミュージックアダプタ [ASCII 1982.12] (SN76489   x1)
                  ・メロディールーチン   [ASCII 1981. 3] (1bitPCM  PD0)
                  ・スピーチ・シンセ     [I/O   1982. 2] (1bitPCM  PD7)
                  ・JAST SOUND
                  ・Voice Box
    ※PCG8100の「フルドットカラー化＋パレット追加」は暫定実装です
    ※80系の拡張RAM(PC-8012-02)は bank0 のみの対応になります
      PC-8801-02N系を併用した場合は 02N が優先されます (実機動作未確認)
    ※88系の拡張RAMは PC-8801-02N系の対応になります
    ※PC-8801-10 の MIDI系は未実装です
・j80 は無償です
・再配布はご自由にどうぞ
・Javaで書かれており、いろんな環境で走るかもしれません
・アプレットではありません
・動作させるには、実機から吸い出したROMイメージか、それに相当するBIOS
  プログラムが必要です


■警告■
・j80 は無保証です
・j80 では、8001上のプログラムによって母艦システムに問題を起こすことがあります
    ・cmt出力の無限ループによるディスク資源圧迫
    ・プリンタ出力の無限ループによるディスク資源圧迫
  cmt出力は(実機と違い)かなり高速に動作するので、特に注意が必要です
・「システム時計が進んでしまう」という情報が寄せられています


■動作環境■

・Java2SE 1.3.0〜 (JDK または JRE 1.3.0〜)
  ※Linux は、Java2SE 1.3.1〜 推奨
  ※フルスクリーン化は 1.4.0〜 対応 (制限あり：bugs.txt 参照)
・JDK または JRE は、別途入手してください
   > JDK J2SE1.3  http://java.sun.com/j2se/1.3/ja/index.html
   > JRE J2SE1.3  http://java.sun.com/j2se/1.3/ja/jre/index.html
・N-BASIC, FONT, DISK-BIOS(オプション) のバイナリデータが必要です
  上記ファイルは添付していません。各自で用意してください
  ※BASIC は、別途配布の cmt8001.jar で吸出し->変換できます
  ※FONT は、別途配布の tools80.jar で作成できます


■制限事項および確認している不具合等■

・bugs.txt を参照してください


■実行方法■

・コンソールから j80.jar のディレクトリに移動して
    java -jar j80.jar [foo.cfg]
・PATHが通っていない(ファイルコピーでJDKをインストールした)場合は、
    j80.jar のディレクトリに移動して
    /usr/java/jre1.3.0_02/bin/java -jar j80.jar [foo.cfg]
  などとしてください


■設定ファイル■

・起動時に設定ファイルが指定された場合、j80 はその設定を使います
・指定が無かった場合、j80は自分の場所の _j80.cfg(ユーザーcfg) を探します
  _j80.cfg は各自で用意してください
・_j80cfg も見つからなかった場合 j80.cfg を使います
・ファイルの詳細は j80.cfg のコメントを参照してください
  また、./config/ に設定例を用意しましたので参考にしてください


■動作機種■

・j80 は、下記機種(構成)に対応しています
  ・PC-8001      ：PC-8001(32K RAM) + DiskIFなど + 拡張RAM + PCG8100
  ・PC-8001改    ：PC-8001(パレット追加) + PCG8100(フルドットカラー化)
  ・PC-8001mkII  ：PC-8001mkII      (+ 漢字ROM) + PCG8200
  ・PC-8001mkIISR：PC-8001mkIISR    (+ 漢字ROM)
  ・88(V1)       ：PC-8801/mkII     (+ 漢字ROM) + PCG8800
  ・88(V2:4MHz)  ：PC-8801mkIISR/TR (+ 漢字ROM) +(PCG8800)
  ・88(V2:4MHz)  ：PC-8801mkIIFR/MR (+ 漢字ROM) +(PCG8800)
  ・88(V2:8MHz)  ：PC-8801FH/MH~    (+ 漢字ROM) +(PCG8800)
  ・88(V2:8MHz)  ：PC-8801FA/MA~    (+ 漢字ROM) +(PCG8800)※OPN機+8801-24,25含む
  指定方法は、j80.cfg を参照してください。
・「動作モード(BASIC の種類)」ではなく「ハード構成」の違いを実装し分けています


■メニュー・コマンド■

・j80.cmd のコメントを参照してください


■実装上の注意：キーボード■

・キーボードのエミュレーションは、２つのモードを用意しています
  1) ダイレクトモード
     ・キーの ON/OFF の状態を、リアルタイムに取得するモードです
     ・複数キーの同時押しを認識することができます
       ただし、同時押し可能なキーの数,種類は母艦機の仕様・性能に依存します
       詳細は ./doc/keymap.txt の「制限事項」を参照してください
     ・キーマップファイルを用意することで、様々なキーバインドを切り替えられます
       キーマップの定義方法や注意点は ./doc/keymap.txt を参照してください
     ・キーを押した状態のママになってしまったら(Winキーとの同時押しなどで再現)
       キーボードのみリセットしてください

  2) バッファモード
         ・<R/KANA>モード (ローマ字カナ変換動作時)
         ・タッチパネル入力時
         ・ファイル入力(入力代行機能)時
     ・バッファサイズは、512文字分です
     ・キーの「同時押し」は、[KANA][Ctrl][SHIFT][GRPH]のみが可能です
     ・ローマ字カナ変換時は、使うキー以外はダイレクトモードと同じ動作をします
       ただし、バッファに残っているデータがある場合は無視されます
       <R/KANA> モードでは、[カナ][CAPS]ロックは、無視されます
     ・バッファの動作は以下のとおり
        -----------+--------+----+----+----+----+--------+----------
              phase|(in待ち)| 0  | 1  | 2  | 3  |(in待ち)| 0
        -----------+--------+----+----+----+----+--------+----------
        SHIFT等    |        |----|----|----|    |        |----...
        通常のキー |        |    |----|----|    |        |    ...
        -----------+--------+----+----+----+----+--------+----------
        ・in待ち   ：キーボードのポートが読まれるまでバッファは読まれません
        ・phase 0  ：SHIFT などのマスクキーだけを押した状態にします
        ・phase 1,2：目的のキーも押した状態にします
        ・phase 3  ：「何も押していない」状態にします
       ※[Type Speed]で設定するcpm値は in待ち の時間が 0 の場合の理想値です


■実装上の注意：CMTインターフェイス■

・ロードは bas,bin,cas,cmt,t88 に対応
・セーブは cmt のみ対応
・使用中はコンソールに [*___*] が表示されます
・ロード側は、ファイル指定時にメモリ上に展開して使用します。
  セーブ側と同じファイルを指定可能ですが、更新された部分を読みたい場合は、
  ファイルを開きなおす必要があります。
・8800シリーズでは、ロード時に割り込みを使うことが多いようです
・ロード用イメージは、最後まで読んだ後巻き戻されます
・ロード可能なイメージ
  ・CAS
      casファイルに従ってcmtデータを作ります
      各コンバーターの動作の詳細は、cas-job.txt を参照してください
      タイトル毎の頭だし、説明表示、推奨タッチパネル・キーマップの指定が可能
  ・BAS
      ファイル全体をcmtに変換します (リンクチェックはおこないません)
  ・BIN
      cmtに変換します
  ・T88
      データブロックをcmtとして抽出ます
  ・CMT
      ファイル全体を抽出します
      フォーマット解析が成功したものは頭出しができます


■実装上の注意：プリンター■

・プリンタポートへの出力をファイルに書き出します
  ファイルへは常に追記されます
・出力ファイルは *バイナリファイル* です (LLISTなどは、そのまま読めますが)
・出力中(ファイルが open() になっている)は、コンソールに表示が出ます
・<CR><LF>発見 または RESET でファイルを(一旦)閉じます


■実装上の注意：カレンダー・タイマー割り込み■

・カレンダー、タイマー割り込み、キーボードのバッファモードや連射機能での
  時間計測は、CPUの消費ステート数をカウントしています
  メニューの時間単位の表現はこの時間をベースにしています
  環境によらず同じ動作をするはずです (バッファだけ先走るなんてことはない)
  従って母艦の時計とは同期しませんので「時計」として使うに問題があります
・OverDrive はCPUの消費ステート数を減らして実現しています (Z80 DX4 なんちて)
  フレームレートやVRTC、クロック割り込みは倍速化しません
  (CPUからは遅くなったように見える)
  ...VRTCで速度調整しているゲームなどでは、速度が変わらないことになりますね


■実装上の注意：Diskシステム■

・FDCの実装は不完全です
・ディスクアクセス中は、コンソールに表示が出ます
・イメージが更新された場合、pause 時にD88ファイルを更新します
・結合イメージに書き込みをした場合、更新タイミング毎にバックアップを作ります
  同一ファイル中の複数のDiskが更新されていた場合は、一回の更新タイミング毎に
  更新されたDisk枚数分のバックアップが追加されます
・バックアップはエミュレータ側では消しませんので注意してください
  ユーザーディスク用の特殊なフォーマットなどの動作報告がある程度たまるまで、
  「バックアップ省略」モードは実装しません
・結合イメージ数の上限は cfg で変更可能です
・CDOS2 の 2HD フォーマットに暫定対応しています
  (Tr0の先頭セクタのみを FM(3セクタ) で再フォーマットする)
  誤爆が怖いので「TRACE ON」でのみ有効なパッチとしています


■実装上の注意：PC-8800シリーズ■

・80系と違い、機種の区分が雑です
  モノクロ出力まわりなど、実機にない機能が使えてしまったりします
・モノクロ出力(特にテキスト)は実機と表示が異なるかもしれません
・「高解像度ディスプレイ」は仮対応です
・400ラインモードは仮対応です
・ライトペンに関する動作も未確認です


■謝辞■

・j80 作成にあたり、次の方々に協力していただきました

  [情報・資料提供]
  ・へず 様             PC-8031-2, PC-8001mkII など、実機および資料提供
  ・apaslothy 様        PC-8001mkII のマニュアル, 情報提供, 動作報告
                        PC-8001mkIISR のマニュアル, 情報提供, 動作報告
                        GSX8800(HAL研) のマニュアル, 情報提供
  ・モ〜リン 様         PC-8001mkIISR の資料捜索・提供
  ・けんちゃん 様       PCS-8081(テクノシンセ), PCS-8007(ルンルンシンセ) 提供

  [j80 アルファ・テスト]
  ・FX-702P 様          <fx@max.forum.ne.jp>
  ・apaslothy 様
  ・HTA 様              <hideharu@pc8001.zzn.com>

  [j80 Release2 個別テスト]
  ・apaslothy 様

  [j80 Release3 アルファ・テスト]
  ・apaslothy 様
  ・モ〜リン 様
  ・けんちゃん 様

  [その他テスト]
  ・あおさん 様         Win2Kでのメニューの不具合再現テスト
  ・apaslothy 様        MacOS-Xでの動作テスト
                        GSX8800(HAL研)対応テスト
                        アドコムサウンドユニット対応テスト
                        PC-8001mkIISRの動作速度に関する調査協力
  ・nao 様              Linux上での不具合再現テスト
  ・モ〜リン 様         GSX8800(HAL研)対応テスト
  ・くれゆに 様         PC-8801FH 実機調査
                        ベンチマークプログラム開発
  ・kitahei88 様        PC-8801mkIISR 実機調査


・j80 作成にあたり、以下の資料を参考にしました

  [PC-8001に関する資料]
  ・PC-8001 ユーザーズマニュアル    NEC
  ・PCG8100 マニュアル              HAL研究所
  ・Z-80 アセンブリ プログラミング  船山郁夫・関口英幸          サイエンス社
  ・PC-8001 徹底解析                新藤義昭                        ナツメ社
  ・PC-8001 活用研究                                                  工学社
  ・懐古庵  (NEC uPD780 未定義命令) http://cdlmaster.hoops.livedoor.com/
  ・try's page (NEC uPD3301 の情報) http://www.st.rim.or.jp/~nkomatsu/
  ・PC-8001内部の解析[2]  (uPD3301) 長沼孝二          Oh!PC 1982.10 pp.57-61

  [PC-8001mkIIに関する資料]
  ・懐古庵                          http://cdlmaster.hoops.livedoor.com/
  ・PC-Techknow8801mkII             平松達雄・八木良一        システムソフト

  [PC-8001mkIISRに関する資料]
  ・懐古庵                          http://cdlmaster.hoops.livedoor.com/

  [PC-8801/mkII/SRに関する資料]
  ・懐古庵                          http://cdlmaster.hoops.livedoor.com/
  ・PC-Techknow8801mkII             平松達雄・八木良一        システムソフト
  ・ぶるー牧場(掲示板過去ログ)      http://www1.plala.or.jp/aoto/
  ・M88 BBS Log Archive             http://www.retropc.net/cisc/m88/
  ・Crazy Unit(ベンチマークテスト)  http://www7b.biglobe.ne.jp/~crazyunit/

  [シリアルキーボードに関する資料]
  ・PC-8801覚え書き       http://www.maroon.dti.ne.jp/youkan/pc88/index.html

  [Diskに関する資料]
  ・PC-8001 徹底解析                新藤義昭                        ナツメ社
  ・Old&New      (PC-8031 カタログ) http://www.sofarts.com/computer/index.html
  ・(株)ウェブテクノロジ (コマンド) http://www.webtech.co.jp/
  ・(FDC仕様) http://andercheran.aiind.upv.es/~amstrad/docs/upd765a/necfdc.htm
  ・ぶるー牧場           (D88 仕様) http://www1.plala.or.jp/aoto/
  ・PC-9801シリーズ ザ・プロテクト  井上智博                    秀和システム

  [音源に関する資料]
  ・MSX2 Technical Hand Book (AY-3-8910仕様)                  アスキー出版局
  ・似非PLDプロジェクト  (PSG ノイズジェネレータ)
                    http://www.hat.hi-ho.ne.jp/tujikawa/esepld/keywords.html
  ・YM2203データシート                                                ヤマハ
  ・YM2203アプリケーションマニュアル                                  ヤマハ
  ・YM2608アプリケーションマニュアル                                  ヤマハ
  ・GSX8800マニュアル                                              HAL研究所
  ・PCS-8007マニュアル                                 Pax Electronica Japan
  ・IC Collection        (SN76489仕様)
                   http://www.st.rim.or.jp/~nkomatsu/peripheral/SN76489.html
  ・シンセ・アンプラグド (FM音源実装詳細)     http://d.hatena.ne.jp/pcm1723/
  ・P/ECE研究記録〜ADPCMの仕組み (ADPCMエンコード/デコード詳細)
                                    http://www.piece-me.org/piece-lab/adpcm/

  [PCGカラー化＋パレットに関する資料]
  ・http://java-house.jp/~takagi/home/publications/extra/io198312.html
  ・http://takagi-hiromitsu.jp/diary/20080105.html                  高木浩光

  [Javaに関する資料]
  ・Java(tm) House Mailing List Homepage            http://java-house.jp/ml/
  ・Java(TM) 2 SDK ドキュメント     http://java.sun.com/j2se/1.3/ja/docs/ja/
  ・Core Java2 Vol.1 基礎編         Cay S.Horstmann/Gary Cornell ASCII出版局
  ・(Sound API 関係)                JAVA PRESS Vol.15 pp.130-139  技術評論社

  [その他参考にしたもの]
  ・Manuke Station       (T88 仕様) http://www.cug.net/~manuke/index_j.html
  ・X88000 のデバッグ機能           http://www.cug.net/~manuke/index_j.html
  ・'86 最新 TTL IC 規格表                                          CQ出版社


■その他■

・サンプル cmt の寄付歓迎
・サンプル d88 の寄付歓迎
・Helpの寄付歓迎 (たぶんHTML表示可能)


■履歴■

・history.txt を参照してください


    +------------------------------------------------------------+
        hal_8999@hotmail.com
        http://www.geocities.jp/upd780c1/
    +------------------------------------------------------------+
