   ___ ___         _
  /   |   \ ___ __/ \__ ___  ___  /\__
  \  / \  // __>\_   _// __|/ __\/    \
   \_____/_\__ \  \_/  \___|\___/\_/\_/
          \____/      2.4 - 26.12.2003

1. 本文書について
   WStech doc v2.4 made by Judge and Dox
   Special thanks to -anonymous- contributor for some usefull info.
   日本語訳 v 1.4j by Jay's Factory.

   What's new :

   2.4 - 26.12.2003 -  スプライトテーブル, BGマップ, FGマップの情報を修正(項目10 $04, $07)
   1.4j- 12.01.2002 -  日本語訳
   1.4 - 04.01.2002 -  EEPROM 情報 ($C4 - $C8)
                       1.3への更新における「BIOS」を「内部 EEPROM」に変更
                       ポート $C1に関する情報を確定
                       「内部 EEPROM」に関する情報を確定
                       ヘッダ内 EEPROM，ROMサイズを更新
                       WS モノクロのRAM サイズを 16KBに確定
                       ポート $15 情報 (LCD アイコン)
                       初期バンク更新
   1.3 - 01.01.2002 -  カートリッジヘッダ内 RTC バイト
                       RTC I/O ($CA, $CB)
                       内部 EEPROM 通信 (?) (I/O 0xBA - 0xBE)，「所有者」 情報の構造体
   1.2 - 26.10.2001  - 細かな修正
   1.1 - 20.10.2001  - 初版

   コメント/更新/情報 dox@space.pl に送付ください
   日本語版へのコメント/更新/情報 jays_factory@NOSPAM.excite.co.jp に送付ください

2. CPU

  Bandai SPGY-1001 ASWAN 9850KK003
  NEC V30MZ - 動作周波数3.072 MHz. 内部パイプライン（16バイトのプレフェッチバッファー）をもつV30の高速版．
  V30MZはV30のおよそ4倍高速である.
  V30MZは内部パイプラインにより命令コードの先読み、解釈、実行を平行して行う.そのため現在実行されているプログラムの場所をアドレスバスの出力モニタリングで決定することは困難である.
  条件分岐の命令の場合,例え分岐しない条件の場合であったとしても,分岐先のアドレスが先読みされる（1回のみ）,そのためプログラムのモニタリングはさらに困難になる.
  V30MZは8個のプレフェッチキュー（16バイト）を持っている.

  V30MZとV30にはその他にも違いがある（未サポートの命令コード,mul/divの後のフラグの取り扱いの違い）.

  タイミング:

  Hblank : 256 CPU サイクル
  Vblank : 159 Hblank = 159*256/3072000 = 75.47Hz


