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


PICBASICコンパイラ

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

[第88回]



●SDカードIF(8)ND80Z3.5に接続(1)デバッグプログラム、I、RS、Mコマンド

また間が空いてしまいました。
以前にも書きましたように新SDカードIFボードに実装するPIC18F2550にはただのSDカードインターフェースだけではなくて基本的なDOSの機能も加えるつもりでそのためのプログラムの作成作業をしてきました。
PICに限らずプログラムの作成にはデバッグが欠かせません。
新SDカードIFボードはPICBASICコンパイラボードに接続してBASICで使うことができるようにするのが最終的な目的です。
しかしいきなりPICBASICコンパイラボードに接続した状態でデバッグを行なうのは相当にホネな作業です。
ま。
それしか方法がないならばそうするしかないでしょう。
その場合にはそのような接続をしたまま新SDカードIFボードのデバッグができるような機能をPICBASICコンパイラボードに組み込むことになります。

今どきは既存(既製)の開発ツールを利用してそれを行なうのが当たり前になっているようです。
以前お付き合いいただいておりました当地名古屋の大学の先生からお聞きしたお話です。
大学院の研究生に課題を出すと
「先生。それはできません」
というのだそうです。
なぜ?
と聞くと彼らはきまってこういうんだよ。
「だって先生。インターネットで捜してもそんなツールは見つかりませんでしたから」
助手とか同僚でもそうなんだから、もう嫌になってしまうよ。
なければ自分で作るんだよ。

そう。
その通りであります。
昔はその通りでありました。
ものづくりは何でもまずそのための道具作りから始めるのが基本でありました。
しかし時代は変わってしまいました。
ものづくり大国ニッポンはどこに行ってしまったのでありましょうか。

余談でした。
お話をもとに戻します。
実際にPICBASICコンパイラボードに新SDカードIFボードを接続する段階では、やっぱりそのためにおそらく必要になるであろうデバッグプログラムを(PICBASICコンパイラボードかUSBIFボードに)組み込むことになると思います。
しかしそうするよりも前にまずND80Z3.5に接続してデバッグをするようにしたほうがはるかに効率的です。
もちろんその場合でもND80Z3.5上で動くデバッグプログラムは作る必要があります。
ですけれど。
ND80Z3.5にはその助けになる(Z80の)マシン語モニタプログラムなどが組み込んでありますからそりゃあ効率が違います。

前置きが長くなってしまいました。
ということで実際にND80Z3.5に接続して新SDカードIFボードのDOS機能を確認するところなどをお見せするつもりだったのですが。
なにせ時間が無いところにもってきて面倒なところは後回しにしてきたことが仇(あだ)になってしまい、あっちでもこっちでもおかしなところがボロボロ出てきてしまいました。
やっとのことでバグをみつけてひとつクリアすると、今度はまた別の異常がみつかるといった具合でここ数日はずっとそのための対策に追われてきました。
まだどこかに虫どもが潜んでいるかもしれませんが、やっと皆様に披露できるところまで来たと思いますので久し振りのホームページの更新です。

ここまで書くだけでもちょいと疲れてしまいました。
なにせ病み上がりの年寄りですので。
また余談になってしまいます。
実はここ数年ちょっと太り気味で、気をつけてはいたのですが今年の春には体重が65Kgになってまいました。
私は小柄で背は162cmほどですからBMIは24.77!
限りなく肥満の手前です。
適正体重は57.74Kgだとか。
ずっと82cmのズボンをはいていたのですがさすがにきつくて85cmに行くか減量するかの岐路に立たされたのであります。
もちろん100歳まで生きようとしますとここは減量するしかほかに道はありません。
毎日1時間歩く?
そんな時間は無い。
即、却下であります。
となるとメシを減らして間食(甘いもの大好き)を禁止するしかありません。
これはつらい。
でもやってきましたよ。
ええ。
この半年間で65Kgから57〜58Kgまで減量いたしました。
ほぼ目標達成ですけれどそれではノリしろがありません。
不思議なもので努力しても体重はなかなかに減らないのに増えるほうは1Kgや2Kgは数日であっという間です。
もう随分以前にも今回と同じように65Kgほどから57Kgほどまで減量したことがあります。
でも気が付いたらまた元通りになってしまいました。
そういうアップダウンを繰り返すのは身体に一番良くないのだとか。
高校の同窓生がどこで仕入れたのか「高校の頃の体重を維持するのがベストなんだよ」なんていいます。
確かそのころは56Kgほどだったか。
むむむ。
BMIと微妙に一致するなあ。
そういえば。
彼がこんなことも言いました。
「あのなあ。外で俺達よりももっと年寄りを見るとみんな背が低いだろ」
「うん」
「昔の人は背が低かったかというと多少は今よりは低かったと思うけれど、あんなに低かったなんてことはないんだよ」
「?」
「あれはなあ。歳を取るとみんな縮むんだよ」
目からウロコであります。
あらためて測ってみましたら。
どうも162cmは無いみたい。
せいぜい161cmか。
おお。
BMIの計算のし直しじゃ。
161cmでは57Kgがジャスト適正体重です。
すると。
ノリしろを考えると56Kgぐらいを維持するのが適当かと。
いまが57〜58Kgだからもうあとひとがんばりか。
それがコロナ感染直前でありました。

