ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます
当記事は2009年11月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 2011.6.30
前へ
次へ
目次へ戻る
ホームページトップへ戻る
☆USB接続 リモートプログラム
ND80ZVはその昔のTK80と同じ動作をします。CPUはZ80ですがTK80モニタプログラムとほとんど同じプログラムが搭載されています。
しかしそれだけではありません。ND80ZVにはTK80のイメージからは想像できないほどいろいろな機能を満載しています。
そのうちの1つがUSB接続です。
ND80ZVはボード上のPIC18F14K50のUSBインターフェースを介してUSBでWindowsパソコンと接続してデータの送受信を行なうことができます。
その機能の応用の1つとして、リモートプログラムを紹介します。

[第44回]

●USB(HID)応用 リモートプログラム(4)

今回もリモートプログラムの説明です。

前回までのところで、ND80Zモニタの機能によって、プログラムをステップ動作させたときに、レジスタダンプがUSB経由でホスト(DOS/Vパソコン)のDOS窓に表示されることなどを説明いたしました。
C を入力すると、リモートで[CONT]キーを入力したことになって、入力するたびに1命令ずつステップ実行され、そのときのレジスタの値がDOS窓に表示されます。

なお、現在のリモートプログラムでは[C]キーを入力すると[CONT]キー入力として動作するように作ってあるのですが、それではちょっとまずいことに気が付きました。
前回の表示例のようにレジスタダンプの直後に[C]キーを入力するのは構わないのですが、[ADRSSET]を操作して、どこかのアドレスを参照して、そこにCXというデータを書こうとしても、データの[C]ではなくて、[CONT]の意味になってしまいます。
これについては、なんとか対策を考えてみます。

お話をもとに戻します。
そのようにして(今のところは)[C]を入力するたびに、1ステップずつ実行させることができるのですが、もう少し効率よく連続してステップ動作をさせてみたいというときもあると思います。

そのような目的のために、ND80Zモニタにはトレースの機能が用意されています。
この機能ももともとはプリンタに連続してレジスタダンプを行うというものなのですが、これについても、USB経由でDOS窓に結果を表示させられるようにしました。

トレースを有効にするためには、ディップスイッチのAUTO/STEP切り換えスイッチをステップ側にしておいたうえで、/Tと入力します。



/Tまたは/tと入力すると、トレースが有効になって、トレース設定レジスタアドレスのFFD1が表示され、trace onと表示されます。
このようにしたあとで、r(またはR) または c(またはC) を入力すると、普通は1ステップだけ実行されるところが、一度に連続して16ステップ実行されます。



さらに続いてトレースしたい場合には、同じように/tを入力したあとで cまたはC を入力します。
するとまたその次の16ステップが連続して実行されます。



さてさて、今回作成したリモートプログラムにはもっとすごい機能があるのです。
その機能とは何でしょうか?
上の画面をよーくご覧いただきますと、おおおっ、ひょっとして、これは?
とお気づきいただけるのではないか、と期待しております。

実は、[第41回]でリモートプログラムの最初のエントリ部分をお見せしましたときに、エントリした最初の行がスクロールして消えてしまっていました。
その消えてしまった行には、
logfile nd80zlog\06162115.txt open
という表示があったのです。

●LOGファイル

リモートであれこれ操作して、今まで説明しましたようなステップ動作やトレース動作などをさせて、レジスタダンプをさせることができれば、そりゃあ便利ですけれど、これが結果を紙にプリントアウトできるならば、あとからじっくり検討したり、デバッグすることもできます。
しかし、画面に表示されるだけで、どんどんスクロールして消えてしまう、というのは。
いやあ、それは、ちょっと、といいますか、非常に困る。おおいに困ります。

そういうことならば、これはもうなんとかするしかない、です。
で、作ってしまいました。
そんなわけで、実はこのリモートプログラムには起動したときから終了したときまでを忠実に記録するログ機能が働いているのです。

ログファイルはリモートプログラムが置かれているフォルダ内に作られたnd80zlogフォルダ(存在しないときは自動的に新たに作成されます)に、そのリモートプログラムが起動されたときの、月日時分を名前とするtxtファイルとしてopenされます。
ですから1年経つと日付が重なってしまいます。
てきとうなところでフォルダ内を整理するか、ログフォルダを適当な名前で保存してしまうとよいでしょう。

1年以内なら同じ名前のログファイルは作られることはありません。
もっとも1分以内に2回以上リモートプログラムを起動−終了すれば話は別なのですけれど。
まあ、そんな場合のログファイルには見るべき価値はないのではありませんでしょうか?