3. メモリ

   20ビットアドレス空間 = 1メガバイト．メモリは，64KBブロック(セグメント/バンク)に分割されて
   いる．

          セグメント:

          0 - RAM - 16 KB (WS) / 64 KB (WSC) 内部RAM(下記を参照)
          1 - SRAM (カートリッジ) SRAMはBSI製BS62LV256TC - 256K(32Kx8)スタティックRAM - TSOP 0 - 70 c, 70 ns (http://www.bsi.com.tw/product/bs62lv256.pdf)

          2 - ROMバンク(初期バンク = 最終バンク)
          3 - ROMバンク(初期バンク = 最終バンク)

          4 - ROMバンク(初期バンク = 最終バンク - 11)
          5 - ROMバンク(初期バンク = 最終バンク - 10)
          6 - ROMバンク(初期バンク = 最終バンク - 9)
          7 - ROMバンク(初期バンク = 最終バンク - 8)
          8 - ROMバンク(初期バンク = 最終バンク - 7)
          9 - ROMバンク(初期バンク = 最終バンク - 6)
          A - ROMバンク(初期バンク = 最終バンク - 5)
          B - ROMバンク(初期バンク = 最終バンク - 4)
          C - ROMバンク(初期バンク = 最終バンク - 3)
          D - ROMバンク(初期バンク = 最終バンク - 2)
          E - ROMバンク(初期バンク = 最終バンク - 1)
          F - ROMバンク(初期バンク = 最終バンク)

          セグメント2-$Fはポートを使用して入れ替えできる:

          $C2 - セグメント2 : このポートにROMバンクナンバーを書き込む（$FFが最終ROMバンク（ROMファイルの最後の64キロバイト）, $FE  = 最終バンク - 1 .. etc）
          $C3 - セグメント3 : 同上
          $C0 - セグメント4-$F : $C0の0-3ビットがバンクの4-7ビット、セグメントナンバーがバンクの0-3ビット
		  　　　

  RAMマップ:

      $0000 - $1FFF                           WS/WSC      
      $2000 - $2FFF    4色 タイル             WS/WSC
      -------------
      $4000 - $7FFF   16色 タイル バンク 0    WSCのみ
      $8000 - $BFFF   16色 タイル バンク 1    WSCのみ
      $C000 - $FDFF                           WSCのみ
      $FE00 - $FFFF   パレット(WSC)           WSCのみ

      いくつかのゲームではRAMパートの初期化（?）が必要である, 例えば:

        $75AC = $41 = "A"
        $75AD = $5F = "_"
        $75AE = $43 = "C"
        $75AF = $31 = "1"
        $75B0 = $6E = "n"
        $75B1 = $5F = "_"
        $75B2 = $63 = "c"
        $75B3 = $31 = "1"

4. ビデオ

   画面サイズ      - 224 x 144 ピクセル(28 x 18 タイル)
   タイルサイズ    - 8 x 8 ドット，16 バイト/タイル(4色モード)又は32バイト/タイル(16色モード)
   マップサイズ    - 256 x 256 ピクセル(32 x 32タイル)
   レイヤ          - 2 レイヤ - バックグラウンド(BG)，フォアグラウンド(FG: 最前面のレイヤ)
   マップ位置      - ポート $07により設定
   タイル位置      - 固定，2バンク - $4000にバンク 0，$8000にバンク 1
   マップ形式      - マップにおける位置は，1 ワードで定義：
                     ビット
                     0 - 8   - タイル番号(0-511)
                     9 - 12  - パレット番号(0-15)
                     13      - WS = 未使用 / WSC = タイルバンク
                     14      - 水平反転
                     15      - 垂直反転
   タイル形式      - ビデオモードに依存(ポート $60)
   スプライト      - 最大128 スプライト, 同一走査線上には，最大32スプライトに制限
                     スプライト形式：
                     バイト 0, 1 - ビット
                                   0 - 8   - タイル番号(0-511)
                                   9 - 11  - パレット番号(0-7) + 8 -> (8-15)
                                   12      - ウィンドウ・クリップ
								   　　　　　0 - 内側
								             1 - 外側
                                   13      - レイヤ毎の優先順位
                                             0 - 2レイヤ(BG，FG)の間に配置
                                             1 - 両方のレイヤの上に配置
                                   14      - 水平反転
                                   15      - 垂直反転
                     バイト 2 - 画面上のY座標
                     バイト 3 - 画面上のX座標

                     スプライトテーブルは画面表示中にバッファされる.
                     おそらく140走査線（1238-144?）まで

   色表示          - ワンダースワン(モノクロ)は，16 階調のグレースケール(同時に，8 階調のみ
                     選択可)を表示することができる．これらの8 階調は，セットとして格納されて
                     おり，パレット定義により，そのセットから，4 階調を選択できる．16 パレット
                     が存在する．BG，FGのレイヤにおいては，すべての16 パレットが利用できる．
                     一方，スプライトにおいては，後半の8 パレットのみが利用できる．どの8 色を
                     利用して, パレットを生成するかは，ポート $1C, ポート $1Eによって定義
                     される．ポート $1Cは，パレット色 0 - 3を，ポート $1Eは，パレット色 4 - 7
                     を，それぞれ定義する．パレット色は，4 ビット長で定義される:

                       1C : 11110000
                       1D : 33332222
                       1E : 55554444
                       1F : 77776666

                     (ここで，色 15が最も暗い色である)

                     ポート $20 - $3Eは，パレット自体を定義するのに利用される．

                       20 : x111x000 - パレット #0
                       21 : x333x222 
                       ...

                     カラービデオモードでは，各色は，1 ワードで定義される．
                        ここで，ビット:
                                0 -  3  青
                                4 -  7  緑
                                8 - 11  赤
                               12 - 14  未使用
                     カラーパレットは，RAM領域($FE00番地)に格納される．

   スクロール      - 各レイヤは，ポート $10 - $13によって，水平/垂直にスクロールさせることが可能．

   透明色          - ワンダースワン       - パレット番号のビット 3がセットの時 - そのパレットの
                                            色 0は透明色．
                     ワンダースワンカラー - 各パレットの色 0は透明色．

   ウィンドウ      - 2つのウィンドウがある - FG レイヤを無効化/有効化する矩形領域(FG ウィンドウ)，
                     スプライト(スプライトウィンドウ）

5. サウンド

   4つのオーディオチャンネルがある.
   それぞれのチャンネルで周波数（3,072 *10e6  / ((2048 - N) x 32 ) Hz , Nは11ビットの値）,
   波形データ（4ビットx32サンプル　16バイト）,音量を設定できる.

   各チャンネルの音量は$88-$8Bに4ビット値x2（左/右）を出力することでコントロールできる.
   基本音量（2ビット値, 0-3が音量11ビット値の開始ビット位置となる）はポート$91で設定する.
   D/Aコンバータは8ビットしか読み込めないので開始ビットを$91で設定する.
   例えば開始ビットを2に設定するとD/Aコンバータは2,3,4,5,6,7,8,9ビットとして音声出力する.

   付加機能 :
    - channel 2 - voice - can play 8 bit samples writing frequently data to ch2 volume I/O port
    - channel 3 - sweep - two parameters:
                        - step = 2.667 x (N + 1) ms , where N = 5 bit value
                        - value - signed byte (-128  - 127)
    - channel 4 - noise - 7 selectable noise generators (probably I/O port $8E)

   詳細情報はI/Oポートの項のポート $80 - $91を見てください.

   またオーディオDMAについてはポート$4A - $52をチェックしてください.
   転送レートは12KHz （HBlank）.
   I/Oポート $4A-$4B と $4E-$4F はデータ転送中に自動的に更新されます.

6. ROMヘッダ

 ヘッダ(ROMファイルの最後の10バイト)
 バイト :
 0   - 開発者ID
 1   - サポートしている最低のシステム
       00 - WSモノクロ
       01 - WSカラー
 2   - バイト 0において定義した開発者に対応したカートリッジID
 3   - 不明
 4   - ROMサイズ
       01 - 不明
       02 - 4Mビット
       03 - 8Mビット
       04 - 16Mビット
       05 - 不明
       06 - 32Mビット
       07 - 不明
       08 - 64Mビット
       09 - 128Mビット      
 5   - SRAM/EEPROMサイズ
       00 - 0k
       01 - 64k SRAM
       02 - 256k SRAM
       03 - 1M SRAM (対局囲碁　平成棋院)
       04 - 2M SRAM (WonderWitch)
       10 - 1k EEPROM
       20 - 16k EEPROM
       50 - 8k EEPROM
 6   - 付加的な機能(?)
       - ビット 0 - 0 - 横型ゲーム, 1 - 縦型ゲーム
       - ビット 2 - 常に1
 7   - 1 - RTC(リアルタイム・クロック)
 8,9 - チェックサム = 最後の2バイト(チェックサムを格納)を除くROMイメージのバイト和

7. 割り込み
   ワンダースワンのCPUは，ハードウェアからの7種類の割り込みを認識する．それらは:
    7 - 水平復帰(HBlank)
    6 - 垂直復帰(VBlank)開始
    5 - 垂直復帰(VBlank)終了
    4 - ライン描画検出(訳注: ポート $03参照)
    3 - シリアル受信
    2 - RTCアラーム
    1 - キー押下
    0 - シリアル送信
  これらの割り込みが発生した際に，その割り込みに対して，CPUがなんらかの動作を行なうかは，ポート 
  $B2で決定される．上記の割り込み番号は，ポート $B2のビット番号に対応しており，割り込みが発生し，
  ポート $B6の対応するビットが 1にセットされる．もし，割り込みが可能になっていれば，CPUへの割り
  込みが生成される．また，その割り込みをハンドルしたコードは，ポート $B6の対応するビットをクリア
  しなければならない．

  例:
   まず，ワンダースワンが，垂直復帰開始割り込みに対して，動作を行うように設定する．それから，
   ポート $B6のビット 6をハイ(1)にセットして，CPUがこの割り込みに対する動作を行えるようになる
   まで，割り込みラインをハイ(1)に保つ．典型的な垂直復帰割り込みルーチンを，下記に示す:

        <レジスタを保存(PUSH)>
        <実際の処理を実行>
        out B6,40
        <レジスタを復帰(POP)>
        iret

  上述した割り込み番号は，ベクトルテーブルに格納された割り込みベクトルに対する割り込み番号とは，
  対応しない．実際の割り込み番号に関して，ポート $B0により，ベースがセットされる．もし，ポート
  $B0に 20h がセットされたとすると，垂直復帰開始割り込み用のルーチンは，割り込みベクトル 26hに
  設定されなければならない(ベースは 20hであり，垂直復帰開始割り込みは 6である)．

8. コントロール
   ポート $B5をリード/ライトすることで，ボタンの状態をチェックすることは簡単である(下記参照)．
   ただし，ポート $B5をリード/ライトの間には，ディレイ(いくつかのNOP)が必要である．
     
9. 内部的なEEPROM 通信(?)と「所有者」 情報の構造
   0xBA - 0xBEにあるI/O ポートは，WS内部にあるEEPROM (例えば - 「所有者」 情報)を，シリアルにリード
   するのに利用される．

    0xBA (ワード) - データ
    0xBC (ワード) - アドレス (EEPROMサイズで除算し，余りを利用(不明))
    0xBE (バイト) - 通信 (?)
                    ビット 4は，データをリードする前にセット
                    ビット 1は，データのリード準備が完了した時に，ハードウェアがセット

    例 :

        mov    ax, $1B9
        out   $BC, ax
        mov    al, $10
        out   $BE, al
        xor    dx, dx
   miniloop:
        inc    dx
        cmp    dl, 32
        jnc    bad_data
        in     al, $BE
        and    al, 1
        jz     minilopp
        in     ax, $BA    ; 誕生日と誕生月


   「所有者」 情報の構造体 :

    - 名前            - 16 バイト ( 0 = Space, 1 = '0' ... 0xA = '9', 0xB = 'A'... )
    - 誕生年          -  2 バイト (BCD)
    - 誕生月          -  1 バイト (BCD)
    - 誕生日          -  1 バイト (BCD)
    - 性別            -  1 バイト (1 - 男性 , 2 - 女性)
    - 血液型          -  1 バイト (1 - A, 2 - B, 3 - 0, 4 - AB)

    構造体のサイズ - 22 バイト  = 11 回でリード,
    アドレス範囲 = 0x1B0 - 0x1BA

10. I/O ポート （ポート番号/初期値/詳細）

- $00 - $00 -  DSPCTL  - ディスプレイ制御
               bit 0   - バックグラウンド・レイヤ 表示/非表示
               bit 1   - フォアグラウンド・レイヤ 表示/非表示
               bit 2   - スプライト 表示/非表示
               bit 3   - スプライト・ウィンドウ 表示/非表示 (ウィンドウ座標はポート $0C - $0Fで定義)
               bit 4,5 - フォアグラウンド・ウィンドウ内部 表示/非表示 (ウィンドウ座標はポート$08 - $0Bで定義)
               ビット 4, 5の意味 :
               5 4
               ---
               0 0  FG レイヤはFG ウィンドウ領域の内部/外部に表示
               0 1  不明
               1 0  FG レイヤはウィンドウ内部にのみ表示
               1 1  FG レイヤはウィンドウ外部にのみ表示

 - $01 - $00 - BAKCOL - バックグラウンド色を定義
               ビット 0-3 - バックグラウンド色
               ビット 4-7 - バックグラウンド・パレット (WSC のみ)
 - $02 - ??? - 現在描画中のライン番号(0 - 159) [0 - 158 ??]
 - $03 - $BB - ライン比較 (ライン描画検出割り込みで利用)
 - $04 - $00 - SPRTAB - スプライト・テーブル用のベース・アドレスを定義
               テーブルのアドレスを取得するためには，この値を左に 9 ビットシフトし
               最上位ビットを0にする.（ビット0-5が有効でビット6, 7は未使用）
               0 0xxxxxx0 00000000
               （スプライトのアトリビュートテーブルのベースは$00000-$07E00を512バイト単位で移動可）
 - $05 - $00 - SPRFST - 描画を開始するスプライト番号を定義
 - $06 - $00 - SPRCNT - 描画するスプライトの数を定義
 - $07 - $26 - SCRLOC - RAMにおいて，バッググラウンド，フォアグラウンドの位置を定義
                形式: ビット 7-0 : ?fff?bbb
                ビット 7 - 不明
                ビット 6-4 - フォアグラウンド位置 (アドレスは 00fff000 00000000)
                ビット 3 - 不明
                ビット 2-0 - バックルラウンド位置 (アドレスは 00bbb000 00000000)
                バックグラウンドのタイルマップのベースは$00000-$03800 (2048バイト単位で移動可）
 - $08 - $FE - FG ウィンドウ x0   (x0,y0) = 左上,  (x1,y1) = 右下
 - $09 - $DE - FG ウィンドウ y0
 - $0A - $F9 - FG ウィンドウ x1
 - $0B - $FB - FG ウィンドウ y1
 - $0C - $DB - スプライトウィンドウ x0
 - $0D - $D7 - スプライトウィンドウ y0
 - $0E - $7F - スプライトウィンドウ x1
 - $0F - $F5 - スプライトウィンドウ y1
 - $10 - $00 - BCKSCRX - バックグラウンド・レイヤ X(水平)スクロールレジスタ
 - $11 - $00 - BCKSCRY - バックグラウンド・レイヤ Y(垂直)スクロールレジスタ
 - $12 - $00 - FORSCRX - フォアグラウンド・レイヤ X(水平)スクロールレジスタ
 - $13 - $00 - FORSCRY - フォアグラウンド・レイヤ Y(垂直)スクロールレジスタ
 - $14 - $01 - LCDCTL
               ビット 0 - 1 - LCD 表示
                          0 - LCD 非表示
 - $15 - $00 - LCD アイコン
               ビット 0 - LCD スリープ ?
               ビット 1 - 縦型ゲーム表示
               ビット 2 - 横型ゲーム表示
               ビット 3 - ドット 1
               ビット 4 - ドット 2
               ビット 5 - ドット 3
               ビット 6 - 未使用 ?
               ビット 7 - 未使用 ?
 - $16 - $9E - 不明
 - $17 - $9B - 不明
 - $18 - $00 - 不明
 - $19 - $00 - 不明
 - $1A - $00 - 不明
 - $1B - $00 - 不明
 - $1C - $99 - パレット色10
 - $1D - $FD - パレット色32
 - $1E - $B7 - パレット色54
 - $1F - $DF - パレット色76
 - $20 - $30 - パレット00
 - $21 - $57 - パレット01
 - $22 - $75 - パレット10
 - $23 - $76 - パレット11
 - $24 - $15 - パレット20
 - $25 - $73 - パレット21
 - $26 - $77 - パレット30
 - $27 - $77 - パレット31
 - $28 - $20 - パレット40
 - $29 - $75 - パレット41
 - $2A - $50 - パレット50
 - $2B - $36 - パレット51
 - $2C - $70 - パレット60
 - $2D - $67 - パレット61
 - $2E - $50 - パレット70
 - $2F - $77 - パレット70
 - $30 - $57 - パレット00
 - $31 - $54 - パレット01
 - $32 - $75 - パレット10
 - $33 - $77 - パレット11
 - $34 - $75 - パレット20
 - $35 - $17 - パレット21
 - $36 - $37 - パレット30
 - $37 - $73 - パレット31
 - $38 - $50 - パレット40
 - $39 - $57 - パレット41
 - $3A - $60 - パレット50
 - $3B - $77 - パレット51
 - $3C - $70 - パレット60
 - $3D - $77 - パレット61
 - $3E - $10 - パレット70
 - $3F - $73 - パレット71
 - $40 - $00 - DMA (?) コピー元アドレス
 - $41 - $00 - ^^^
 - $42 - $00 - コピー元バンク
 - $43 - $00 - コピー先バンク
 - $44 - $00 - コピー先アドレス
 - $45 - $00 - ^^^
 - $46 - $00 - コピーしたデータサイズ (バイト数)
 - $47 - $00 - ^^^
 - $48 - $00 - ビット  7 = 1  -> コピー開始
               (ビット 7 = 0  <- データ転送終了時)
               DMA(?)は，メインCPUの動作は停止させ，直ちに開始するものではない(gbc GDMA同様)
               ポート $40-$48 は，コピー処理中にも更新される
 - $49 - $00 - 
 - $4A - $00 - サウンドDMA 転送元アドレス
 - $4B - $00 - ^^^
 - $4C - $00 - DMA転送元バンク
 - $4D - $00 - 不明
 - $4E - $00 - DMA 転送サイズ(バイト数)
 - $4F - $00 - ^^^
 - $50 - $00 - 不明
 - $51 - $00 - 不明
 - $52 - $00 - ビット 7 = 1  -> DMA開始
 - $53 - $00 - 不明
 - $54 - $00 - 不明
 - $55 - $00 - 不明
 - $56 - $00 - 不明
 - $57 - $00 - 不明
 - $58 - $00 - 不明
 - $59 - $00 - 不明
 - $5A - $00 - 不明
 - $5B - $00 - 不明
 - $5C - $00 - 不明
 - $5D - $00 - 不明
 - $5E - $00 - 不明
 - $5F - $00 - 不明
 - $60 - $0A - VMODE - ビデオモード
               ビット 5-7の意味:
               765
               ---
               111   16 色/タイル 「パック」 モード - メガドライブのタイル相当，16 色/タイル
               110   16 色/タイル 「レイヤ」 モード - ゲームギアのタイル相当，16 色/タイル
               010    4 色/タイル                   - モノクロ(下記)と同様だが，カラーパレットを利用
                                                      4 色/タイル，1 タイル = 16 バイト，WSC のみ
               000    4 色/タイル モノクロ          - ゲームボーイのタイル相当，

               [ビット 7 = 16/4 色/タイル , ビット 6 - カラー/モノ モード, ビット 5 - 「パック」
                モード オン/オフ]
 - $61 - $00 - 不明
 - $62 - $00 - 不明
 - $63 - $00 - 不明
 - $64 - $00 - 不明
 - $65 - $00 - 不明
 - $66 - $00 - 不明
 - $67 - $00 - 不明
 - $68 - $00 - 不明
 - $69 - $00 - 不明
 - $6A - $00 - 不明
 - $6B - $0F - 不明
 - $6C - $00 - 不明
 - $6D - $00 - 不明
 - $6E - $00 - 不明
 - $6F - $00 - 不明
 - $70 - $00 - 不明
 - $71 - $00 - 不明
 - $72 - $00 - 不明
 - $73 - $00 - 不明
 - $74 - $00 - 不明
 - $75 - $00 - 不明
 - $76 - $00 - 不明
 - $77 - $00 - 不明
 - $78 - $00 - 不明
 - $79 - $00 - 不明
 - $7A - $00 - 不明
 - $7B - $00 - 不明
 - $7C - $00 - 不明
 - $7D - $00 - 不明
 - $7E - $00 - 不明
 - $7F - $00 - 不明
 - $80 - $00 - オーディオ 1 周波数
 - $81 - $00 - ^^^
 - $82 - $00 - オーディオ 2 周波数
 - $83 - $00 - ^^^
 - $84 - $00 - オーディオ 3 周波数
 - $85 - $00 - ^^^
 - $86 - $00 - オーディオ 4 周波数
 - $87 - $00 - ^^^
 - $88 - $00 - オーディオ 1 音量
 - $89 - $00 - オーディオ 2 音量
 - $8A - $00 - オーディオ 3 音量
 - $8B - $00 - オーディオ 4 音量
 - $8C - $00 - ?? Sweep value
 - $8D - $1F - ?? Sweep step
 - $8E - $00 - ノイズ設定
                ビット :
                        0 - ノイズ発生器タイプ
                        1 - ^^^
                        2 - ^^^
                        3 - リセット
                        4 - 有効
                        5 - 不明
                        6 - 不明
                        7 - 不明
 - $8F - $00 - サンプル位置
                サンプルのアドレスを得るためには6ビットシフトする.
                0 00xxxxxx xx000000
 - $90 - $00 - Audio control
                Bits:
                        0 - Audio 1 on/off
                        1 - Audio 2 on/off
                        2 - Audio 3 on/off
                        3 - Audio 4 on/off
                        4 - 不明
                        5 - Audio 2 Voice
                        6 - Audio 3 Sweep
                        7 - Audio 4 Noise
 - $91 - $00 - Audio Output
                Bits :
                        0 - Mono
                        1 - Output Volume
                        2 - ^^^
                        3 - External Stereo
                        4 - 不明
                        5 - 不明
                        6 - 不明
                        7 - External Speaker (set by hardware)
 - $92 - $00 - Noise Counter Shift Register (15 bits)
 - $93 - $00 - ^^^
 - $94 - $00 - Volume (4 bit)
 - $95 - $00 - 不明
 - $96 - $00 - 不明
 - $97 - $00 - 不明
 - $98 - $00 - 不明
 - $99 - $00 - 不明
 - $9A - $00 - 不明
 - $9B - $00 - 不明
 - $9C - $00 - 不明
 - $9D - $00 - 不明
 - $9E - $03 - 不明
 - $9F - $00 - 不明
 - $A0 - $87 - ハードウェア種別
               ビット 1 - 1 - カラー
                          0 - モノクロ
 - $A1 - $00 - 不明
 - $A2 - $0C - Timer Control
                  bit 0 - Hblank Timer on/off
                  bit 1 - Hblank Timer Mode
                           0 - One Shot
                           1 - Auto Preset
                  bit 2 - Vblank Timer(1/75s) on/off
                  bit 3 - Vblank Timer Mode
                           0 - One Shot
                           1 - Auto Preset
 - $A3 - $00 - 不明
 - $A4 - $00 - HBL  0 = 水平復帰(HBLANK)割り込み 無効
                   n = 水平復帰(HBLANK)割り込み nライン毎に発生 (不明)
 - $A5 - $00 - ^^^
 - $A6 - $4F - Vblank Timer 'frequency'
 - $A7 - $FF - ^^^
 - $A8 - $00 - Hblank Counter - 1/12000s
 - $A9 - $00 - Hblank Counter - 1/(12000>>8)s
 - $AA - $00 - Vblank Counter - 1/75s
 - $AB - $00 - Vblank Counter - 1/(75>>8)s
 - $AC - $00 - Vblank Counter - 1/(75>>16)s
 - $AD - $00 - Vblank Counter - 1/(75>>24)s
 - $AE - $00 - 不明
 - $AF - $00 - 不明
 - $B0 - $00 - IRQBASE - 割り込みベース
 - $B1 - $DB - 通信バイト数(訳注: 不明)
 - $B2 - $00 - IRQENA - 割り込み許可
                ビット 7 - 水平復帰(HBlank)
                ビット 6 - 垂直復帰(VBlank)開始
                ビット 5 - 垂直復帰(VBlank)終了
                ビット 4 - ライン描画検出(訳注: ポート $03参照)
                ビット 3 - シリアル受信
                ビット 2 - RTCアラーム
                ビット 1 - キー押下
                ビット 0 - シリアル送信
 - $B3 - $00 - 通信検出
                ビット 7 - データ受信割り込み 発生
                ビット 6 - 通信速度
                            0 - 9600  bps
                            1 - 38400 bps
                ビット 5 - データ送信割り込み 発生
                ビット 4 - 不明
                ビット 3 - 不明
                ビット 2 - 送信完了
                ビット 1 - エラー
                ビット 0 - 受信完了

                        write $00-$7f = read $00
                        write $80-$bf = read $84
                        write $c0-$cf = read $c4
 - $B4 - $00 - 不明
 - $B5 - $40 - コントローラ
               ビット 4-7 : リード/ライト - リードすべき入力ラインを選択
                   0001 - Yカーソル リード
                   0010 - Xカーソル リード
                   0100 - ボタン リード
               ビット 0-3 : リード専用 - 10h，20h，40hをライト後に，現在の入力ラインの状態(正論理)をリード
                  カーソルリード時のビットの意味:
                       ビット 0 - カーソル 上
                       ビット 1 - カーソル 右
                       ビット 2 - カーソル 下
                       ビット 3 - カーソル 左
                  ボタンリード時のビットの意味:
                       ビット 0 - 不明
                       ビット 1 - START
                       ビット 2 - A
                       ビット 3 - B
 - $B6 - $00 - IRQACK - 割り込み了解
                ビット 7 - 水平復帰(HBlank)
                ビット 6 - 垂直復帰(VBlank)開始
                ビット 5 - 垂直復帰(VBlank)終了
                ビット 4 - ライン描画検出(訳注: ポート $03参照)
                ビット 3 - シリアル受信
                ビット 2 - RTCアラーム
                ビット 1 - キー押下
                ビット 0 - シリアル送信
 - $B7      - 不明
 - $B8      - 不明
 - $B9      - 不明
 - $BA      - 内部 EEPROM (?) データ
 - $BB      - ^^^
 - $BC      - 内部 EEPROM (?) アドレス (EEPROM (?) サイズで除算し，余りを利用 (リード/ライト用ミラーリング))
 - $BD      - ^^^
 - $BE      - 内部 EEPROM (?) コマンド ?
               ビット 7 - 初期化 ?
               ビット 6 - プロテクト ?
               ビット 5 - ライト
               ビット 4 - リード
               ビット 3 - 不明
               ビット 2 - 不明
               ビット 1 - ライト完了 (リードのみ)
               ビット 0 - リード完了 (リードのみ)
 - $BF - $00 - 不明
 - $C0 - $2F - ROM Bank Base Selector for segments 4-$F
 - $C1 - $3F - SRAM Bank selector (不明)
 - $C2 - $FF - BNK2SLCT - セグメント 2 用 ROM セレクタ 
 - $C3 - $FF - BNK3SLCT - セグメント 3 用 ROM セレクタ
 - $C4 - $00 - EEPROM データ
 - $C5 - $00 - ^^^
 - $C6 - $00 - 1kbit EEPROM (16bit*64) :
                  - bits 0-5 - address
                  - bits 6-7 - command :
                           0 - Extended Comand Address bits 4-5
                               0 - Write Disable
                               1 - Write All
                               2 - Erase All
                               3 - Write Enable
                           1 - Write
                           2 - Read
                           3 - Erase
               - 16 kbit EEPROM (16bit*1024) - bits 0-7 - address (low)
 - $C7 - $00 - 1kbit EEPROM (16bit*64) :
                   bit 0 - Start
               - 16 kbit EEPROM (16bit*1024) :
                  - bits 0-1 - address (high)
                  - bits 2-3 - command :
                           0 - Extended Comand Address bits 0-1
                               0 - Write Disable
                               1 - Write All
                               2 - Erase All
                               3 - Write Enable
                           1 - Write
                           2 - Read
                           3 - Erase
                  - bit 4 - Start
 - $C8 - $D1 - EEPROM コマンド :
                ビット 7 - 初期化 ?
                ビット 6 - プロテクト ?
                ビット 5 - ライト
                ビット 4 - リード
                ビット 3 - 不明
                ビット 2 - 不明
                ビット 1 - ライト完了 (リードのみ)
                ビット 0 - リード完了 (リードのみ)
 - $C9 - $D1 - 不明
 - $CA - $D1 - RTC Command
                Write :
                        - $10 - Reset
                        - $12 - 不明 Alarm ?
                        - $13 - 不明
                        - $14 - Set Time
                        - $15 - Get Time
                Read:
                         - bit 7 - Ack [HACK = 1]
 - $CB - $D1 - RTC Data
                Write :
                        Sometimes $40 , and wait for bit 7 = 1
                After Command ($CA):
                        - $14 - 7 writes (all BCD):
                                - Year ( + 2000)
                                - Month
                                - Day
                                - Day Of Week
                                - Hour
                                - Min
                                - Sec
                Read
                        After Command ($CA) :
                        - $13 - bit 7 - Ack [HACK = 1]
                        - $15 - 7 reads (all BCD)
                                - Year ( + 2000)
                                - Month
                                - Day
                                - Day Of Week
                                - Hour
                                - Min
                                - Sec
 - $CC - $D1 - 不明
 - $CD - $D1 - 不明
 - $CE - $D1 - 不明
 - $CF - $D1 - 不明
 - $D0 - $D1 - 不明
 - $D1 - $D1 - 不明
 - $D2 - $D1 - 不明
 - $D3 - $D1 - 不明
 - $D4 - $D1 - 不明
 - $D5 - $D1 - 不明
 - $D6 - $D1 - 不明
 - $D7 - $D1 - 不明
 - $D8 - $D1 - 不明
 - $D9 - $D1 - 不明
 - $DA - $D1 - 不明
 - $DB - $D1 - 不明
 - $DC - $D1 - 不明
 - $DD - $D1 - 不明
 - $DE - $D1 - 不明
 - $DF - $D1 - 不明
 - $E0 - $D1 - 不明
 - $E1 - $D1 - 不明
 - $E2 - $D1 - 不明
 - $E3 - $D1 - 不明
 - $E4 - $D1 - 不明
 - $E5 - $D1 - 不明
 - $E6 - $D1 - 不明
 - $E7 - $D1 - 不明
 - $E8 - $D1 - 不明
 - $E9 - $D1 - 不明
 - $EA - $D1 - 不明
 - $EB - $D1 - 不明
 - $EC - $D1 - 不明
 - $ED - $D1 - 不明
 - $EE - $D1 - 不明
 - $EF - $D1 - 不明
 - $F0 - $D1 - 不明
 - $F1 - $D1 - 不明
 - $F2 - $D1 - 不明
 - $F3 - $D1 - 不明
 - $F4 - $D1 - 不明
 - $F5 - $D1 - 不明
 - $F6 - $D1 - 不明
 - $F7 - $D1 - 不明
 - $F8 - $D1 - 不明
 - $F9 - $D1 - 不明
 - $FA - $D1 - 不明
 - $FB - $D1 - 不明
 - $FC - $D1 - 不明
 - $FD - $D1 - 不明
 - $FE - $D1 - 不明
 - $FF - $D1 - 不明
 