なにしろ一週間ほどはなかなか平熱に下がらず、ちょいと身体もだるくて食欲も余りありません。
カップ麺を食べたらやたら塩を感じていつもなら汁まで飲んでしまうのに麺を食べるのがやっとという状態でした。
好物の焼きそばも食べる気になりません。
漬物で軽くお茶漬けを、なんてことをやっていました。
そうしましたらなんと。
一週間ほどで体重が53Kgに!
うわあ。
一気に減量達成!
というよりも逆に命の危険を感じました。
いかん。
このままでは死んでしまう。
なんとか100歳まで生きるのじゃ。

お昼には家族でよく近くのスーパーのフードコートに行くのですが。
カツ丼とかチャーハンとかオムライスとかが安くておいしい。
うれしいことに大盛り無料です。
いつもきまって大盛りを頼んでおりました。
いえ。
私ひとりでは食いませぬ。
妻と半分ずっこ。
いや7:3ぐらいか。
そりゃあ太ります。
それで減量中は大盛りは封印いたしました。
店のおねえさんが聞きます。
「あら。今日は大盛りじゃないの?」
「うん。ちょっと太りすぎちゃったから。今減量中」

しかし。
今度は命の危機であります。
「とんかつ乗せカレーうどん+ごはん。両方大盛りで!」
いやいやいや。
大丈夫か。

でも。
やっと55Kgまで戻ってきましたです。
食欲も戻ってきましたし味覚もほぼ正常になりました。

もうひとつ。
コロナ以後困っていたことがあります。
尾篭な話で恐縮でありますが。
感染から一週間ほどはずっと下痢続きでした。
むむ。
体内の悪しきものを排出するための自己防衛の働きか。
ところがやっとそれが収まったかと思ったら今度は便秘です。
早い話がウンコがでない。
そりゃあ食べなければ出るわけがありません。
そこそこは食べるようになったのですけれど、なんとなく下腹が張ってトイレに行くのですが思い切りりきんでも小さいのがコロンとでるだけ。
いかん。
こんなことをしていると痔が悪くなる。
七難八苦であります。
むむ。
医者に行って下剤を処方してもらうか。
いかんいかん。
それは敗北じゃ。
原始人としての信条に反する。
自然の摂理に反する。
ここは自然体で。
ミになるものをいっぱい食べて。
寝起きには冷たい水をたっぷり飲んで。
ありがたいことに今朝になりましたら。
ごっそり出ました。
本当に久し振りです。
あんまりごっそり出たものですから、水を流しても全部流れてくれなくて。

しかし。
あんなに出なくて困っていたものがなぜに突然。
はて。
いつもと違っていたことといえば。
昨晩は寝る前にコロナ感染以後ずっと飲んでいなかった金麦を久し振りに飲みました。
全快祝いであります。
飲んだといったってほんの少し、350mlを妻と分けて半分ずつ。
そうか。
それだ。
それが利いたに違いない。

本題に戻ります。
ND80Z3.5に新SDカードIFボードを接続してZB3BASICを起動しました。

