==============================================================================
    HITACHI MB-S1 model05 Emulator

Copyright(C) Common Source Code Project, Sasaji 2011-2026 All Rights Reserved.
==============================================================================


----------------------------------------
● デバッガについて
----------------------------------------

  メニューの「オプション」→「デバッガを開始」(またはAlt+D)で開始します。

  デバッガを開始すると、エミュレータが一時停止状態になります。
  Windows版ではコンソールウィンドウが表示されます。
  そのほかの機種では、TELNET端末(*)から接続することで操作可能になります。

  (*)TELNET端末の起動方法

  MacOSX:
    ターミナル(アプリケーションのその他にあります)を開き、
      telnet localhost 54321
    と入力しReturnを押します。

    * 10.13以降ではtelnetがインストールされていません。
      Appストアにあるアプリを使用するかHomebrewからインストールしてください。

  Linux:
    GNOME端末,Konsole,xtermなどから
      telnet localhost 54321
    と入力しEnterを押します。

  Windows:
    Tera TermやPuTTYなどを使用して、
      ホスト名:localhost  ポート番号:54321
    に設定して接続します。

  ○設定ダイアログのネットワークタブ、または設定ファイル(mbs1.ini)の
    [debugger]セクションでホスト名、ポート番号を設定できます。

    * リモートホストからデバッガに接続する場合は、
    ServerHostを 0.0.0.0 にします。(別途、ファイアウォールなどの設定も必要）


----------------------------------------
● デバッガのコマンド
----------------------------------------

  起動するとプロンプト"MC6809 - "が表示されますので、ここでコマンド入力します。

  ? でコマンド一覧を表示します。
  各コマンドの詳細は ? <コマンド> または、<コマンド> ? で表示されます。

  ◆コマンド内で指定する数値は16進数です。10進数で指定する場合は先頭に%を
    つけます。(一部例外あり)

  ◆カーソルキーの上下で入力したコマンドの履歴を表示します。

  ------------------------------------
 【Z80Bカード/68008カード対応版での操作】

  ◆多くのコマンドは現在対象としているCPUに対して行います。

  ◆CPUコマンドでデバッグ対象のCPUを切り替えることができます。


----------------------------------------
● デバッガのコマンド一覧
----------------------------------------

  ◆ CPU - 対象のCPUを切り替える。

  書式: CPU [<cpu index>]
  <cpu index> - 対象CPUの番号を指定 (0:MC6809,  1:Z80CPU or MC68008)
  省略すると、現在のデバッグ対象CPUを表示します。


  ◆ D - メモリの内容をダンプする。
         現在のCPUからアクセスすることができるメモリが対象です。

  書式: D [<start address> [<end address>]]
  <start address> - 開始アドレスを指定
  <end address> - 終了アドレスを指定
  終了アドレスを指定しない場合、開始アドレスから128バイトをダンプします。


  ◆ DP - 物理メモリの内容をダンプする。
         現在のCPUからアクセスすることができるメモリが対象です。

  書式: DP [<type> [<start address> [<end address>]]]
  <type> - メモリの種類を指定
    0 : 物理メモリアドレス
    1 : アトリビュートRAM (*6809のみ)
    3 : IG RAM (青) (*6809のみ)
    4 : IG RAM (赤) (*6809のみ)
    5 : IG RAM (緑) (*6809のみ)
  <start address> - 開始アドレスを指定
  <end address> - 終了アドレスを指定
  終了アドレスを指定しない場合、開始アドレスから128バイトをダンプします。


  ◆ E, EB, EW, ED, EA - メモリを編集する。
          現在のCPUからアクセスすることができるメモリが対象です。

  書式: E[{B,W,D}] <address> <value> [<value> ...]
        EA <address> "<string>"
  <address> - アドレスを指定
  <value> - 書き込む値を指定
    E,EBは1バイト、EWは2バイト、EDは4バイトで指定
  <string> - アスキー文字列を指定


  ◆ EP, EPB, EPW, EPD, EPA - 物理メモリを編集する。
          現在のCPUからアクセスすることができるメモリが対象です。

  書式: EP[{B,W,D}] <type> <address> <value> [<value> ...]
        EPA <type> <address> "<string>"
  <type> - メモリの種類を指定。詳細はDPコマンド参照。
  <address> - アドレスを指定
  <value> - 書き込む値を指定
    EP,EPBは1バイト、EPWは2バイト、EPDは4バイトで指定
  <string> - アスキー文字列を指定


  ◆ R - 現在のCPUのレジスタを表示/編集する。

  書式: R [<reg> <value>]
  <reg> - レジスタ名を指定
    レジスタ名は A,B,DP,CC,X,Y,S,U,PC (*6809の場合)
  <value> - 書き込む値を指定
  レジスタ名、値を指定すると、そのレジスタの値を変更します。


  ◆ RD - 指定デバイスのレジスタや内部の状態を表示/編集する。

  書式: RD <device name> [{<regno>|<regname>} <value>]
  <device name> - デバイス名
   以下のデバイス名を指定するとレジスタの表示/編集が出来ます：
    PIA,ACIA,CRTC,KEYBOARD,CMT,TIMER,FDC3,FDC5,FDC5EX,FDDUNIT,BOARD,PSG0,PSG1,
    PIAPSG,PSG60,PSG61,VIAPSG,PSG90,PSG91,PSG92,FMOPN,PIAEX,ACIAEX,RTC,
    MSM58321
   以下のデバイス名を指定すると状態が表示されます：
    FDDINFO,FDD0,FDD1,FDD2,FDD3,EVENT
  <regno> - レジスタ番号を指定
    レジスタ番号は各デバイスのレジスタを表示させたときのインデックス番号です。
  <regname> - レジスタ名を指定
    レジスタ名は各デバイスのレジスタを表示させたときの名前です。
  <value> - 書き込む値を指定
  レジスタ番号またはレジスタ名と値を指定すると、そのレジスタの値を変更します。


  ◆ M - 現在のメモリマップを表示する。

  物理アドレスのメモリマップを確認できます。


  ◆ X - 現在のアドレスマップを表示する。
         6809でのみ有効です。

  書式: X [<segment number> | ALL]
  <segment number> - セグメント番号を指定(0～3f)。省略すると現在のセグメントの
                     マップを表示します。
  ALL              - 全セグメントのマップを表示します。

  XコマンドはシステムI/Oの$FE00～$FE0Fの内容を表示します。
  $FE11を無効にすると、セグメント番号は0に固定されます。


  ◆ XE - 現在のアドレスマップを変更する。
  ◆ XE MAP - S1 BASICが管理しているメモリ空間のアドレスマップを反映する。
  ◆ XE RESTORE - 以前のアドレスマップに戻す。

     XEコマンドは6809でのみ有効です。

  書式: XE <segment number> <a0> [<a1> [... [<aF>]]]
        XE <segment number> MAP<n>
        XE <segment number> RESTORE
  <segment number> - セグメント番号を指定(0～3f)。
  <a0> ... <aF>    - アドレス$0xxxx～$Fxxxxのマッピングデータを16個指定します。
  <n>              - 空間番号を指定(0～f)。
  RESTORE          - 最後に更新したより前のマップに戻します。

  XEコマンドはシステムI/Oの$FE00～$FE0Fの内容を変更します。
  $FE11を無効にすると、セグメント番号は0のみ指定可能になります。


  ◆ MAP - S1 BASICが管理しているメモリ空間のアドレスマップを表示する。
  ◆ MAP ID - S1 BASICが管理しているメモリ空間のメモリ識別情報を表示する。
  ◆ MAP CALL - S1 BASICが管理しているメモリ空間のシステムコールアドレスを表示
                する。
  ◆ MAP DP - メモリ空間ごとのデフォルトダイレクトポインタを表示する。
  ◆ MAP ASSIGN - S1 BASICで管理されているメモリの範囲を表示する。

     MAPコマンドは6809でのみ有効です。

  書式: MAP [<space number> | ALL]
        MAP ID [<space number> | ALL]
        MAP CALL [<space number> | ALL]
        MAP DP [<space number> | ALL]
        MAP ASSIGN
  <space number> - 空間番号を指定(0～f)。省略すると現在の空間番号のマップを
                   表示します。
  ALL            - 全空間のマップを表示します。


  ◆ MAPE - S1 BASICが管理しているメモリ空間のアドレスマップを編集する。
  ◆ MAPE ID - S1 BASICが管理しているメモリ空間のメモリ識別情報を編集する。
  ◆ MAPE DP - メモリ空間ごとのデフォルトダイレクトポインタを編集する。

     MAPEコマンドは6809でのみ有効です。

  書式: MAPE <space number> <a0> [<a1> [... [<aC>]]]
        MAPE ID <space number> <a0> [<a1> [... [<aC>]]]
        MAPE DP <space number> <dp>
  <space number> - 空間番号を指定(0～f)。
  <a0> ... <aC>  - アドレス$0xxxx～$Fxxxxのデータを13個指定します。
  <dp>           - ダイレクトポインタを指定します。


  ◆ S, SB, SW, SD, SA - メモリ内のデータを検索する。
         現在のCPUからアクセスすることができるメモリが対象です。

  書式: S[{B,W,D}] <start address> <end address> <list>
        SA <start address> <end address> "<string>"
  <start address> - 開始アドレスを指定
  <end address> - 終了アドレスを指定
  <list> - 空白区切りで値を指定
    S,SBは1バイト、SWは2バイト、SDは4バイトで指定
  <string> - アスキー形式文字列を指定

  検索実行中にESCキーを押すと処理を中断します。


  ◆ SP, SPB, SPW, SPD, SPA - 物理メモリ内のデータを検索する。
         現在のCPUからアクセスすることができるメモリが対象です。

  書式: SP[{B,W,D}] <type> <start address> <end address> <list>
        SPA <start address> <end address> "<string>"
  <type> - メモリの種類を指定。詳細はDPコマンド参照。
  <start address> - 開始アドレスを指定
  <end address> - 終了アドレスを指定
  <list> - 空白区切りで値を指定
    SP,SPBは1バイト、SPWは2バイト、SPDは4バイトで指定
  <string> - アスキー形式文字列を指定

  検索実行中にESCキーを押すと処理を中断します。


  ◆ I -  I/Oから1バイトデータを読む。
  ◆ IB - I/Oから1バイトデータを読む。
  ◆ IW - I/Oから2バイトデータを読む。
  ◆ ID - I/Oから4バイトデータを読む。
         6809はメモリマップドI/Oなので、Dコマンドを使用してください。

  書式: I[{B,W,D}] <port>
  <port>  - I/Oポートアドレスを指定


  ◆ O -  I/Oに1バイトデータを書く。
  ◆ OB - I/Oに1バイトデータを書く。
  ◆ OW - I/Oに2バイトデータを書く。
  ◆ OD - I/Oに4バイトデータを書く。
         6809はメモリマップドI/Oなので、Eコマンドを使用してください。

  書式: O[{B,W,D}] <port> <value>
  <port>  - I/Oポートアドレスを指定
  <value> - 値を指定


  ◆ U - メモリ内のデータを逆アセンブルする。
         現在のCPUからアクセスすることができるメモリが対象です。

  書式: U [<start address> [<end address>]]
  <start address> - 開始アドレスを指定
  <end address> - 終了アドレスを指定
  終了アドレスを指定しない場合、16ステップ分逆アセンブルします。


  ◆ UP - 物理メモリ内のデータを逆アセンブルする。
         現在のCPUからアクセスすることができるメモリが対象です。

  書式: UP <type> [<start address> [<end address>]]
  <type> - メモリの種類を指定。詳細はDPコマンド参照。
  <start address> - 開始アドレスを指定
  <end address> - 終了アドレスを指定
  終了アドレスを指定しない場合、16ステップ分逆アセンブルします。


  ◆ SL - 逆アセンブルで使用するシンボルラベルを登録・表示する。

  書式: SL [<address> <label>]
  <address> - アドレスを指定(16ビットで指定)
  <label>   - ラベル名を指定(最大16文字のアスキー文字)

  *シンボルラベルはCPUごとに独立しています。それぞれ登録してください。


  ◆ SLL - 逆アセンブルで使用するシンボルラベルをファイルから読む。

  書式: SLL <file path> [R|TSC]
  <file path> - ファイル名
  R           - アドレスとラベル名が逆になっているファイルを読む。
  TSC         - ラベル名,タイプ,アドレスの順になっているファイルを読む。
  読み込みに成功すると以前のシンボルはすべて削除されます。

  *シンボルラベルはCPUごとに独立しています。それぞれ登録してください。

  ファイルの書式：デフォルトでは1行ごとに以下のように記述します。
    アドレス ラベル名 アドレス ラベル名 ...
  Rを指定した時：
    ラベル名 アドレス ラベル名 アドレス ...
  TSCを指定した時：
    ラベル名 タイプ アドレス ラベル名 タイプ アドレス ...
    (タイプ部分は無視します。)
  *区切り記号はスペース、タブ、コンマ、セミコロンが使用できます。


  ◆ SC - シンボルラベルを削除する。

  書式: SC {*,ALL,<address>}
  <address> - アドレスを指定
  * または ALL - すべてを対象にします。


  ◆ H - 値1と2をたし算、引き算した結果を表示する。

  書式: H <value1> <value2>


  ◆ DN - ダンプファイルのファイル名を表示/設定する。
  ◆ DL - ダンプファイルからメモリにロードする。
  ◆ DS - メモリ内容をダンプファイルにセーブする。

  *現在のCPUからアクセスすることができるメモリが対象です。
  *ファイル名はCPUごとに独立しています。それぞれで登録してください。

  書式: DN [<filename>]
        DL <start address> [<end address>]
        DL <offset address>  (Intel hex/Motorola Sフォーマットのとき)
        DS <start address> <end address>
  <filename> - ファイル名を指定
  <start address> - 開始アドレスを指定
  <end address> - 終了アドレスを指定
  <offset address> - 開始アドレスからのオフセットを指定
    ファイル名のデフォルトは"debug.bin"
  ダンプファイルのフォーマットは拡張子で決まります。
    ".hex"           - Intel hex フォーマット
    ".s"または".mot" - Motorola S フォーマット
    上記以外は、バイナリになります。
  Intel hexやMotorola Sフォーマットからロードする場合、開始アドレスは
  ファイル内のデータで設定されます。


  ◆ DPL - ダンプファイルから物理メモリにロードする。
  ◆ DPS - 物理メモリ内容をダンプファイルにセーブする。

         現在のCPUからアクセスすることができるメモリが対象です。

  書式: DPL <type> <start address> [<end address>]
        DPL <type> <offset address>  (Intel hex/Motorola Sフォーマットのとき)
        DPS <type> <start address> <end address>
  <type> - メモリの種類を指定。詳細はDPコマンド参照。
  残りの指定方法は、DL,DSコマンドと同じです。


  ◆ DIS - メモリ内容を画像ファイルにセーブする。
          6809でのみ有効です。

  書式: DIS <type>
  <type> - メモリの種類を指定。
    0 : IG RAM (ALL)
    1 : IG RAM (青)
    2 : IG RAM (赤)
    3 : IG RAM (緑)
    4 : グラフィックRAM (ALL)
    5 : グラフィックRAM (青)
    6 : グラフィックRAM (赤)
    7 : グラフィックRAM (緑)
  保存ファイルはYYYY-MM-DD_HH-MI-SS_NN.bmpまたは.pngとなります。
  ファイル形式は設定ダイアログにて指定した形式となります。
  スナップショットパスを設定している場合は、そのフォルダ内に保存されます。  


  ◆ DDIS - メモリ内容をテキストファイルにセーブする。
            画像をパレット番号の配列で出力します。

  書式: DDIS <type>
  <type> - メモリの種類を指定。
  保存ファイルはYYYY-MM-DD_HH-MI-SS_NN.txtとなります。
  スナップショットパスを設定している場合は、そのフォルダ内に保存されます。  


  ◆ G - 一時停止している処理を続行する。

  書式: G [{<address>,<sign>}]
  <address> - 停止するアドレスを指定
  <sign> - 以下の記号を指定
   "n"または"N"を指定した時は、次のアドレスを設定します（ステップオーバー）。
    これは、次の命令がサブルーチンにジャンプする命令の場合、サブルーチンから戻って
  くるまでを実行します。
  アドレスや記号を指定すると、そのアドレスがブレークポイントのリストに登録され、
  ほかのブレークポイント、トレースポイントはすべて無効状態になります。
  ブレークポイントに達すると処理を停止します。

  Gコマンド実行中にESCキーを押すと処理を停止します。


  ◆ T - トレース（逆アセンブル）しながら実行する。

  書式: T [<count> [<skip count>]]
  <count> - トレースする回数を指定
  <skip count> - スキップ数を指定。デフォルトは0
  スキップ数を指定すると、指定の数だけ命令を実行したのち1回トレースします。
  この場合、全ステップ数は<トレース回数>*<スキップ数+1>となります。

  Tコマンド実行中にESCキーを押すと処理を停止します。


  ◆ TB - トレースバック。最近実行した命令をさかのぼって表示する。

  書式: TB [<count>]
  <count> - トレースバックするステップ数を指定(最大1000)。デフォルトは25。

  ◆ RS - トレース中CPUのレジスタを表示する。
  ◆ RH - トレース中CPUのレジスタを非表示にする。

  書式: RS, RH


  ----------------------------------------
  ■ブレークポイント、トレースポイント

  ブレークポイントは条件に一致するとそこで処理を停止します。
  トレースポイントは条件に一致するとそこの命令をトレースします。停止はしません。

  *ブレークポイント、トレースポイントはCPUごとに独立しています。
   それぞれで登録してください。

  ◆ BP  - CPUが指定アドレスのOPコードをフェッチする前に停止する。
  ◆ RBP - CPUが指定アドレスのメモリをリードした後に停止する。
  ◆ WBP - CPUが指定アドレスのメモリをライトした後に停止する。
 *◆ IBP - CPUが指定アドレスのI/Oをリードした後に停止する(Z80のみ)。
 *◆ OBP - CPUが指定アドレスのI/Oをライトした後に停止する(Z80のみ)。
  ◆ NBP - 割り込みが発生した時に停止する。
  ◆ EBP - 例外が発生した時に停止する(68008のみ)。

  ◆ BPP - 物理アドレスで指定する以外はBPと同じ。
  ◆ RBPP - 物理アドレスで指定する以外はRBPと同じ。
  ◆ WBPP - 物理アドレスで指定する以外はWBPと同じ。

  ◆ TP  - CPUが指定アドレスのOPコードをフェッチする前にトレースする。
  ◆ RTP - CPUが指定アドレスのメモリをリードした後にトレースする。
  ◆ WTP - CPUが指定アドレスのメモリをライトした後にトレースする。
 *◆ ITP - CPUが指定アドレスのI/Oをリードした後にトレースする(Z80のみ)。
 *◆ OTP - CPUが指定アドレスのI/Oをライトした後にトレースする(Z80のみ)。
  ◆ NTP - 割り込みが発生した時にトレースする。
  ◆ EBP - 例外が発生した時にトレースする(68008のみ)。

  ◆ TPP - 物理アドレスで指定する以外はTPと同じ。
  ◆ RTPP - 物理アドレスで指定する以外はRTPと同じ。
  ◆ WTPP - 物理アドレスで指定する以外はWTPと同じ。

 * 6809および68008は、IBP,OBP,ITP,OTPの代わりにRBP,WBP,RTP,WTPコマンドを使用してください。

  書式: {B,T}P [{<address(es)>,<sign>} [<expression>]]
        {R,W}{B,T}P [<address(es)> [<value>]]
        {I,O}{B,T}P [<port address(es)> [<value>]]
        N{B,T}P [<signal name> [<switch>]]
        E{B,T}P [<exception name> [<vector>]]
  <address(es)> - アドレスを指定
   アドレスは1つまたは、<開始アドレス>-<終了アドレス>のようにハイフン(-)を使用
  して範囲を指定することができます。
  <sign> - 以下の記号を指定
   "."(ピリオド)を指定した時は、現在のアドレス(次に実行する命令のアドレス)を
  設定します。
   "n"または"N"を指定した時は、次のアドレス(次に実行する命令のアドレスの後)を
  設定します。
  <expression> - 式を指定
   式を指定すると、指定したレジスタの値が一致した時に停止します。
   <レジスタ名>=<値> の形で指定します。
  <value> - 値を指定
   また、"value&mask"の形式で値とマスクを指定することができます。
   リード時は読み込んだ値、ライト時は書き込んだ値が一致した時に停止します。
  <port address(es)> - I/Oポートアドレスを指定
   アドレスは1つまたは、<開始アドレス>-<終了アドレス>のようにハイフン(-)を使用
  <signal name> - RESET,NMI,IRQ,FIRQ,HALTのいずれかを指定(6809の場合)
  <switch> - 以下のいずれかを指定
   "ON"を指定または引数を省略すると、割り込みが発生した時点を捕捉します。
   "OFF"を指定すると、割り込みが解除された時点を捕捉します。
   "CHG"を指定すると、割り込み状態が変化した時点を捕捉します。
  <exception name> - 例外名を指定
  <vector> - ベクタ番号を指定
   これを指定すると、ベクタ番号が一致した時のみ停止します。

  コマンドオプションを指定しない場合、現在登録しているポイントの一覧を表示
  します。

  登録はそれぞれ64個までです。同時に有効にできるのはそれぞれ8つまでになります。


  ◆ BC,  BD,  BE  - BPで設定したブレークポイントを操作
  ◆ RBC, RBD, RBE - RBPで設定したブレークポイントを操作
  ◆ WBC, WBD, WBE - WBPで設定したブレークポイントを操作
 *◆ IBC, IBD, IBE - IBPで設定したブレークポイントを操作
 *◆ OBC, OBD, OBE - OBPで設定したブレークポイントを操作
  ◆ NBC, NBD, NBE - NBPで設定したブレークポイントを操作
  ◆ EBC, EBD, EBE - EBPで設定したブレークポイントを操作

  ◆ BPC,  BPD,  BPE  - BPPで設定したブレークポイントを操作
  ◆ RBPC, RBPD, RBPE - RBPPで設定したブレークポイントを操作
  ◆ WBPC, WBPD, WBPE - WBPPで設定したブレークポイントを操作

  ◆ TC,  TD,  TE  - TPで設定したトレースポイントを操作
  ◆ RTC, RTD, RTE - RTPで設定したトレースポイントを操作
  ◆ WTC, WTD, WTE - WTPで設定したトレースポイントを操作
 *◆ ITC, ITD, ITE - ITPで設定したブレークポイントを操作
 *◆ OTC, OTD, OTE - OTPで設定したブレークポイントを操作
  ◆ NTC, NTD, NTE - NTPで設定したトレースポイントを操作
  ◆ ETC, ETD, ETE - ETPで設定したトレースポイントを操作

  ◆ TPC,  TPD,  TPE  - TPPで設定したトレースポイントを操作
  ◆ RTPC, RTPD, RTPE - RTPPで設定したトレースポイントを操作
  ◆ WTPC, WTPD, WTPE - WTPPで設定したトレースポイントを操作

  コマンドの末尾がC: ブレークポイント、トレースポイントを削除する。
  コマンドの末尾がD: ブレークポイント、トレースポイントを一時無効にする。
  コマンドの末尾がE: ブレークポイント、トレースポイントを有効にする。

  書式: [{R,W,I,O,N,E}]{B,T}{C,D,E} [{*,ALL,<list>}]
  書式: [{R,W}]{B,T}P{C,D,E} [{*,ALL,<list>}]
  <list> - インデックス番号を指定。10進数で指定してください。複数指定できます。
  * または ALL - すべてを対象にします。

  コマンドオプションを指定しない場合、現在登録しているポイントの一覧を表示
  します。


  ◆ BL - すべてのブレークポイント一覧を表示します。
  ◆ TL - すべてのトレースポイント一覧を表示します。


  ----------------------------------------

  ◆ CL - 現在の各CPUのクロック数、経過時間を表示します。


  ◆ > - ログファイルを開く/閉じる。

  書式: > [<filename>]
  ファイル名に"CLOSE"を指定するとログファイルを閉じます。
  ファイル名を指定しない場合、現在のファイル名を表示します。


  ◆ PWD - 現在の作業ディレクトリを表示する。


  ◆ CD - 作業ディレクトリを変更する。

  書式: CD <path>


  ◆ DIR, LS - 現在のディレクトリ内のファイルを表示する。

  書式: DIR
        LS


  ◆ ! - エミュレータ(VM)にコマンドを送信する。

  ! reset [all,cpu] - リスタート(パワーonリセット)を送信。
  ! key <code> [<msec>] - キーコードを送信。


  ◆ Q - デバッガを終了する。


  ----------------------------------------
  ■ BAS - S1/LEVEL-3 BASICデバッガ
           6809でのみ有効です。

  ◆ BAS VAR - BASICの変数の一覧を表示する。

  書式: BAS VAR [<name(s)> ...]
  <name(s)> - 一致する変数（配列変数を含む）の名称および値を表示します。


  ◆ BAS LIST - BASICプログラムリストを表示する。

  書式: BAS LIST [<line number(s)>]
  <line number(s)> - 表示する行番号を10進数で指定します。
        行番号は<開始行番号>-<終了行番号>のようにハイフン(-)を使用して
        範囲を指定することができます。
        また"."(ピリオド)を指定すると、現在実行している行を表示します。

  【注意】ASCII、半角カナ以外の文字は"."になります。半角カナは端末がシフトJISに
          対応していないと表示されません。
  【注意】拡張BASIC命令を追加した後は、BAS COMMANDを実行し予約語一覧を読み直して
          下さい。


  ◆ BAS BP - ブレークポイント。BASICの行番号が一致した時に停止する。
  ◆ BAS TP - トレースポイント。BASICの行番号が一致した時にリストを表示する。

  書式: BAS {B,T}P [<line number(s)>]
  <line number(s)> - 表示する行番号を10進数で指定します。
        行番号は<開始行番号>-<終了行番号>のようにハイフン(-)を使用して
        範囲を指定することができます。
        また"."(ピリオド)を指定すると、現在実行している行を対象にします。

  コマンドオプションを指定しない場合、現在登録しているポイントの一覧を表示
  します。

  【注意】ブレークポイント、トレースポイントを設定すると自動的にトレースがONに
          なります。
  【注意】同じ行をループする場合はこの行に入った一度だけ対象となりループ中は
          対象になりません。


  ◆ BAS BC, BAS BD, BAS BE
  ◆ BAS TC, BAS TD, BAS TE

  コマンドの末尾がC: ブレークポイント、トレースポイントを削除する。
  コマンドの末尾がD: ブレークポイント、トレースポイントを一時無効にする。
  コマンドの末尾がE: ブレークポイント、トレースポイントを有効にする。

  書式: BAS {B,T}{C,D,E} {*,ALL,<list>}
  <list> - インデックス番号を指定。
  * または ALL - すべてを対象にします。


  ◆ BAS TB - 最近実行したBASICプログラムのリストをさかのぼって表示する。

  最大、64行まで表示します。


  ◆ BAS TRON  - ブレークポイント、トレースポイントでリストを表示する。
  ◆ BAS TROFF - ブレークポイント、トレースポイントでリストを表示しない。

  ブレークポイント、トレースポイントに一致した時にリストを表示するかどうかを
  指定します。ブレークポイント、トレースポイントを設定したとき自動的にONに
  なります。


  ◆ BAS COMMAND - BASIC予約語の一覧を表示する。

  BASIC予約語をメモリから読み出し一覧にして表示します。
  予約語一覧はデバッガ内部でキャッシュされます。


  ◆ BAS ERROR - BASICのエラーを表示する。

  書式: BAS ERROR [<error number>]
  <error number> - エラー番号を指定。
        エラー番号を指定すると、その番号のエラーメッセージを表示します。
        エラー番号を省略すると、最後に発生したエラーを表示します。


----------------------------------------
● トレース時の逆アセンブル書式
----------------------------------------

6809の場合：

  [a]-- [b]- [c]----------- [d]--------------- [e]  [f]
  E43AB 23AB B7 FF D0       STA $FFD0          ( 3) (W FFD0:04)          ←[1]
DP:00 A:04 B:03 X:0F84 Y:FDC4 U:FF18 S:9ED0 CC:[-F-I-Z--] FIRQ(0001)     ←[2]
> E43AE 23AE 86 04          LDA #$04                                     ←[3]

  [1] 実行したコード
    左から、[a]物理アドレス、[b]アドレス、[c]マシン語コード、[d]ニーモニック、
    [e]消費マシンサイクル、[f]メモリリード/ライト時の値

  [2] CPUのレジスタ値 と 発生している割り込み
    割り込み名の後ろにつく数値は、割り込みを発生させているデバイスを16進数で
    示しています。各割り込みに対する数値の意味は以下の通り：
   NMI:
    0001 トレース
    0002 トラップ($BFxxxアクセス)
    0004 フロッピーディスク
    0008 BREAKキー押下
    1000 Z80Bカード(NMI選択時)
   IRQ:
    0001 キーボード押下
    0002 マウスボタン押下
    0004 PIA Aポート
    0008 PIA Bポート
    0010 拡張PIA Aポート
    0020 拡張PIA Bポート
    0040 ACIA
    0080 拡張ACIA
    0100 9声PSG VIAタイマ
    0200 FM音源 タイマ(IRQ選択時)
    0400 FM音源(拡張PSG) タイマ(IRQ選択時)
    1000 Z80Bカード(IRQ選択時)
   FIRQ:
    0001 1/60secタイマ
    0002 1ms/2msタイマ
    0200 FM音源 タイマ(FIRQ選択時)
    0400 FM音源(拡張PSG) タイマ(FIRQ選択時)
   HALT:
    0001 パレットリード
    0002 2HDフロッピーディスク
    2000 68008カード

  [3] 次に実行するコード


Z80の場合：

  [a]-- [b]- [c]----------- [d]--------------- [e]   [f]
  00014 0014 7E             LD   A, (HL)       ;( 8) ;(R CD21:80)        ←[1]
F = [--------]  A = 80  BC = 0000  DE = 0000  HL = CD21  IX = ABCD  IY = FFFF
F'= [--------]  A'= 00  BC'= 0000  DE'= 0000  HL'= 0000  SP = 0000  PC = 0016
        I = 00  R = 0B <DI>                                              ←[2]
> 00016 0016 ED 79          OUT (C), A                                   ←[3]

  [1] 実行したコード
    左から、[a]物理アドレス、[b]アドレス、[c]マシン語コード、[d]ニーモニック、
    [e]消費マシンサイクル、[f]メモリリード/ライト時の値

  [2] CPUのレジスタ値 と 発生している割り込み
  [3] 次に実行するコード


MC68008の場合：

  [a]-- [b]------------------------------- [c]----------------  [d]  [e]
  000D6 122E 0002                          move.b  ($2,A6),D1 ; (12) (R 5:FFFF82:01)           ←[1]
D0:00000000 D1:00000001 D2:000B89A4 D3:00000000 D4:00000000 D5:00000000 D6:00000000 D7:00000000 ←[2.1]
A0:00000000 A1:00000000 A2:00000000 A3:00000000 A4:00000000 A5:00000000 A6:00FFFF80 A7:00042000 ←[2.2]
PC:000000D6 USP:00000000 SSP:00042000 SR:2000 [-------:S:M0:------------] ←[f]                 ←[2.3]
> 000DA 67F4                               beq     $0000D0                                     ←[3]

  [1]
   通常実行時、実行したコード
    左から、[a]アドレス、[b]インストラクションコード、[c]ニーモニック、
    [d]消費マシンサイクル、
    [e]メモリリード/ライト時の値
     左から R/W ファンクションコード(0～7):アドレス:値
   状況によっては[c]位置に特別なメッセージが出ることがあります。
    "; Rrefetch"
         プリフェッチ(命令は未実行) 分岐した後に発生する。
    "; Exception: Read vector"
         例外発生、ベクタアドレス読み込み
    "; Interrput: Read vector number"
         割り込み例外発生、ベクタ番号読み込み
    "; Reset"
         リセット受信
    "; Address error"
         アドレスエラー発生
    "; Bus error"
         バスエラー発生
    "; Bus request"
         バスリクエスト受信
    "; Halt"
         ホルト(HALT信号受信または２重障害発生)

  [2] CPUのレジスタ値
   [2.1] データレジスタ
   [2.2] アドレスレジスタ
    A7は現モードでのスタックポインタ値となる。
   [2.3] そのほかのレジスタ
    PC:  プログラムカウンタ
    USP: スタックポインタ(ユーザーモード)
    SSP: スタックポインタ(スーパーバイザーモード)
    SR:  ステータスレジスタ
    [f]の部分はステータスと外部信号の状態を表します。
     [T-XNZVC:S:M0:-210EsAQVBhH]
      ------- - -- ------------
     |       | |  |           H:HALT信号アサートで停止
     |       | |  |          h:２重障害でHALT停止
     |       | |  |         B:バスエラー発生
     |       | |  |        V:VPA信号アサート
     |       | |  |       Q:BUSREQ信号アサート
     |       | |  |      A:アドレスエラー発生
     |       | |  |     s:STOP命令実行による停止
     |       | |  |    E:例外発生
     |       | |  |   0:IPL0信号アサート
     |       | |  |  1:IPL1信号アサート
     |       | |  | 2:IPL2信号アサート
     |       | |
     |       | | 0-7:割り込みマスクレベル
     |       |
     |       |S:スーパーバイザーモード
     |       |U:ユーザーモード
     |      
     |      C:キャリー
     |     V:オーバーフロー
     |    Z:ゼロ
     |   N:ネガティブ
     |  X:エクステンド
     |T:トレース

  [3] 次に実行する予定のコード
   プログラムカウンタが示しているアドレスのコードを表示。

==============================================================================