下にお見せしますのは、今回の説明のために行いましたリモートプログラムの操作を記録したログファイルです。
各説明のところでお見せしましたDOS窓の表示内容と比べてみてください。
logfile nd80zlog\06162115.txt open

ND80ZVに接続しました
send[read+]
0001 0000 - 8000[ADRSSET]
8000 003E - [RD+]
8001 3E03 - [RD+]
8002 0332 - [RD+]
8003 32FF - [RD+]
8004 FFEF - [RD-]
8003 EFFF - [RD-]
8002 FF32 - /l music2.btk [LOAD] music2.btk
send data 229(=e5) bytes
8000 80E0 - /l neko3.btk [LOAD] neko3.btk
send data 501(=1f5) bytes
8100 82F0 - r [RUN]
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
0000 0000 0000 0000 F800 8101 0000 0000 0000 0000 0000 0000 FF35 00000000 00
8000[ADRSSET]
8000 003E - r [RUN]
8000 003E - 8030/d[MEMORY DUMP]
8000  3E 03 32 FF EF 21 00 81 3A FD EF 4F 7E FE FF CA  >.2..!..:..O~..ハ
8010  0F 08 B7 CA 6A 80 FE 1E D2 83 80 F5 B9 CC 88 80  ..キハj...メ...ケフ..
8020  23 46 23 F1 E5 21 A5 80 87 5F 16 00 19 56 23 5E  #F#..!・.._...V#^
8030  3A FF EF 6F 60 7B 32 FE EF 4A 3E FF D3 98 E5 E5  :..o`{2..J>.モ...
8000[ADRSSET]
8000 003E - 8020/a[DIS ASM]

8000 3E03        LD A,03
8002 32FFEF      LD ($EFFF),A
8005 210081      LD HL,$8100
8008 3AFDEF      LD A,($EFFD)
800B 4F          LD C,A
800C 7E          LD A,(HL)
800D FEFF        CP FF
800F CA0F08      JP Z,$080F
8012 B7          OR A
8013 CA6A80      JP Z,$806A
8016 FE1E        CP 1E
8018 D28380      JP NC,$8083
801B F5          PUSH AF
801C B9          CP C
801D CC8880      CALL Z,$8088
8020 23          INC HL
8A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
7F50 05E9 FF00 FFF8 FFB7 0D7D 0000 0000 0583 0000 0000 0000 FF01 01010000 00
8000[ADRSSET]
8000 003E - r [RUN]
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
0350 05E9 FF00 FFF8 FFB7 8002 0000 0000 0583 0000 0000 0000 FF69 01010000 00
c [CONT]
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
0350 05E9 FF00 FFF8 FFB7 8005 0000 0000 0583 0000 0000 0000 FF42 01010000 00
c [CONT]
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
0350 05E9 FF00 8100 FFB7 8008 0000 0000 0583 0000 0000 0000 FF41 01010000 00
c [CONT]
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
EA50 05E9 FF00 8100 FFB7 800B 0000 0000 0583 0000 0000 0000 FF10 01010000 00
c [CONT]
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
EA50 05EA FF00 8100 FFB7 800C 0000 0000 0583 0000 0000 0000 FF54 01010000 00
/r
*** REGISTER mode entry ***
[ AF ] FFEA EA50 - [RD+]
[ BC ] FFE8 05EA - [RD+]
[ DE ] FFE6 FF00 - [RD+]
[ HL ] FFE4 8100 - [RD+]
[ SP ] FFE2 FFB7 - [RD+]
[ PC ] FFE0 800C - 8016[WR+]
[ IX ] FFDE 0000 - [RD-]
[ PC ] FFE0 8016 - /a[ AF ] FFEA EA50 - 0000[WR+]
[ BC ] FFE8 05EA - [RD-]
[ AF ] FFEA 0000 - /0
*** REGISTER mode end ***
FFEA 0000 - c [CONT]
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
009B 05EA FF00 8100 FFB7 8018 0000 0000 0583 0000 0000 0000 FF54 10011011 00
c [CONT]
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
009B 05EA FF00 8100 FFB7 801B 0000 0000 0583 0000 0000 0000 FF4F 10011011 00
/t[TRACE SET]
FFD1 9B10 -  trace on
c [CONT]
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
009B 05EA FF00 8100 FFB5 801C 0000 0000 0583 0000 0000 0000 FF20 10011011 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
003B 05EA FF00 8100 FFB5 801D 0000 0000 0583 0000 0000 0000 FF4B 00111011 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
003B 05EA FF00 8100 FFB5 8020 0000 0000 0583 0000 0000 0000 FF78 00111011 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
003B 05EA FF00 8101 FFB5 8021 0000 0000 0583 0000 0000 0000 FF4F 00111011 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
003B 02EA FF00 8101 FFB5 8022 0000 0000 0583 0000 0000 0000 FF4E 00111011 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
003B 02EA FF00 8102 FFB5 8023 0000 0000 0583 0000 0000 0000 FF17 00111011 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
0BCD 02EA FF00 8102 FFB7 8024 0000 0000 0583 0000 0000 0000 FF5F 11001101 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
0BCD 02EA FF00 8102 FFB5 8025 0000 0000 0583 0000 0000 0000 FF3D 11001101 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
0BCD 02EA FF00 80A5 FFB5 8028 0000 0000 0583 0000 0000 0000 FF50 11001101 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
1610 02EA FF00 80A5 FFB5 8029 0000 0000 0583 0000 0000 0000 FF1C 00010000 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
1610 02EA FF16 80A5 FFB5 802A 0000 0000 0583 0000 0000 0000 FF0A 00010000 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
1610 02EA 0016 80A5 FFB5 802C 0000 0000 0583 0000 0000 0000 FF42 00010000 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
1600 02EA 0016 80BB FFB5 802D 0000 0000 0583 0000 0000 0000 FF6F 00000000 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
1600 02EA 4716 80BB FFB5 802E 0000 0000 0583 0000 0000 0000 FF47 00000000 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
1600 02EA 4716 80BC FFB5 802F 0000 0000 0583 0000 0000 0000 FF4E 00000000 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
1600 02EA 471C 80BC FFB5 8030 0000 0000 0583 0000 0000 0000 FF11 00000000 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
0300 02EA 471C 80BC FFB5 8033 0000 0000 0583 0000 0000 0000 FF2C 00000000 00
/t[TRACE SET]
FFD1 0010 -  trace on
c [CONT]
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
0300 02EA 471C 8003 FFB5 8034 0000 0000 0583 0000 0000 0000 FF7E 00000000 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
0300 02EA 471C 0203 FFB5 8035 0000 0000 0583 0000 0000 0000 FF76 00000000 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
1C00 02EA 471C 0203 FFB5 8036 0000 0000 0583 0000 0000 0000 FF41 00000000 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
1C00 02EA 471C 0203 FFB5 8039 0000 0000 0583 0000 0000 0000 FF0E 00000000 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
1C00 0247 471C 0203 FFB5 803A 0000 0000 0583 0000 0000 0000 FF47 00000000 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
FF00 0247 471C 0203 FFB5 803C 0000 0000 0583 0000 0000 0000 FF44 00000000 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
FF00 0247 471C 0203 FFB5 803E 0000 0000 0583 0000 0000 0000 FF21 00000000 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
FF00 0247 471C 0203 FFB3 803F 0000 0000 0583 0000 0000 0000 FF74 00000000 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
FF00 0247 471C 0203 FFB1 8040 0000 0000 0583 0000 0000 0000 FF27 00000000 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
FF00 0247 471C FFD1 FFB3 8041 0000 0000 0583 0000 0000 0000 FF03 00000000 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
FF00 0247 471C 0003 FFB5 8042 0000 0000 0583 0000 0000 0000 FF11 00000000 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
FF00 0247 471C 0003 FFB5 8043 0000 0000 0583 0000 0000 0000 FF20 00000000 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
FF02 0246 471C 0003 FFB5 8044 0000 0000 0583 0000 0000 0000 FF6E 00000010 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
FF02 0246 471C 0003 FFB5 803E 0000 0000 0583 0000 0000 0000 FF55 00000010 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
FF02 0246 471C 0003 FFB3 803F 0000 0000 0583 0000 0000 0000 FF3A 00000010 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
FF02 0246 471C 0003 FFB1 8040 0000 0000 0583 0000 0000 0000 FF02 00000010 00
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
FF02 0246 471C FFD1 FFB3 8041 0000 0000 0583 0000 0000 0000 FF64 00000010 00

ndremote.exeを終了しました
logfile closed at Wed Jun 16 21:15:30 2010

いかがでしたでしょうか?
お、おー、と少しばかりは感嘆していただけますことを、心ひそかにご期待申し上げております。
であります。
CPUをつくろう!第529回(2010.6.20upload)を再編集

ワンボードマイコンをつくろう![第44回]
2011.6.30upload

前へ
次へ
目次へ戻る
ホームページトップへ戻る