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


PICBASICコンパイラ

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第92回]



●SDカードIF(12)ND80Z3.5に接続(5)Lコマンド

相変わらず何日か間を空けての更新になっています。
昨日もたった1箇所のバグのためにまるっと1日を費やしてしまいました。
早朝から追求していたのですがみつからず日暮れどきになってからやっとバグを発見してほっとしました。
そういうときはバグ発見を祝って金麦で乾杯です。
これで作業は多分進むと思うのですがまた思わぬところにバグが潜んでいて虫取りに専念することになってしまうかもしれません。
気長なお付き合いをお願いいたします。

前回はSコマンドを検証しました。
セクタを読み出してデータが正しく書き込まれていることは確認できたのですが、その手法はデバッグのためのもので実用にはなりません。
Sコマンドと対になるコマンドはLコマンドです。
SコマンドはND80Z3.5のRAMアドレスを指定してその範囲のデータをSDカードにファイル名をつけて保存する機能でした。
Lコマンドは本来ならばロード先のアドレスを指定すべきなのですが、実際のところND80Z3.5と接続して行なっている現在のプログラム作成/デバッグ作業自体が仮の作業で最終的にはPICBASICコンパイラボード(PIC18F4550/2550を想定)に新SDカードIFボードを接続することが最終目的です。
いずれそのあたりについても説明するつもりなのですが、D(DIR)コマンドにしてもSコマンドにしてもLコマンドにしてもND80Z3.5を離れてPICBASICコンパイラボード本来の使い方になった場合、当然今のような使い方はできません。
PICBASICコンパイラボードはそのボードだけでスタンドアローン(独立、単独で)動作することが本来の使い方と考えています。
DコマンドもSコマンドもLコマンドもND80Z3.5かWindowsパソコンとUSB経由で接続しなければ使えません。
なぜならキーボード入力が必須になりますし(それはWindowsのフルキーボード入力ということになります)、セーブ、ロードするデータもPICBASICコンパイラプログラムによって作成したデータか、PICBASICコンパイラの作業エリアにロードすることになると考えています(実際にどのようなものになるかについてはまだ思案中です)。
説明が長くなってしまいましたが、そうなるとSコマンドやLコマンドでND80Z3.5のメモリをターゲットにするのはデバッグのためであって最終的な仕様ではないことになります。
そういうことならば、Lコマンドでロード先のアドレスをわざわざ指定しなくても、そこはデバッグ用に手抜きしてもよいじゃないかと考えました。
そこで。
LコマンドについてはND80Z3.5のRAMエリアの先頭アドレス8000に固定してそこにロードすることにしました。

いつものようにND80Z3.5を起動してZB3BASICにエントリしました。

このところずっとND80Z3.5はSDカードIFのデバッグプログラム専用に使っています。
RAMはボタン電池でバックアップしていますからプログラムはそのまま残っています。
ですからプログラムを再ロードしなくてもいつでもJP A000で実行することができます。
Dコマンドを実行してディレクトリを表示しました。
前回ディレクトリを表示してから随分デバッグのために沢山のテストデータをセーブしてきました。
余りファイル名が増えるとデバッグがやりにくくなるので一旦Windows7で再フォーマットしました。
それでももうこれだけテストデータファイルをセーブしています。

ディレクトリの最初のセクタの中身です。

このところのテストではバイト数の大きなファイルを扱っています。
各ファイル名エリアの2段目、後ろから5、6バイトのところにクラスタbェあります。
0002、0004、0006というように1番飛びのbノなっています。
2つのクラスタにまたがる大きなファイルです。
1つのクラスタは64セクタです。
1セクタは512バイトですからクラスタ内の全セクタの容量は32KBです。
このところはセーブ、ロードに32KBを越える大きなファイルを扱ってテストをしています。
今回のLコマンドのテストにはちょっとサイズが大きすぎて扱いにくいので今までと同じぐらいのサイズのデータファイルをセーブしてそれをLコマンドのテストに使います。