Windows98SEのMS−DOSプロンプト(コマンドプロンプト)画面です。
Windows98SEは余りに軽快で便利なのでなかなか手放せません。
いまだに健在です。
psdif4r.binをロードして実行しました。
これが新SDカードIFボードのために作成したデバッグプログラムです。
作業のためのエリアを確保するために後ろの方のアドレスA000にロードしました。
A000〜A6F7ですから2KB弱の小さなプログラムです。
現在もデバッグは進行中ですから今後プログラムサイズが増えるかもしれません。
このプログラムは汎用ではありません。
新SDカードIFボードのデバッグのために作成したツールです。
しかしSDカードにアクセスしたりPIC18F2550のレジスタを参照したりといったような、あると便利な機能を色々作りましたからSDカードがらみの何かに応用できるかもしれません。
まだデバッグツール(psdif4r.bin)自体もデバッグ中ですのでコマンドの実行時にデバッグのためのいろいろな表示も出しています。
jp a000[enter]で実行を開始すると新SDカードIFボード上のPIC18F2550がリセットされて必要な初期設定が実行されます。
それが正常に終了すると00が表示されて ) が表示され以後デバッグコマンドが入力可能になります。
最初にiコマンドを入力しました。
iコマンドはSDカードをイニシャライズするためのコマンドです。
49
02
と表示されました。
49はデバッグのためにPIC18F2550が応答したエコー(49はIのASCIIコード)です。
その次の02はエラーコードです。
02はSDカードの認識に失敗したときに出されます。
SDカードによっては起動直後のアクセス時に出ることがあります。
大抵はiコマンドを再度実行すればクリアできます。
iコマンドを再実行したところ今度は00が表示されました。
00は処理が正常に完了したときにPIC18F2550が送出するコードです。

さて。
ここからがデバッグプログラムのキモです。
rs1 0000を実行しました。
何も表示されずに ) が表示されました。
rs1 xxxxはセクタリードコマンドです。
xxxxはセクタナンバー(セクタアドレス)の下位4バイト(16進数)です。
2GBのSDカードの場合セクタアドレスは16進数6桁ですがデバッグのために毎回6桁を入力するのは面倒ですしどうせデバッグですから0000〜FFFFがアクセスできれば十分でしょう。
デバッグツールでは最上位アドレス2桁は00に固定しています。
rs1はread sectorの略で1は指定したセクタのデータ(512バイト)をPIC18F2550のレジスタバンク1とレジスタバンク2にロードすることを意味しています。
rs1のほかにrs3とrs5もあります。
rs3は読み出したデータをPIC18F2550のレジスタバンク3とレジスタバンク4にロードします。
rs5は読み出したデータをPIC18F2550のレジスタバンク5とレジスタバンク6にロードします。
SDカードの1セクタは512バイトなのでそれを読み出して格納するためには512バイトの連続したエリアが必要です。
PIC18F2550のレジスタバンクは1バンク256バイトです。
PIC18F2550のレジスタバンク(メモリバンク)については[第86回]で説明しました。
連続した512バイトのエリアが必要なので最低でも完全にフリーで使えるGPR(General Purpose RAM)が2バンクは必要です。
実際にファイルの形でセーブ、ロードするためにはそのほかにFATエリアやDIRエリアのロード、セーブも必要ですから最低6バンクは必要になります。
rs1 0000はSDカードの先頭セクタ(セクタbO000)のデータを読み出してそれをレジスタバンク1と2に書き込むコマンドです。
それを実行したあとはレジスタバンクのデータを読み出して表示する機能が必要です。

m 1を実行しました。

m nはレジスタバンク(メモリバンク)nの256バイトのデータを読んで表示するコマンドです。
nは0〜Fの範囲の1桁の16進数でレジスタバンク0〜Fに対応しています。
m 1の実行によって4D01が表示されたあと256バイトのデータが表示されました。
4D01はPIC18F2550から返されたエコーで4DはMのASCIIコードです。
01はレジスタバンク1を示しています。
そのあとレジスタバンク1のデータ256バイトが送信されてきましたのでそれを見やすい形にアレンジして表示しました。
PIC18F2550から送られてくるデータは素のままの256バイトなのでそれをアレンジして表示しているのはND80Z3.5にロードしたデバッグプログラムです。
rs1 0000とそれに続くm 1の実行によってレジスタバンク1と2に書き込まれたSDカードのセクタbO000の前半256バイトのデータが表示されました。

余計なことを長々と書いてしまいましたのでちょっと長文になってしまいました。
説明の途中ですが今回はここまでといたします。
この続きは次回に書くことにします。

PICBASICコンパイラ[第88回]
2023.10.14upload

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