まずはもとになるテストデータの作成です。

一旦 eコマンドでデバッグプログラムを終了してZB3BASICに戻ります。
デバッグプログラムの実行中はプロンプトマークの表示が ) になっていて、このときはデバッグプログラムのコマンド以外は受け付けません。
デバッグプログラムを終了してZB3BASICに戻るとプロンプトマークが > になって、BASICやZ80マシン語モニタコマンドが入力できるようになります。
/ldコマンドでmktdata.binコマンドをB000にロードしました。
mktdataプログラムは[第90回]で説明しました。
jp b000
で実行したあと念のためdmコマンドでRAMの中身を確認しました。
テストデータはちゃんと作成されたようなのでもう一度
jp a000
でデバッグプログラムを実行しました。

ディレクトリは先ほど確認していますがテストの過程をわかりやすくするためもう一度Dコマンドを実行したあとSコマンドでテストデータファイルをセーブしました。

s test13.bin,9000,9234
を実行したあとdコマンドで再度ディレクトリを表示しました
ディレクトリ表示の最後にTEST13.BINが表示されました。

これでやっと準備ができましたのでこれからLコマンドのテストにかかろうとしたのですが。
もうひとつ準備を忘れていたことを思い出しましたので再度デバッグプログラムを終了してZB3BASICに戻りました。

上のほうで説明しましたようにLコマンドは常にND80Z3.5のRAMのアドレス8000からロードを開始するようにしてあります。
RAMの8000〜には今までいろいろなテストをしてきた結果いろいろなデータが残っています。
そういうものが残ったままだと、Lコマンドを実行してそこにテストデータをロードしてもそれが今ロードされたデータなのか(プログラムのバグなどで)ロードされずにもとのRAMの状態がそのまま残っているのかの区別がつきません。
そこでまた簡単なプログラムを作成して対象になるRAMエリアを全てFFで埋めるようにしました。
これなら一目瞭然です。
下は作成したFILLFF.BINのアセンブルリストです。
ソースプログラムfillff.txtはフリーのテキストエディタTeraPadで作成しました。
2023/10/20  17:46  fillff.txt
END=B00E
              ;;;fill 'FF' from 8000 to 8fff
                ORG $B000
                REENT=$1033
B000 210080     LD HL,$8000
B003 36FF     LOOP:LD (HL),FF
B005 23         INC HL
B006 7C         LD A,H
B007 FE90       CP 90
B009 C203B0     JP NZ,LOOP
B00C C33310     JP REENT
              ;
              ;END
              ;
LOOP         =B003  REENT        =1033  


今度こそ本当に準備完了です。
jp a000でデバッグプログラムを起動しました。

念のためもう一度Dコマンドでディレクトリを表示したあと
l test13.bin
を実行しました。
Sコマンドと同様デバッグのためPIC18F4550からのエコーも表示されています。
エコーと同時に指定したファイルのデータ数も送られてくるのでSIZE=で表示しました。
セーブしたときと同じ235(10進数では565)バイトです。
その下の8234はRAMにロードしたデータの最後のアドレスの表示です。
RAMの8000〜8234にファイルデータがロードされたことを示しています。

本当に正しくロードされたかどうかを確認するために eコマンドでデバッグプログラムを終了してZB3BASICに戻りました。

DMコマンドでRAMの中身を表示しました。
全部表示してもよいのですがテストデータはそのデータの位置を示すアドレスになっていて順序数ですから最初のところと最後のところを見るだけで判断できます。
ここでのポイントはRAMアドレス8000〜81FFが最初のセクタにセーブされたデータ(512バイト)で8200〜が次のセクタにセーブされたデータだというところです。
8200よりも前の値とうしろの値が連続していることで、ファイルのセーブとロードが正しく機能していると判断できます。

ここまでMS−DOSプロンプトの画面をキャプチャして説明に使ってきましたが、それは実際の画面を見ていただくほうがわかりやすいと思ったからで、のちの記録のためには画面をキャッチして残す必要はありません(実際これは結構手間がかかる作業です)。
ND80Z3.5のZB3BASICシステムは起動してから終了するまでを毎回起動した日時をファイル名にしたログファイルとして自動で保存します。
下が今回の作業で記録されたログファイルです。
logfile nd80zlog\10231108.txt open

ND80ZVに接続しました
0001 0000 - z
1000 00C3 - 
*** nd80z3 basic ****
ndwr2h.bin loaded,from E23F to E535
>jp a000
00
)i
49
02
)d
44
TEST1   .BIN    TEST2   .BIN    TEST3   .BIN    TEST4   .BIN    TEST5   .BIN    TEST6   .BIN    TEST9   .BIN    TEST10  .BIN    TEST11  .BIN    TEST12  .BIN    
END

)m 5
4D05
00  54 45 53 54 31 20 20 20-42 49 4E 20 20 20 20 20  TEST1   BIN     
10  20 20 20 20 20 20 20 20-20 20 02 00 00 90 00 00            ......
20  54 45 53 54 32 20 20 20-42 49 4E 20 20 20 20 20  TEST2   BIN     
30  20 20 20 20 20 20 20 20-20 20 04 00 00 90 00 00            ......
40  54 45 53 54 33 20 20 20-42 49 4E 20 20 20 20 20  TEST3   BIN     
50  20 20 20 20 20 20 20 20-20 20 06 00 00 90 00 00            ......
60  54 45 53 54 34 20 20 20-42 49 4E 20 20 20 20 20  TEST4   BIN     
70  20 20 20 20 20 20 20 20-20 20 08 00 00 90 00 00            ......
80  54 45 53 54 35 20 20 20-42 49 4E 20 20 20 20 20  TEST5   BIN     
90  20 20 20 20 20 20 20 20-20 20 0A 00 00 90 00 00            ......
A0  54 45 53 54 36 20 20 20-42 49 4E 20 20 20 20 20  TEST6   BIN     
B0  20 20 20 20 20 20 20 20-20 20 0C 00 65 87 00 00            ..e...
C0  54 45 53 54 39 20 20 20-42 49 4E 20 20 20 20 20  TEST9   BIN     
D0  20 20 20 20 20 20 20 20-20 20 0E 00 65 87 00 00            ..e...
E0  54 45 53 54 31 30 20 20-42 49 4E 20 20 20 20 20  TEST10  BIN     
F0  20 20 20 20 20 20 20 20-20 20 10 00 65 87 00 00            ..e...
DF00-DFFF
)e
>/ld mktdata.bin,b000
loading MKTDATA.BIN ...0010(16)bytes loaded,from B000 to B00F
>jp b000
>dm 9000,9020
9000  00 90 02 90 04 90 06 90-08 90 0A 90 0C 90 0E 90  ................
9010  10 90 12 90 14 90 16 90-18 90 1A 90 1C 90 1E 90  ................
9020  20 90 22 90 24 90 26 90-28 90 2A 90 2C 90 2E 90   .".$.&.(.*.,...
>dm 9fe0,a020
9FE0  E0 9F E2 9F E4 9F E6 9F-E8 9F EA 9F EC 9F EE 9F  ................
9FF0  F0 9F F2 9F F4 9F F6 9F-F8 9F FA 9F FC 9F FE 9F  ................
A000  3E 88 D3 83 3E F8 D3 82-CD C0 A8 3E FC D3 82 01  >.モ.>.モ.ヘタィ>.モ..
A010  00 04 DB 82 E6 C0 FE 40-CA 24 A0 0B 78 B1 C2 12  ..ロ..タ.@ハ$.xアツ.
A020  A0 C3 C5 A8 3E FF D3 82-DB 82 E6 C0 FE C0 C2 28  テナィ>.モ.ロ..タ.タツ(
>jp a000
00
)i
49
00
)d
44
TEST1   .BIN    TEST2   .BIN    TEST3   .BIN    TEST4   .BIN    TEST5   .BIN    TEST6   .BIN    TEST9   .BIN    TEST10  .BIN    TEST11  .BIN    TEST12  .BIN    
END

)s test13.bin,9000,9234
30,54,31,45,32,53,33,54,34,31,35,33,36,2E,37,42,38,49,39,4E,3A,4E,3B,00,
30,54,31,45,32,53,33,54,34,31,35,33,36,20,37,20,38,42,39,49,3A,4E,3B,00,
00
000235
00
)d
44
TEST1   .BIN    TEST2   .BIN    TEST3   .BIN    TEST4   .BIN    TEST5   .BIN    TEST6   .BIN    TEST9   .BIN    TEST10  .BIN    TEST11  .BIN    TEST12  .BIN    TEST13  .BIN    
END

)e
>/ld fillff.bin,b000
loading FILLFF.BIN ...000f(15)bytes loaded,from B000 to B00E
>jp b000
>dm 8000,8020
8000  FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF  ................
8010  FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF  ................
8020  FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF  ................
>dm 8fe0,9020
8FE0  FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF  ................
8FF0  FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF  ................
9000  00 90 02 90 04 90 06 90-08 90 0A 90 0C 90 0E 90  ................
9010  10 90 12 90 14 90 16 90-18 90 1A 90 1C 90 1E 90  ................
9020  20 90 22 90 24 90 26 90-28 90 2A 90 2C 90 2E 90   .".$.&.(.*.,...
>jp a000
00
)i
49
00
)d
44
TEST1   .BIN    TEST2   .BIN    TEST3   .BIN    TEST4   .BIN    TEST5   .BIN    TEST6   .BIN    TEST9   .BIN    TEST10  .BIN    TEST11  .BIN    TEST12  .BIN    TEST13  .BIN    
END

)l test13.bin
30,54,31,45,32,53,33,54,34,31,35,33,36,2E,37,42,38,49,39,4E,3A,4E,3B,00,
00
30,54,31,45,32,53,33,54,34,31,35,33,36,20,37,20,38,42,39,49,3A,4E,3B,00,
00
00
SIZE=0235
8234
)e
>dm 8000,8030
8000  00 90 02 90 04 90 06 90-08 90 0A 90 0C 90 0E 90  ................
8010  10 90 12 90 14 90 16 90-18 90 1A 90 1C 90 1E 90  ................
8020  20 90 22 90 24 90 26 90-28 90 2A 90 2C 90 2E 90   .".$.&.(.*.,...
8030  30 90 32 90 34 90 36 90-38 90 3A 90 3C 90 3E 90  0.2.4.6.8.:.<.>.
>dm 81e0,8240
81E0  E0 91 E2 91 E4 91 E6 91-E8 91 EA 91 EC 91 EE 91  ................
81F0  F0 91 F2 91 F4 91 F6 91-F8 91 FA 91 FC 91 FE 91  ................
8200  00 92 02 92 04 92 06 92-08 92 0A 92 0C 92 0E 92  ................
8210  10 92 12 92 14 92 16 92-18 92 1A 92 1C 92 1E 92  ................
8220  20 92 22 92 24 92 26 92-28 92 2A 92 2C 92 2E 92   .".$.&.(.*.,...
8230  30 92 32 92 34 FF FF FF-FF FF FF FF FF FF FF FF  0.2.4...........
8240  FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF  ................
>/exit
0000 00C3 - 
リモート接続を終了しました
logfile closed at Mon Oct 23 11:25:28 2023

[第87回]でSDカードIFボードのデバッグをするために、いきなりPIC18F4550に接続するのではなくて、まずはND80Z3.5に接続するようにします、と書きました。
ND80Z3.5を使うとデバッグが楽になりますと書きましたが、実際ND80Z3.5はプログラムの開発ツールとして十分な機能を備えています。
手前味噌ですけれどほんとうにND80Z3.5はすぐれものなのです。

PICBASICコンパイラ[第92回]
2023.10.23upload

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